> ## Documentation Index
> Fetch the complete documentation index at: https://docs.profy.cn/llms.txt
> Use this file to discover all available pages before exploring further.

# 端到端：发布一个站点

> 从需求到上线可访问的网址，含发布前的三道闸门与站点标识规则

这篇用 Sites 插件做一个网站并真正发布出去，最后拿到一个 `https://xxx.site.profy.cn` 的公开地址。

需要先建立的一个认知：**专家不能自己发布**。它的 `deploy` 工具只是举手说「我准备好了」，真正的发布必须由你在界面上点确认。这不是流程繁琐，是刻意的设计——发布是不可逆的对外动作，不应该由模型单方面决定。理解这一点，后面「为什么它说部署了但网址打不开」就不会成为困惑。

## 你会得到什么

一个公开可访问的静态站点，地址形如 `https://<你的站点标识>.site.profy.cn`。

## 前置条件

<Steps>
  <Step title="勾选 Sites 插件">
    Sites 是需要手动勾选的插件之一。没勾选时专家没有建站工具，它会退而用普通文件写 HTML——那条路发布不了。
  </Step>

  <Step title="确认沙盒可用">
    Sites 依赖沙盒。沙盒模式为「无沙盒」的专家用不了。
  </Step>

  <Step title="准备素材">
    自己的 Logo、产品图、品牌色先备好。让模型全部生成会拉长流程并产生生图费用。
  </Step>
</Steps>

## 步骤

### 第 1 步：说清楚要什么，让它先给方向

```text theme={null}
帮我做一个产品官网，产品是一个面向独立开发者的错误监控工具。

内容结构：首屏主张 / 三个核心能力 / 定价（三档）/ FAQ / 页脚
调性：技术感、克制、深色底
不要：轮播图、渐变紫、堆砌的客户 Logo 墙

先给我几个设计方向看看，我选一个再开始写。
```

专家会用设计方向工具展示几个候选，你确认后它才会把设计基调固定下来。这一步的价值在于**把审美分歧提前到还没写代码的时候**——等页面写完再说「不是这个感觉」，返工量是几十倍。

### 第 2 步：提供素材

有自己的图就直接发给它，或者给 URL 让它下载归档：

```text theme={null}
这几张图用起来：
- Logo：https://example.com/logo.svg
- 产品截图：https://example.com/screenshot-1.png
把它们下载到站点素材目录，在页面里引用。
```

<Note>
  素材有体积预算：站点素材目录整体不超过 40 MiB。单个文件超过 2 MB 时会自动转存到对象存储并用外链引用，不占本地额度。所以「图太多发不出去」通常不是素材总量的问题，而是构建产物整体超限（见下）。
</Note>

### 第 3 步：开预览，边看边改

```text theme={null}
起个预览，我要边看边提意见。
```

预览会启动开发服务器并在右侧面板打开，支持热更新——你说「主标题再大一点」，改完刷新就能看到。

<Tip>
  第一次启动预览可能要等一会儿（几十秒级别）。这是冷启动，不是卡死。看到「仍在启动」之类的提示就再等等，别急着重开——重开会让它从头再来一遍。
</Tip>

改的时候一次只提一类问题：

```text theme={null}
三个地方要改：
1. 首屏标题字号太小，放大到接近视口高度的视觉重量
2. 定价卡片的中间那档要突出，加边框和「推荐」标记
3. FAQ 折叠动画太慢，收紧到 150ms 左右
改完告诉我，我刷新看。
```

### 第 4 步：发布前的三道闸门

当你说「可以发布了」，专家调 `deploy`，这时会有三道检查。**任何一道没过它都不会给你发布卡片**，而是告诉你卡在哪：

| 闸门        | 检查什么               | 没过的表现        |
| --------- | ------------------ | ------------ |
| 工作区可达     | 沙盒是否连着             | 提示先确认预览正常运行  |
| 临时设计路由已清理 | 第 1 步产生的方向预览页是否删干净 | 提示还剩几个临时文件   |
| 素材体积      | 素材目录是否超 40 MiB     | 提示超限，需要压缩或减量 |

这三道都是**失败即拦截**（不是警告后放行）。临时设计页尤其重要——那是给你挑方向用的中间产物，跟着正式站点一起发出去会很尴尬。

三道都过了，专家会返回「等待确认部署」的卡片，提示你去右侧 Website 面板点「部署」。

### 第 5 步：在界面上确认发布

点部署后填站点标识（slug），规则是：

