| FROM python:3.10-slim | |
| WORKDIR /app | |
| # System deps: curl for healthchecks, build-essential for any compiled wheels | |
| RUN apt-get update && apt-get install -y \ | |
| build-essential \ | |
| curl \ | |
| && rm -rf /var/lib/apt/lists/* | |
| # Install Python deps | |
| COPY requirements-api.txt requirements-api.txt | |
| RUN pip install --no-cache-dir --upgrade pip \ | |
| && pip install --no-cache-dir -r requirements-api.txt | |
| # Make local packages importable as top-level modules (api/, models/, utils/, etc.) | |
| ENV PYTHONPATH=/app | |
| # Copy code with directory structure intact (required for `uvicorn api.main:app`) | |
| COPY api/ api/ | |
| COPY utils/ utils/ | |
| COPY analysis/ analysis/ | |
| COPY monitoring/ monitoring/ | |
| COPY models/ models/ | |
| COPY config/ config/ | |
| COPY scripts/ scripts/ | |
| # Note: Model download happens at runtime (in api/main.py startup) to avoid | |
| # build-time complexity with Railway's build arg system. This is fine - first | |
| # request will be slower, but subsequent requests are fast. | |
| # Ensure monitoring output directory exists (so API can write logs in containers) | |
| RUN mkdir -p monitoring/predictions | |
| EXPOSE 8000 | |
| HEALTHCHECK --interval=30s --timeout=10s --start-period=30s --retries=3 \ | |
| CMD curl -f http://localhost:8000/health || exit 1 | |
| CMD ["uvicorn", "api.main:app", "--host", "0.0.0.0", "--port", "8000"] | |