caf9b7ed85
解决改代码 30-60min 才能看到结果的痛点。本地拉起完整 stack, 改代码 → 1-2min 看到结果,无需服务器。 ## 交付物 ### Docker stack (docker-compose.dev.yml) - postgres:16-alpine 端口 5432 - redis:7-alpine 端口 6379 - backend 端口 8000,代码 volume mount + uvicorn --reload ### Dev 镜像 (backend/Dockerfile.dev) - 单阶段(无需 gcc / libpq-dev) - apt 源换阿里云(公司内网) - 装 pytest pytest-asyncio httpx watchfiles - CMD: uvicorn --reload ### 配置 (.env.dev, 强制 add 因 .env.* 在 .gitignore) 内容是 dev 占位符,无任何真实密钥: - DEV_MODE=true (启用 Mock OAuth) - WECOM_* 全部 dev_xxx 占位 - 集成系统 API 全 dev_ 占位(调用会失败但不影响主流程) ### Mock OAuth (backend/app/api/dev_auth.py) - GET /api/dev/login?userid=xxx&name=xxx&role=xxx 走完全真实的 TokenService.create_token(不绕过业务逻辑) - GET /api/dev/users 列出 6 个预设 dev 用户 - GET /api/dev/health dev 模式状态自检 - 6 预设用户覆盖所有角色(user/agent/supervisor/security/admin/多角色) - 每个端点 _dev_mode_enabled() 二次校验,生产环境访问 403 ### 集成改动 - backend/app/main.py: 加 _is_dev_mode() + DEV_MODE=true 时条件挂载 dev_auth 路由 + 启动时大声警告 - backend/app/config.py: Settings 加 dev_mode / dev_default_userid / dev_default_name / dev_default_dept 字段 ### PowerShell 脚本 - scripts/dev-start.ps1: 5 步验证(检查 Docker / .env / compose / 健康 / dev health),首次 2-5min build,后续秒起 - scripts/dev-stop.ps1: 停止,支持 -v 清数据卷 - scripts/dev-test.ps1: 一键跑 pytest(可选 -Frontend 跑 vitest) ## 阶段 - ✅ Phase 0 基础(本 commit) - ⏳ Phase 1 pytest(任务 #90) - 500 bug 回归测试已就绪 - ⏳ Phase 2 vitest - ⏳ Phase 3 playwright E2E ## 安全保证 - DEV_MODE 三个地方都校验(环境变量/settings/端点内) - 生产环境 /api/dev/* 端点根本不存在(未挂载) - .env.dev 是 dev 占位符,无敏感,可入 git
47 lines
1.7 KiB
Docker
47 lines
1.7 KiB
Docker
# =============================================================================
|
|
# 企微IT智能服务台 — 后端 开发镜像 Dockerfile
|
|
# =============================================================================
|
|
# 与 Dockerfile(prod) 区别:
|
|
# - 不需要 gcc / libpq-dev(用预编译的 psycopg2-binary)
|
|
# - 装 pytest 用于跑测试
|
|
# - 不需要 multi-stage build(开发用,镜像大一点无所谓)
|
|
# - 装 watchfiles 配合 uvicorn --reload
|
|
# =============================================================================
|
|
|
|
FROM python:3.12-slim
|
|
|
|
LABEL maintainer="IT服务台开发团队"
|
|
LABEL description="企微IT智能服务台后端 - 开发模式"
|
|
|
|
# 换 apt 源(公司内网,默认 deb.debian.org 可能不通)
|
|
RUN sed -i "s|deb.debian.org|mirrors.aliyun.com|g" /etc/apt/sources.list.d/debian.sources 2>/dev/null || true; \
|
|
sed -i "s|deb.debian.org|mirrors.aliyun.com|g" /etc/apt/sources.list 2>/dev/null || true
|
|
|
|
# 安装运行时依赖(精简版)
|
|
RUN apt-get update && \
|
|
apt-get install -y --no-install-recommends libpq5 curl && \
|
|
rm -rf /var/lib/apt/lists/*
|
|
|
|
WORKDIR /app
|
|
|
|
# 换 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 && \
|
|
pip install --no-cache-dir \
|
|
-i https://pypi.tuna.tsinghua.edu.cn/simple/ \
|
|
--trusted-host pypi.tuna.tsinghua.edu.cn \
|
|
pytest pytest-asyncio httpx watchfiles
|
|
|
|
# 复制项目代码(在 dev 模式下用 volume mount 覆盖)
|
|
COPY . .
|
|
|
|
EXPOSE 8000
|
|
|
|
# 默认命令(在 docker-compose.dev.yml 里覆盖)
|
|
CMD ["uvicorn", "app.main:app", "--host", "0.0.0.0", "--port", "8000", "--reload"]
|