# Stage 1: Build Frontend FROM node:20-alpine as frontend-build WORKDIR /app/frontend COPY frontend/package*.json ./ ENV NODE_OPTIONS="--max-old-space-size=4096" RUN npm install COPY frontend/ ./ RUN mkdir -p /app/backend/static && npm run build # Stage 2: Setup Backend & Runtime FROM python:3.11-slim WORKDIR /app # Install System Dependencies (Minimal) RUN apt-get update && apt-get install -y --no-install-recommends \ curl \ && rm -rf /var/lib/apt/lists/* # Install Poetry RUN curl -sSL https://install.python-poetry.org | python3 - ENV PATH="/root/.local/bin:$PATH" ENV POETRY_VIRTUALENVS_CREATE=false # Copy Backend Requirements COPY backend/pyproject.toml backend/poetry.lock* ./backend/ WORKDIR /app/backend RUN poetry install --no-root --without dev # Copy Backend Code COPY backend/ ./ # Copy Built Frontend from Stage 1 to Backend Static Folder COPY --from=frontend-build /app/backend/static /app/backend/static # Expose Port EXPOSE 8000 # Run Uvicorn CMD ["uvicorn", "app.main:app", "--host", "0.0.0.0", "--port", "8000"]