FROM python:3.12-slim # Metadata labels LABEL maintainer="TFM aInventory Team" LABEL version="2.0.0" LABEL description="TFM aInventory Backend API Service" # Install system dependencies in single RUN command to reduce layers RUN apt-get update && apt-get install -y \ build-essential \ libldap2-dev \ libsasl2-dev \ gosu \ curl \ && rm -rf /var/lib/apt/lists/* \ && apt-get clean WORKDIR /app # Copy requirements and install COPY backend/requirements.txt . RUN pip install --no-cache-dir -r requirements.txt # Create non-root user RUN adduser --system --group appuser # Copy application files COPY backend ./backend # Copy initialization scripts (shared with start_server.sh) COPY scripts ./scripts # We define the data dir explicitly for Docker ENV DATA_DIR="/app/data" ENV LOGS_DIR="/app/logs" # Pre-create directories and ensure they are writable RUN mkdir -p /app/data /app/logs && chown -R appuser:appuser /app # Make initialization scripts executable RUN chmod +x /app/scripts/init_data.sh /app/backend/entrypoint.sh EXPOSE 8000 # Health check — verify backend API is responsive HEALTHCHECK --interval=30s --timeout=10s --start-period=40s --retries=3 \ CMD curl -f http://localhost:8000/health || exit 1 # Entrypoint runs init_data.sh first, then starts uvicorn ENTRYPOINT ["/app/backend/entrypoint.sh"]