- Phase 6: CDN token lifecycle with 3-strategy URL matching and periodic refresh - Phase 7: SvelteKit 2/Svelte 5 frontend with schedule calendar and hls.js player - Phase 8: Multi-stream layout supporting up to 4 simultaneous HLS streams - Update Dockerfile to multi-stage build (Node.js frontend + Python backend) - Switch deployment to :latest tag with Always pull policy for CI-driven deploys - Update Woodpecker CI to use explicit latest tag
27 lines
586 B
Docker
27 lines
586 B
Docker
## Stage 1: Build frontend
|
|
FROM node:22-slim AS frontend-builder
|
|
|
|
WORKDIR /frontend
|
|
|
|
COPY frontend/package.json frontend/package-lock.json* ./
|
|
RUN npm install
|
|
|
|
COPY frontend/ ./
|
|
RUN npm run build
|
|
|
|
## Stage 2: Python backend + static frontend
|
|
FROM python:3.13-slim-bookworm
|
|
|
|
WORKDIR /app
|
|
|
|
COPY backend/requirements.txt .
|
|
RUN pip install --no-cache-dir -r requirements.txt
|
|
|
|
COPY backend/ ./backend/
|
|
|
|
# Copy built frontend into the image
|
|
COPY --from=frontend-builder /frontend/build ./frontend/build
|
|
|
|
EXPOSE 8000
|
|
|
|
CMD ["uvicorn", "backend.main:app", "--host", "0.0.0.0", "--port", "8000"]
|