# syntax=docker/dockerfile:1 # Aether API - FastAPI + Gunicorn FROM tiangolo/uvicorn-gunicorn-fastapi:python3.11 LABEL maintainer="Scott Idem " # 1. Install OS dependencies FIRST. # These are the slowest to install and change the least. # Doing this before WORKDIR or any COPY ensures maximum caching. RUN apt-get update && \ apt-get install -y --no-install-recommends \ imagemagick ffmpeg curl poppler-utils && \ rm -rf /var/lib/apt/lists/* # 2. Set the working directory WORKDIR /srv/aether_api # 3. Install Python requirements # We only copy requirements.txt first to keep the pip install layer cached # as long as the dependencies themselves don't change. COPY requirements.txt /tmp/requirements.txt RUN pip install --no-cache-dir -r /tmp/requirements.txt # 4. Create a reference of actual installed versions RUN pip freeze > /tmp/aether_fastapi_requirements_current.txt # NOTE: The application source is mounted as a volume in docker-compose.yml # for real-time development. We don't COPY the source here to keep the # image generic and the build near-instant when code changes. # Docker health check — verifies DB + Redis connectivity via the /health route. HEALTHCHECK --interval=30s --timeout=10s --start-period=60s --retries=3 \ CMD curl -f http://localhost/health || exit 1 CMD ["gunicorn", "--conf", "/conf/gunicorn_fastapi_conf.py"]