# Dockerfile for Slack URL Summarizer Bot - Hugging Face Spaces # Hugging Face Spaces requires port 7860 # --- Stage 1: Builder --- FROM python:3.12-slim AS builder WORKDIR /app # Install uv package manager RUN pip install uv # Create virtual environment RUN uv venv /opt/venv # Copy dependency files COPY pyproject.toml uv.lock requirements.txt ./ # Install dependencies RUN . /opt/venv/bin/activate && uv pip install -r requirements.txt --no-cache # --- Stage 2: Final Image --- FROM python:3.12-slim # Install curl for healthcheck RUN apt-get update && apt-get install -y --no-install-recommends curl && rm -rf /var/lib/apt/lists/* # Create non-privileged user RUN useradd --create-home --shell /bin/bash appuser WORKDIR /home/appuser/app # Copy virtual environment from builder COPY --from=builder --chown=appuser:appuser /opt/venv /opt/venv # Copy application code COPY --chown=appuser:appuser main.py . # Switch to non-privileged user USER appuser # Set environment variables # Hugging Face Spaces requires port 7860 ENV PATH="/opt/venv/bin:$PATH" ENV PYTHONUNBUFFERED=1 ENV PORT=7860 # Expose Hugging Face Spaces required port EXPOSE 7860 # --- Runtime Configuration --- # Required environment variables (set in HF Space Secrets): # - SLACK_BOT_TOKEN # - SLACK_SIGNING_SECRET # - AZURE_OPENAI_ENDPOINT # - AZURE_OPENAI_API_KEY # Healthcheck HEALTHCHECK --interval=30s --timeout=10s --start-period=5s --retries=3 \ CMD curl -f http://localhost:7860/health || exit 1 # Run the application on port 7860 CMD ["uvicorn", "main:api", "--host", "0.0.0.0", "--port", "7860"]