| FROM python:3.10-slim-bookworm | |
| # Set environment variables | |
| ENV PYTHONDONTWRITEBYTECODE=1 | |
| ENV PYTHONUNBUFFERED=1 | |
| # Install system dependencies: | |
| # - libpango/cairo/gdk-pixbuf/ffi + fonts-noto-cjk: WeasyPrint (optional PDF engine) | |
| # - curl: container-internal health check probe | |
| RUN apt-get update && apt-get install -y --no-install-recommends \ | |
| curl \ | |
| libpango-1.0-0 \ | |
| libpangocairo-1.0-0 \ | |
| libcairo2 \ | |
| libgdk-pixbuf-2.0-0 \ | |
| libffi-dev \ | |
| fonts-noto-cjk \ | |
| fonts-noto-cjk-extra \ | |
| fonts-liberation \ | |
| && apt-get clean \ | |
| && rm -rf /var/lib/apt/lists/* | |
| # Set working directory | |
| WORKDIR /app | |
| # Copy requirements and install Python dependencies | |
| COPY requirements.txt . | |
| RUN pip install --no-cache-dir --upgrade pip && \ | |
| pip install --no-cache-dir -r requirements.txt | |
| # Copy application code | |
| COPY . . | |
| # Expose Streamlit port | |
| EXPOSE 7860 | |
| # Health check (uses Streamlit's built-in health endpoint) | |
| HEALTHCHECK --interval=30s --timeout=10s --start-period=15s --retries=3 \ | |
| CMD curl -f http://localhost:7860/_stcore/health || exit 1 | |
| # Run application (Streamlit, single container, single port 7860) | |
| # 关闭 XSRF / CORS 防护:HF Spaces 的反向代理 / iframe 环境下,Streamlit 默认的 | |
| # XSRF 防护会拦截文件上传端点(/_stcore/upload_file)导致 403。显式传参与 | |
| # .streamlit/config.toml 双保险,确保上传放行。 | |
| CMD ["streamlit", "run", "core/app.py", \ | |
| "--server.port=7860", \ | |
| "--server.address=0.0.0.0", \ | |
| "--server.enableXsrfProtection=false", \ | |
| "--server.enableCORS=false"] | |