chore(部署): 增加 Docker 部署配置

关键改动:

- 新增本地和生产 Docker Compose、Web/Server Dockerfile 与 Nginx 模板

- 增加生产部署校验脚本、环境变量示例和 Prisma 初始迁移

- 更新部署文档、README 和架构/决策/流程/路线图说明

Co-Authored-By: Codex GPT-5 <codex@openai.com>
This commit is contained in:
Script Generator
2026-07-01 16:04:18 +08:00
parent 06b4aad7a4
commit 61f4ca51f1
22 changed files with 1051 additions and 1 deletions

View File

@@ -460,3 +460,19 @@
- 版本级统计、工作台和风险预警统计包含无需求ID分组任务/用例;需求级进度和需求关闭条件只统计带正式 `requirementId` 的 DevTask。
**理由**:关联需求代表人为确认的正式范围,不能被 AI 静默扩写;但原型批注也是当前版本真实交付范围的重要证据,不应该因为没有 REQID 被丢掉。无需求ID分组让任务和用例完整进入执行视图同时保持需求池干净、关联需求列表可信。
## 38. 生产部署采用 Docker Compose + Nginx 同域反代
**问题**:系统已经从浏览器 localStorage 迁到 NestJS + PostgreSQL `app_data`,可以部署到云服务器,但如果只依赖开发命令,生产环境会缺少统一编排、健康检查、持久卷、反向代理和数据库初始化流程。
**决策**
- 生产部署使用 `docker-compose.prod.yml` 编排 `web``server``postgres``redis``nginx`
- 本地服务器/局域网部署使用 `docker-compose.local.yml`,同样跑完整五服务栈,但默认绑定宿主机 `8080`,并使用独立 `local_*` volumes。
- `web``server` 分别用 `Dockerfile.web``Dockerfile.server` 从 monorepo 根目录构建,先构建 `@ftb/shared`,再构建各自应用。
- 对外只暴露 Nginx 80 端口;`/api/` 转发到 NestJS其他路径转发到 Next.js。
- 前端生产默认使用同域 API`NEXT_PUBLIC_API_URL=/api/v1`,避免浏览器跨域配置。
- PostgreSQL、Redis 和 server 文件数据分别使用 `postgres_data``redis_data``server_data` 命名卷持久化。
- 数据库生产初始化走 `prisma migrate deploy`,仓库保留初始 migration本地开发仍使用 `prisma migrate dev`
- HTTPS 先交给云负载均衡、CDN、宿主机证书工具或外层 Nginx 终止Compose 内置 Nginx 保持 HTTP 反代基线。
**理由**Docker Compose 足够覆盖当前单机云服务器和本地服务器形态,部署成本低、可读性强,也符合现阶段 2 核 4G 云主机目标。同域反代能减少 CORS 和公网端口暴露面。本地服务器默认 8080避免占用 80 端口或要求管理员权限;云服务器继续使用 80 作为外层入口。HTTPS 证书自动续期和域名接入在不同云环境差异较大,先作为外层能力处理,避免把生产部署模板绑死在某一种证书方案上。