| 规则  | 说明                                                     |
| --- | ------------------------------------------------------ |
| 字符  | 只能是小写字母、数字、连字符                                         |
| 首尾  | 必须是字母或数字，不能是连字符                                        |
| 长度  | 3-63 个字符                                               |
| 保留字 | `api` / `app` / `www` / `admin` / `profy` / `test` 不可用 |
| 归属  | 一个标识只归一个人，别人占用过的发布会被拒绝                                 |

输入时会实时校验，四种结果：可用、格式不对、是保留字、已被他人占用。

<Note>
  用你自己已经发布过的标识再发一次，是**更新**这个站点而不是冲突——覆盖的是你自己上一版的内容，这也是正常的迭代方式。想同时保留两个版本就换一个标识。

  需要注意的是这个空间是全局共享的，通用词（`docs`、`home`、`demo`）大概率已经有主。带上能区分你的前缀更容易一次占到，比如 `acme-errmon-2026`。
</Note>

<Warning>
  **归属登记是 2026-08-11 之后才有的。** 在那之前发布的站点没有留下归属记录（当时的发布不记录是谁发的，也就无法追溯补登），这些老标识按「首个再次发布的人占有」处理。如果你有早期发布且还在用的站点，尽早重新发布一次把名字登记到自己名下。
</Warning>

确认后开始构建并上传，整个过程可能需要几分钟。成功后返回可访问的网址。

### 第 6 步：验收

1. **用手机流量打开**（不是自己电脑的浏览器）——排除本地缓存造成的假象
2. 点一遍所有导航和内页链接，确认没有 404
3. 确认临时设计方向页确实不在了（试着访问一下你记得的那个路径）
4. 确认图片都加载出来了，特别是转存到外链的大图

## 发布链路里发生了什么

知道这条链路有助于看懂错误信息：

<Steps>
  <Step title="构建">
    在沙盒里执行构建，产出静态文件。这一步有时间上限（约 200 秒），项目过大或依赖异常会超时。
  </Step>

  <Step title="产物校验">
    校验构建产物：总体积不超过 50 MiB，文件数不超过 5000。超了直接拒绝，不会传上去。
  </Step>

  <Step title="上传">
    文件上传到对象存储，这是站点实际对外服务的地方。这一步失败则整体失败。
  </Step>

  <Step title="边缘预览（尽力而为）">
    同时往边缘平台部署一份作为预览备份。**这一步失败不影响发布成功**，你的主地址照常可用。
  </Step>
</Steps>

注意第 2 步的 50 MiB 约束的是**整个构建产物**（素材 + JS + CSS + HTML），而第 4 步闸门的 40 MiB 只约束素材目录。所以素材没超但发布被拒是可能的——那说明 JS/CSS 部分占掉了剩余空间。

## 边界与失败态

| 现象                   | 原因                      | 处理                     |
| -------------------- | ----------------------- | ---------------------- |
| 专家说「已部署」但网址打不开       | 它没有发布能力，只是发了信号          | 到 Website 面板点部署        |
| deploy 返回「临时设计路由未清理」 | 方向预览页还在                 | 让它删掉那些文件后重试            |
| deploy 返回素材超限        | 素材目录超 40 MiB            | 压缩图片、减少数量，或改用外链        |
| 发布报「构建失败」            | 代码有编译错误，或构建超时           | 让专家看构建日志修错；项目过大就精简依赖   |
| 发布报产物过大              | 构建产物超 50 MiB 或文件数超 5000 | 压缩素材、去掉 sourcemap、精简依赖 |
| 发布成功但页面空白            | 前端运行时报错                 | 让专家开预览截图自检，看控制台报错      |
| 发布被拒：标识已被占用          | 这个标识归别人                 | 换一个带区分度的标识             |
| 预览起不来                | 沙盒冷启动慢，或依赖未装好           | 再等一会儿；持续失败让专家检查依赖安装    |
| 找不到 Sites 相关工具       | 插件没勾选                   | 在插件面板勾选 Sites          |

## 更新已发布的站点

改完之后重新走一遍确认发布，**用同一个站点标识**，会覆盖线上内容。没有灰度、没有版本回滚——需要保留旧版就换一个标识发一份新的。

## 相关页面

<CardGroup cols={2}>
  <Card title="Sites 建站" icon="globe" href="/zh/documentation/capabilities/sites">
    Sites 能力总览
  </Card>

  <Card title="限额与配额" icon="gauge" href="/zh/documentation/reference/limits">
    体积与数量限制汇总
  </Card>

  <Card title="插件全表" icon="puzzle-piece" href="/zh/documentation/reference/plugins-catalog">
    哪些插件需要手动勾选
  </Card>

  <Card title="图片生成" icon="image" href="/zh/documentation/capabilities/image-generation">
    生成站点配图的计费口径
  </Card>
</CardGroup>
