开发者指南 · 14

Docker 部署

14.1 多阶段构建

dockerfile
# Stage 1: frontend-builder
FROM node:20-alpine AS frontend-builder
RUN npm ci && npm run build       # → dist/

# Stage 2: production
FROM python:3.11-slim
RUN pip install -r requirements.txt
RUN npm install express http-proxy-middleware
COPY --from=frontend-builder /build/dist /app/frontend/dist
  • React 源码和 devDependencies 不进入最终镜像
  • Express server.jsdist/ 提供静态文件

14.2 docker-compose

text
Cloudflare (SSL) → Nginx (:80) → Express (:3000) → FastAPI (:8000)
  • Nginx:SSL 终止 + 反向代理(nginx/nginx.conf
  • Express:静态资源 + /api 代理
  • FastAPI:核心后端
  • 用户数据 volume:./data/users:/app/users

14.3 启动脚本(start.sh

  1. 启动 FastAPI(:8000
  2. 等待就绪后启动 Express(:3000
  3. wait -n 监控两个进程

14.4 健康检查

容器内置健康检查(检查 FastAPI /docs 端点),Nginx 在后端就绪后才接受流量。

14.5 .dockerignore

排除 frontend/node_modules/ / frontend/dist/ / venv/ / data/ / .env / .git/