feat(deploy): v0.7.0-alpha 部署后改进(防御性构建 + 兼容层)

4 个文件解决 v0.7.0-alpha 部署中暴露的 3 个棘手问题:

1. backend/.dockerignore (新增)
   - 排除 .env / .env.* 防 pydantic-settings 覆盖 compose 注入
   - 排除 *.bak / *.db / *.log 防开发副产物进镜像
   - 排除 .git / .claude / docs / tests 等非运行时文件
   - 缩小最终镜像体积

2. backend/Dockerfile (修改)
   - ENV PYTHONPATH=/app:修 alembic 1.13+ 不再默认 prepend cwd 的 bug
   - RUN rm -f /app/.env /app/.env.*:防御性双保险(就算 .dockerignore 漏了)

3. backend/app/db.py (新增,兼容层)
   - 解决 main.py 第 98 行 from app.db import get_session_factory 失败
   - 一行别名:from app.database import _get_session_factory as get_session_factory

4. backend/scripts/post-deploy-healthcheck.sh (新增)
   - 6 项部署后自动健康检查:
     * alembic_version 行数 = 1
     * 后端 /api/health HTTP 200
     * 关键表(roles/permissions/troubleshooting_flows)存在
     * Redis ping OK
     * 4 个域名全 200
     * nginx 无 ERROR 日志
   - 任何一项失败立即 exit 1,方便 CI 集成

相关:memory/v070-alpha-deploy-runbook.md (9 个棘手问题 + 5 项改进)
关联:#191、#192、#200、#201
This commit is contained in:
Simon
2026-06-19 12:53:51 +08:00
parent 8bfd0cfdc3
commit 521e6c8824
4 changed files with 159 additions and 1 deletions
+16
View File
@@ -0,0 +1,16 @@
# =============================================================================
# app.db — 兼容层:把 app.database 的 _get_session_factory 暴露为 public 名称
# =============================================================================
# 背景:main.py 在 lifespan 里写的是 `from app.db import get_session_factory`,
# 但 session_factory 实际定义在 app/database.py(私有下划线 `_get_session_factory`)。
# 引入本模块,让 main.py 的 import 不需要改。
#
# 改动记录:
# - v0.7.0-alpha:新建此兼容层,用于生产环境热修复
# (无需改 main.py 也无需 rebuild 镜像)
# =============================================================================
from app.database import _get_session_factory
# 公开别名,让 `from app.db import get_session_factory` 工作
get_session_factory = _get_session_factory