# ============================================================ # 青叶 —— 生产环境后端镜像 # ------------------------------------------------------------ # 与开发用 Dockerfile 的区别: # 1. 不切换国内镜像源(使用 Debian / PyPI 官方源,适合全球部署) # 2. 运行命令固定为「单进程 uvicorn + proxy-headers」,不带 --reload # 3. 不挂载源码(运行镜像内 COPY 进来的代码) # # ⚠️ 关键约束:必须单进程!WebSocket 连接管理器(ConnectionManager)是 # 进程内存单例。若改用 --workers N 或 gunicorn 多 worker,连接会被拆分到 # 不同进程,导致跨用户实时消息(聊天、撤回、好友请求等)无法投递。 # 水平扩展前需先把 manager 迁移到 Redis pub/sub。 # ============================================================ FROM python:3.12-slim WORKDIR /app # 安装系统依赖(使用官方源,便于全球部署) RUN apt-get update && apt-get install -y --no-install-recommends \ gcc \ libpq-dev \ && rm -rf /var/lib/apt/lists/* # 安装 Python 依赖 COPY requirements.txt . RUN pip install --no-cache-dir -r requirements.txt # 复制项目代码(backend/.dockerignore 已排除 __pycache__/.env/uploads 等) COPY . . # 创建上传目录 RUN mkdir -p /app/uploads EXPOSE 8000 # 生产运行:单 worker + proxy-headers(信任 Nginx 转发的 X-Forwarded-*) CMD ["uvicorn", "app.main:app", "--host", "0.0.0.0", "--port", "8000", "--proxy-headers"]