# Stage 1: Build frontend FROM node:20-alpine AS frontend-build WORKDIR /frontend COPY frontend/package*.json ./ RUN npm install COPY frontend/ . RUN npm run build # Stage 2: Python backend with frontend static files FROM python:3.11-slim WORKDIR /app # Install system dependencies RUN apt-get update && apt-get install -y --no-install-recommends \ gcc \ libpq-dev \ && rm -rf /var/lib/apt/lists/* # Install Python dependencies COPY backend/requirements.txt . RUN pip install --no-cache-dir -r requirements.txt # Copy backend application COPY backend/ . # Copy built frontend from Stage 1 COPY --from=frontend-build /frontend/dist /app/static # Create data directories RUN mkdir -p /data/downloads /data/config /data/cookies # Run as non-root user RUN useradd -m -u 1000 appuser && \ chown -R appuser:appuser /app /data USER appuser EXPOSE 8080 CMD ["hypercorn", "app.main:app", "--bind", "0.0.0.0:8080"]