docs(deploy): 部署方案——开发机构建 + 服务器轻构建(Caddy)

按熟悉的工作流调整:构建在开发机完成(四绿验证后的 dist 才是部署物),SFTP 上传 dist/Caddyfile/compose.yaml/Dockerfile 四件到服务器,服务器上 docker build 仅做 COPY(无构建工具链需求,秒级)。单阶段 Dockerfile;.dockerignore 不再排除 dist(部署必需品)且继续排除 .env*;README 部署章节重写为三步流程(本机构建/SFTP/服务器 compose)。compose 文件采用 Compose 规范标准名 compose.yaml(docker-compose.yml 仅为向后兼容保留)。
This commit is contained in:
2026-09-08 21:00:19 +08:00
parent d1ddead178
commit 19b69e2d5a
5 changed files with 89 additions and 1 deletions
+27 -1
View File
@@ -50,10 +50,36 @@ bun run build # type-check + vite build(dist/)
## 已知边界
- 生产部署(`bun run build`)无 Vite 代理,需为网关路径配置反向代理
- `useClipboard` 在非 https 环境(如 http://localhost)自动降级 `execCommand`
- `/v1/models/:model` 单模型详情接口未纳入(数据源是硬编码静态表,与 `/v1/models` 不一致,无调试价值)
## 部署(开发机构建 + 服务器轻构建运行)
构建在开发机完成(四绿验证后的 dist 才是部署物),服务器只做镜像 COPY + 起容器,
不需要任何构建工具链。
```bash
# —— 开发机 ——
bun run build # 得到 dist/(此时已过 test/type-check/lint)
# SFTP 上传四个部署物到服务器同一目录:
# dist/ Caddyfile compose.yaml Dockerfile
# (.env 不上传,GATEWAY 在服务器上以 .env 或环境变量提供)
# —— 服务器(目录内需有 .env,内容为 GATEWAY=https://…)——
docker compose up -d --build # 首次:拉 caddy 镜像 + COPY 产物起容器,秒级
# 浏览器打开 http://<服务器IP>:8080
# —— 常规更新(开发机)——
bun run build # 重新构建
# SFTP 覆盖 dist/
docker compose up -d --build # 服务器上重新 COPY + 替换容器
```
- Caddy 承担与 dev 代理相同的职责:静态文件 + `/api`、`/v1` 转发到 `$GATEWAY` + SPA fallback
- 换网关:改服务器上的 `.env` 后 `docker compose up -d --force-recreate`(无需重新 build)
- 暴露公网时把 `Caddyfile` 的 `:80` 改为域名,Caddy 自动签发 HTTPS 证书
- `compose.yaml`(Compose 规范标准文件名)里 `GATEWAY` 为必填(未设置时启动即报错,不会带错误配置运行)
## 文档
- 交互与技术决策:`docs/bench交互设计文档.md`