From c30631cb7d663814a0e55712800ddce43cb7e75e Mon Sep 17 00:00:00 2001 From: Scott Idem Date: Wed, 11 Mar 2026 17:04:30 -0400 Subject: [PATCH] Optimized by Gemini CLI... I hope. --- Dockerfile | 35 +++++++++++++++++++---------------- 1 file changed, 19 insertions(+), 16 deletions(-) diff --git a/Dockerfile b/Dockerfile index 1bd8b68..9468eb1 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,32 +1,35 @@ # syntax=docker/dockerfile:1 # Aether API - FastAPI + Gunicorn -# Using tiangolo's optimized FastAPI image 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 -# Install OS dependencies for image processing and utilities -RUN apt-get update; \ - apt-get install -y \ - imagemagick ffmpeg curl poppler-utils \ - ; \ - rm -rf /var/lib/apt/lists/*; - -# Install Python requirements -# This file is now located in the project root +# 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 -r /tmp/requirements.txt +RUN pip install --no-cache-dir -r /tmp/requirements.txt -# Create a reference of actual installed versions -RUN pip freeze >> /tmp/aether_fastapi_requirements_current.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. -# Interval/timeout tuned for Gunicorn startup time. HEALTHCHECK --interval=30s --timeout=10s --start-period=60s --retries=3 \ CMD curl -f http://localhost/health || exit 1 -# The application source is mounted as a volume in docker-compose.yml -# for real-time development, but we set the default command here. CMD ["gunicorn", "--conf", "/conf/gunicorn_fastapi_conf.py"]