| # ββ Backend: FastAPI + RL Pipeline ββ | |
| FROM python:3.11-slim AS backend | |
| WORKDIR /app | |
| # System deps for numpy/scipy/torch | |
| RUN apt-get update && apt-get install -y --no-install-recommends \ | |
| build-essential gfortran libopenblas-dev \ | |
| && rm -rf /var/lib/apt/lists/* | |
| # Install Python dependencies | |
| COPY pyproject.toml ./ | |
| # Install PyTorch CPU-only first (from the dedicated index) | |
| RUN pip install --no-cache-dir \ | |
| torch --index-url https://download.pytorch.org/whl/cpu | |
| # Install everything else from default PyPI | |
| RUN pip install --no-cache-dir \ | |
| uvicorn fastapi \ | |
| openenv-core pydantic openai \ | |
| stable-baselines3 \ | |
| streamlit plotly \ | |
| pandas numpy matplotlib \ | |
| cvxpy ecos \ | |
| pyarrow fastexcel polars openpyxl | |
| # Copy application code | |
| COPY server/ ./server/ | |
| COPY models.py openenv.yaml baseline.py main.py battery.py config.json ./ | |
| COPY rl_env.py rl_evaluator.py ./ | |
| COPY rl/ ./rl/ | |
| COPY sim/ ./sim/ | |
| COPY src/ ./src/ | |
| COPY twin/ ./twin/ | |
| COPY data/ ./data/ | |
| COPY models/ ./models/ | |
| COPY dashboards/ ./dashboards/ | |
| # Create dirs that the app expects | |
| RUN mkdir -p static plots | |
| EXPOSE 8000 | |
| ENV ENABLE_WEB_INTERFACE=true | |
| CMD ["uvicorn", "server.app:app", "--host", "0.0.0.0", "--port", "8000"] | |