521e6c8824
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
69 lines
2.8 KiB
Docker
69 lines
2.8 KiB
Docker
# =============================================================================
|
||
# 企微IT智能服务台 — 后端 Docker 镜像构建文件
|
||
# =============================================================================
|
||
# 说明:基于 Python 3.12 构建后端镜像
|
||
# 用法:docker build -t wecom-it-desk-backend .
|
||
# =============================================================================
|
||
|
||
# --------------------------------------------------------------------------
|
||
# 第一阶段:构建阶段
|
||
# --------------------------------------------------------------------------
|
||
FROM python:3.12-slim AS builder
|
||
|
||
# 设置工作目录
|
||
WORKDIR /app
|
||
|
||
# 安装系统依赖(psycopg2 编译需要 + qrcode 图片处理需要 + healthcheck 需要 curl)
|
||
RUN apt-get update && \
|
||
apt-get install -y --no-install-recommends gcc libpq-dev libjpeg-dev zlib1g-dev curl && \
|
||
rm -rf /var/lib/apt/lists/*
|
||
|
||
# 复制依赖声明文件并安装(利用 Docker 层缓存,依赖不变则不重新安装)
|
||
# 使用清华大学 PyPI 镜像源,解决公司内网下载 PyPI 官方源超时问题
|
||
COPY requirements.txt .
|
||
RUN pip install --no-cache-dir \
|
||
--timeout 120 \
|
||
--retries 5 \
|
||
-i https://pypi.tuna.tsinghua.edu.cn/simple/ \
|
||
--trusted-host pypi.tuna.tsinghua.edu.cn \
|
||
-r requirements.txt
|
||
|
||
# --------------------------------------------------------------------------
|
||
# 第二阶段:运行阶段(更小的镜像体积)
|
||
# --------------------------------------------------------------------------
|
||
FROM python:3.12-slim
|
||
|
||
# 设置标签信息
|
||
LABEL maintainer="IT服务台开发团队"
|
||
LABEL description="企微IT智能服务台后端服务"
|
||
|
||
# 安装运行时依赖(psycopg2 运行时需要 libpq + healthcheck 需要 curl)
|
||
RUN apt-get update && \
|
||
apt-get install -y --no-install-recommends libpq5 curl && \
|
||
rm -rf /var/lib/apt/lists/*
|
||
|
||
# 设置工作目录
|
||
WORKDIR /app
|
||
|
||
# 🔧 v0.7.0-alpha 修复:显式设置 PYTHONPATH
|
||
# 原因:alembic 1.13+ 不默认 prepend cwd,导致 `from app.config import settings` 失败
|
||
# 关联:memory/docker-dev-alembic-pythonpath.md(同样问题 dev 环境也中招)
|
||
ENV PYTHONPATH=/app
|
||
|
||
# 从构建阶段复制已安装的 Python 包
|
||
COPY --from=builder /usr/local/lib/python3.12/site-packages /usr/local/lib/python3.12/site-packages
|
||
COPY --from=builder /usr/local/bin /usr/local/bin
|
||
|
||
# 复制项目代码(排除 .env 和 .env.*,避免覆盖 docker-compose 注入的环境变量)
|
||
COPY . .
|
||
# 删除可能被 COPY 进镜像的开发 .env
|
||
# 原因:pydantic-settings 会优先读 /app/.env,会覆盖 compose 的 environment 块
|
||
# 关联:memory/v070-alpha-backend-env-override-bug.md
|
||
RUN rm -f /app/.env /app/.env.* || true
|
||
|
||
# 暴露端口
|
||
EXPOSE 8000
|
||
|
||
# 启动命令(Docker Compose 中会覆盖为 alembic upgrade head + uvicorn)
|
||
CMD ["uvicorn", "app.main:app", "--host", "0.0.0.0", "--port", "8000"]
|