# VoiceForge Backend Dockerfile # Multi-stage build for optimized production image # Stage 1: Builder FROM python:3.11-slim as builder WORKDIR /app # Install build dependencies RUN apt-get update && apt-get install -y \ build-essential \ && rm -rf /var/lib/apt/lists/* # Install Python dependencies COPY requirements.txt . RUN pip wheel --no-cache-dir --no-deps --wheel-dir /app/wheels -r requirements.txt # Stage 2: Production FROM python:3.11-slim as production WORKDIR /app # Install runtime dependencies RUN apt-get update && apt-get install -y \ ffmpeg \ libsndfile1 \ && rm -rf /var/lib/apt/lists/* # Copy wheels from builder COPY --from=builder /app/wheels /wheels RUN pip install --no-cache /wheels/* # Copy application code COPY app/ ./app/ # Create upload directory RUN mkdir -p /app/uploads && chmod 755 /app/uploads # Create non-root user RUN groupadd -r voiceforge && useradd -r -g voiceforge voiceforge RUN chown -R voiceforge:voiceforge /app USER voiceforge # Expose port EXPOSE 8000 # Health check HEALTHCHECK --interval=30s --timeout=10s --start-period=5s --retries=3 \ CMD python -c "import httpx; httpx.get('http://localhost:8000/health')" || exit 1 # Run the application CMD ["uvicorn", "app.main:app", "--host", "0.0.0.0", "--port", "8000"]