# Multi-stage Dockerfile for Gateway service (FastAPI) FROM python:3.11-slim as base WORKDIR /app RUN apt-get update && apt-get install -y --no-install-recommends \ curl \ && rm -rf /var/lib/apt/lists/* COPY services/gateway/requirements.txt /app/requirements.txt RUN pip install --no-cache-dir -r requirements.txt COPY shared /app/shared COPY proto /app/proto RUN python -m grpc_tools.protoc \ -I/app/proto \ --python_out=/app/shared \ --grpc_python_out=/app/shared \ /app/proto/metrics.proto \ && sed -i 's/^import metrics_pb2/from shared import metrics_pb2/' /app/shared/metrics_pb2_grpc.py COPY services/gateway /app/services/gateway COPY services/aggregator/__init__.py /app/services/aggregator/__init__.py COPY services/aggregator/storage.py /app/services/aggregator/storage.py COPY web /app/web ENV PYTHONPATH=/app ENV PYTHONUNBUFFERED=1 # ============================================================================= FROM base as development RUN pip install --no-cache-dir watchfiles CMD ["uvicorn", "services.gateway.main:app", "--host", "0.0.0.0", "--port", "8000", "--reload"] # ============================================================================= FROM base as production RUN useradd --create-home --shell /bin/bash appuser USER appuser EXPOSE 8000 CMD ["uvicorn", "services.gateway.main:app", "--host", "0.0.0.0", "--port", "8000", "--workers", "2"]