mirrors / Dockerfile
hoekashinov's picture
Upload 1011 files
4f625a6 verified
Raw
History Blame Contribute Delete
1.47 kB
# Debian-based image for pre-built wheels (temporalio, psutil, etc.)
FROM ghcr.io/astral-sh/uv:python3.11-bookworm-slim
WORKDIR /app
# Install system dependencies
RUN apt-get update && apt-get install -y --no-install-recommends \
curl \
git \
gcc \
libc6-dev \
libffi-dev \
libfreetype6-dev \
python3-dev \
# WeasyPrint PDF generation
libpango-1.0-0 \
libpangocairo-1.0-0 \
libcairo2 \
libgdk-pixbuf2.0-0 \
fontconfig \
fonts-dejavu \
fonts-liberation \
&& rm -rf /var/lib/apt/lists/*
# Install Python dependencies (before copying app code for better caching)
COPY pyproject.toml uv.lock ./
ENV UV_LINK_MODE=copy
RUN --mount=type=cache,id=uv-bookworm,target=/root/.cache/uv uv sync --locked --quiet
# Copy application code
COPY . .
# Runtime configuration
ENV ENV_MODE=production \
PYTHONPATH=/app
EXPOSE 7860
# Gunicorn with Uvicorn workers
# WORKERS, THREADS, WORKER_CONNECTIONS set by runtime environment (ECS/docker-compose)
CMD ["sh", "-c", "uv run gunicorn api:app \
--workers ${WORKERS:-4} \
--threads ${THREADS:-2} \
--worker-class uvicorn.workers.UvicornWorker \
--worker-connections ${WORKER_CONNECTIONS:-1000} \
--worker-tmp-dir /dev/shm \
--bind 0.0.0.0:7860 \
--timeout 1800 \
--graceful-timeout 600 \
--keep-alive 1800 \
--forwarded-allow-ips '*' \
--preload \
--log-level info \
--access-logfile - \
--error-logfile -"]