diff --git a/Dockerfile b/Dockerfile index b19a4d8..3b72f97 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,25 +1,46 @@ -FROM python:3.11-slim +# Stage 1: build dependencies +FROM python:3.11-slim AS builder WORKDIR /app -# Install system dependencies +# Install build dependencies RUN apt-get update && apt-get install -y \ build-essential \ - curl \ default-libmysqlclient-dev \ pkg-config \ && rm -rf /var/lib/apt/lists/* +# Pre-download wheels to avoid recompiling bcrypt from source +RUN pip install --no-cache-dir --prefix=/install \ + 'bcrypt==4.0.1' \ + 'cffi>=2.0' \ + 'pycparser>=2.0' + # Install Python dependencies COPY requirements.txt . -RUN pip install --no-cache-dir -r requirements.txt +RUN pip install --no-cache-dir --prefix=/install -r requirements.txt + +# Stage 2: slim runtime +FROM python:3.11-slim + +WORKDIR /app + +# Install runtime dependencies only (no build tools) +RUN apt-get update && apt-get install -y \ + default-libmysqlclient-dev \ + curl \ + && rm -rf /var/lib/apt/lists/* + +# Copy installed packages from builder +COPY --from=builder /install /usr/local # Copy application code -COPY . . +COPY app/ ./app/ +COPY requirements.txt ./ + +# Make entrypoint +COPY entrypoint.sh . RUN chmod +x entrypoint.sh -# Expose port EXPOSE 8000 - -# Wait for wizard config, then start uvicorn ENTRYPOINT ["./entrypoint.sh"]