外观
线上部署流程
线上部署按“确认当前状态、保留回滚点、发布变更、重启服务、验证链路”的顺序执行。操作前必须确认待发布内容不包含明文凭据、患者敏感信息或生产连接串。
部署对象
| 对象 | 当前生产路径或服务 | 验证方式 |
|---|---|---|
| 后端服务 | /opt/fitdoc/backend、fitdoc-core.service | systemctl is-active fitdoc-core、curl http://127.0.0.1:8001/health |
| 官网静态页 | /opt/fitdoc/frontend | 浏览器或 curl http://127.0.0.1/ |
| 静态视频 | /var/www/fitdoc/static/videos | 访问 /static/videos/ 下具体资源。 |
| 上传资源 | /opt/fitdoc/backend/uploads | 访问 /uploads/ 下具体资源。 |
| Nginx 配置 | /etc/nginx/sites-enabled/fitdoc | nginx -t、systemctl reload nginx |
| 文档站源码 | docs_site/ | npm run docs:build |
发布前检查
bash
ssh fitdoc-ecs "systemctl is-active fitdoc-core nginx gitea"
ssh fitdoc-ecs "ss -tlnp | grep -E '(:80|:443|:8001)'"
ssh fitdoc-ecs "curl -s http://127.0.0.1:8001/health"后端变更发布前,本地至少完成:
powershell
cd D:\Fitdoc_app\apps\backend_service
pytest文档变更发布前,本地至少完成:
powershell
cd D:\Fitdoc_app\docs_site
npm run docs:buildFlutter 安装包发布前,本地至少完成:
powershell
cd D:\Fitdoc_app\apps\flutter_app
flutter pub get
flutter build apk --release后端发布顺序
| 步骤 | 动作 | 核对点 |
|---|---|---|
| 1 | 确认当前服务状态和健康检查。 | fitdoc-core、nginx 均 active。 |
| 2 | 在 ECS 上保留可回滚副本或确认已有备份包。 | 备份目录位于 /opt/fitdoc/backups。 |
| 3 | 同步后端代码和依赖。 | 不覆盖服务器 .env。 |
| 4 | 执行数据库迁移。 | alembic upgrade head 成功;失败时停止重启。 |
| 5 | 重启后端服务。 | systemctl restart fitdoc-core。 |
| 6 | 验证本地 upstream 与 Nginx 代理。 | /health 均返回健康状态。 |
常用命令:
bash
cd /opt/fitdoc/backend
source venv/bin/activate
pip install -r requirements.txt
alembic upgrade head
sudo systemctl restart fitdoc-core
systemctl is-active fitdoc-core
curl -s http://127.0.0.1:8001/health
curl -s http://127.0.0.1/healthNginx 配置发布
bash
sudo nginx -t
sudo systemctl reload nginx
systemctl is-active nginx只有在 nginx -t 通过后才重载。Nginx 路由变更要重点核对 /api、/health、/docs、/openapi.json、/uploads/ 和 /static/videos/ 的优先级。
文档站发布边界
文档站本地构建:
powershell
cd D:\Fitdoc_app\docs_site
npm run docs:build产物路径:
text
docs_site/.vitepress/dist/当前生产 /docs 路径由 Nginx 转发到 FastAPI 文档面。VitePress 文档站发布到 /doc-center/,由官网静态目录承载,不覆盖 /docs、/openapi.json 或 /redoc。
验证清单
| 检查 | 命令 | 预期 |
|---|---|---|
| systemd 服务 | systemctl is-active fitdoc-core nginx | 均返回 active。 |
| 后端 upstream | curl -s http://127.0.0.1:8001/health | 返回健康状态 JSON。 |
| Nginx 代理 | curl -s http://127.0.0.1/health | 返回健康状态 JSON。 |
| 端口监听 | ss -tlnp | grep -E '(:80|:443|:8001)' | 80/443 对外,8001 本地监听。 |
| OpenAPI | curl -I http://127.0.0.1/openapi.json | 返回成功状态。 |
| 文档中心 | curl -I http://127.0.0.1/doc-center/ | 返回成功状态。 |
| 静态视频 | 访问一个已存在视频路径 | 返回资源或明确 404,不能被 API 代理吞掉。 |
回滚原则
- 代码回滚优先恢复到发布前的后端目录或 Git revision。
- Nginx 回滚优先恢复发布前站点配置,再执行
nginx -t和 reload。 - 数据库迁移失败时不要继续重启服务;已执行的 migration 需要按 Alembic revision 和变更内容单独评估。
- 环境变量变更必须保留修改前 key 列表和修改原因,但不复制真实值到文档或聊天记录。
来源锚点
docs/新服务器运维手册.mdapps/backend_service/alembic.iniapps/backend_service/requirements.txtdocs_site/package.json- 生产 ECS 只读服务状态与 Nginx 配置核验