# ── 运行镜像 ── FROM python:3.12-slim ENV TZ=Asia/Shanghai RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone WORKDIR /app # 使用本地 .venv 的 site-packages(已验证包含 gunicorn 26.0.0 / fastapi 0.139.2, # 避免构建时从 pypi 重新下载导致版本漂移或网络失败) COPY .venv/lib/python3.12/site-packages/ /usr/local/lib/python3.12/site-packages/ COPY app/ app/ COPY src/ src/ COPY data/ data/ # 预下载 faster-whisper base 模型(避免启动时慢下载) ENV HF_ENDPOINT=https://hf-mirror.com RUN python3 -c "from faster_whisper import WhisperModel; WhisperModel('base', device='cpu', compute_type='int8')" 2>/dev/null; \ chmod -R u+rwX /root/.cache || true RUN useradd -m -u 1000 appuser && \ chown -R appuser:appuser /app && \ mkdir -p /data/chroma_db && \ chown -R appuser:appuser /data # 预置 DeepFace 情绪识别模型(避开 GitHub 下载限速) RUN mkdir -p /home/appuser/.deepface/weights && \ cp /app/data/deepface-weights/*.h5 /home/appuser/.deepface/weights/ 2>/dev/null || true && \ chown -R appuser:appuser /home/appuser/.deepface USER appuser EXPOSE 9000 CMD ["python3", "-m", "gunicorn", "app.main:app", \ "--worker-class", "uvicorn.workers.UvicornWorker", \ "--bind", "0.0.0.0:9000", \ "--workers", "1", \ "--timeout", "1800", \ "--keep-alive", "10", \ "--access-logfile", "-", \ "--error-logfile", "-"]