Dockerfile 915 B

1234567891011121314151617181920212223242526272829303132333435
  1. # ── 构建阶段 ──
  2. FROM python:3.11-slim AS builder
  3. WORKDIR /build
  4. COPY pyproject.toml .
  5. RUN pip install --no-cache-dir -e . && \
  6. pip install --no-cache-dir gunicorn
  7. # ── 运行阶段 ──
  8. FROM python:3.11-slim
  9. ENV TZ=Asia/Shanghai
  10. RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
  11. WORKDIR /app
  12. COPY --from=builder /usr/local/lib/python3.11/site-packages/ /usr/local/lib/python3.11/site-packages/
  13. COPY --from=builder /usr/local/bin/ /usr/local/bin/
  14. COPY app/ app/
  15. COPY data/ data/ 2>/dev/null || true
  16. RUN useradd -m -u 1000 appuser && chown -R appuser:appuser /app
  17. USER appuser
  18. EXPOSE 9000
  19. CMD ["gunicorn", "app.main:app", \
  20. "--worker-class", "uvicorn.workers.UvicornWorker", \
  21. "--bind", "0.0.0.0:9000", \
  22. "--workers", "2", \
  23. "--timeout", "60", \
  24. "--keep-alive", "10", \
  25. "--access-logfile", "-", \
  26. "--error-logfile", "-"]