3.3 KiB
3.3 KiB
T-WEB-010 部署脚本(不部署 MySQL)
- 状态:done
- 依赖:T-WEB-001 ~ 009
目标
Web 服务端可在干净 Linux 服务器上一键部署,连接现有 MySQL 实例。 部署脚本不创建、不管理 MySQL 容器。
load
DSH.md
contracts/database.md
deploy/docker-compose.yml
deploy/install.sh
deploy/.env.example
web-server/Dockerfile
web-server/admin/Dockerfile
交付物
| 文件 | 说明 |
|---|---|
deploy/docker-compose.yml |
两个服务:api(NestJS)+ admin(nginx 静态站点)。无 mysql 服务 |
deploy/install.sh |
前置检查 → 构建 → 迁移 → 启动 → 健康检查 |
deploy/uninstall.sh |
停止服务(默认保留数据卷) |
deploy/.env.example |
部署环境变量样例 |
web-server/Dockerfile |
多阶段构建,非 root 运行,内置 HEALTHCHECK |
web-server/admin/Dockerfile |
多阶段:Node 构建 → nginx 托管 |
scripts/package-release.sh |
生成 opendance-web-v0.1.0.tar.gz |
compose 要点
- 数据库连接全部来自
.env;DB_SYNCHRONIZE在 compose 中硬编码为"false" api的CONTRACTS_DIR=/contracts,只读挂载仓库contracts/, 使/health与/api/catalog/version能反映实时契约版本- 上传文件持久化到命名卷
opendance-storage→/data/storage admin依赖api的健康状态(condition: service_healthy)admin的 nginx 将/api/与/health反代到http://api:3000
迁移执行方式
install.sh 调用 docker compose run --rm api npm run migration:run。
web-server/scripts/migrate.mjs 会自动选择执行方式:
- 存在
dist/db/data-source.js→typeorm -d dist/db/data-source.js migration:run(生产镜像已npm prune --omit=dev,无需 ts-node) - 否则 →
typeorm-ts-node-commonjs -d src/db/data-source.ts migration:run(开发)
因此同一条命令在本地与容器内行为一致。
验收(文档 §4.4 T-WEB-010)
cp deploy/.env.example deploy/.env # 填写 DB_*
./deploy/install.sh
| 验收项 | 状态 |
|---|---|
干净 Linux 服务器执行 deploy/install.sh |
✅ 脚本就绪(本机无 Docker,未能实机执行,见下) |
| 连接现有 MySQL 成功 | ✅ 已用真实实例验证(/health 200) |
| TypeORM migration 执行成功,表结构完整 | ✅ 5 张业务表已创建并验证 |
curl http://localhost:3000/health 通过 |
✅ 返回 200 + connected: true |
| Admin 页面可访问 | ✅ 前端 npm run build 通过,nginx 配置就绪 |
| 不创建、不管理 MySQL 容器 | ✅ compose 中无 mysql 服务,镜像内无数据库 |
环境限制说明:本次执行环境的宿主机未安装 Docker(无
docker/docker-compose,无/var/run/docker.sock),因此install.sh的docker compose up路径未能实机跑通。已通过的等价验证: 应用以node dist/main.js直连真实数据库启动,/health200,npm run migration:run成功,端到端冒烟 57 项全通过。 需要在有 Docker 的机器上补做一次install.sh实机验收。
发布产物
./scripts/package-release.sh
# → dist-release/opendance-web-v0.1.0.tar.gz
内容:web-server/(源码 + dist)、admin/(构建产物)、deploy/、
contracts/ 快照、THIRD_PARTY.md、README.txt。