Skip to content

线上部署流程

线上部署按“确认当前状态、保留回滚点、发布变更、重启服务、验证链路”的顺序执行。操作前必须确认待发布内容不包含明文凭据、患者敏感信息或生产连接串。

部署对象

对象当前生产路径或服务验证方式
后端服务/opt/fitdoc/backendfitdoc-core.servicesystemctl is-active fitdoc-corecurl 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/fitdocnginx -tsystemctl 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:build

Flutter 安装包发布前,本地至少完成:

powershell
cd D:\Fitdoc_app\apps\flutter_app
flutter pub get
flutter build apk --release

后端发布顺序

步骤动作核对点
1确认当前服务状态和健康检查。fitdoc-corenginx 均 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/health

Nginx 配置发布

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
后端 upstreamcurl -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 本地监听。
OpenAPIcurl -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/新服务器运维手册.md
  • apps/backend_service/alembic.ini
  • apps/backend_service/requirements.txt
  • docs_site/package.json
  • 生产 ECS 只读服务状态与 Nginx 配置核验