# Multi-stage Docker build for chocolate tempering machine control system # Build stage FROM python:3.11-slim as builder # Set build arguments ARG BUILD_ENV=production # Install system dependencies RUN apt-get update && apt-get install -y \ build-essential \ gcc \ g++ \ && rm -rf /var/lib/apt/lists/* # Set work directory WORKDIR /app # Copy requirements COPY requirements.txt requirements-dev.txt ./ # Install Python dependencies RUN pip install --no-cache-dir --upgrade pip && \ pip install --no-cache-dir -r requirements.txt # If development build, install dev dependencies RUN if [ "$BUILD_ENV" = "development" ]; then \ pip install --no-cache-dir -r requirements-dev.txt; \ fi # Production stage FROM python:3.11-slim as production # Set environment variables ENV PYTHONPATH=/app/src ENV PYTHONUNBUFFERED=1 ENV PYTHONDONTWRITEBYTECODE=1 # Create non-root user RUN groupadd -r tempering && useradd -r -g tempering tempering # Install runtime dependencies RUN apt-get update && apt-get install -y \ curl \ && rm -rf /var/lib/apt/lists/* # Set work directory WORKDIR /app # Copy Python dependencies from builder stage COPY --from=builder /usr/local/lib/python3.11/site-packages /usr/local/lib/python3.11/site-packages COPY --from=builder /usr/local/bin /usr/local/bin # Copy application code COPY src/ ./src/ COPY alembic.ini ./ COPY alembic/ ./alembic/ # Create necessary directories RUN mkdir -p /app/data /app/logs /app/config /app/backups && \ chown -R tempering:tempering /app # Copy startup script COPY docker/entrypoint.sh ./entrypoint.sh RUN chmod +x ./entrypoint.sh # Health check HEALTHCHECK --interval=30s --timeout=30s --start-period=60s --retries=3 \ CMD curl -f http://localhost:8000/health/live || exit 1 # Switch to non-root user USER tempering # Expose port EXPOSE 8000 # Set entrypoint ENTRYPOINT ["./entrypoint.sh"] # Default command CMD ["web"]