Dockerfile 1.4 KB

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