# Stage 1: Build Frontend (SvelteKit) FROM node:20-slim AS frontend-builder WORKDIR /app COPY package.json package-lock.json ./ # Install dependencies RUN npm ci # Copy source COPY . . # Build static files (outputs to build/) RUN npm run build # Stage 2: Backend (Python Flask + GPU Support) # Use official PyTorch image with CUDA 12.1 support FROM pytorch/pytorch:2.2.0-cuda12.1-cudnn8-runtime # Install system dependencies for audio (libsndfile) and ffmpeg # reliable ffmpeg install on debian-based images RUN apt-get update && apt-get install -y \ libsndfile1 \ ffmpeg \ git \ && rm -rf /var/lib/apt/lists/* WORKDIR /app # Copy python requirements # We remove torch/torchaudio from requirements briefly during install to avoid re-installing CPU versions # or we trust pip to see the installed version satisfies it. COPY server/requirements.txt . RUN pip install --no-cache-dir -r requirements.txt # Copy backend code COPY server/ . # Copy built frontend from Stage 1 into the expected relative path # app.py expects '../build', so we copy to /build and structure appropriately # However, simpler is to copy build/ to /app/build and adjust app.py or folder structure. # Let's mirror the structure: /app/server (WORKDIR) and /app/build COPY --from=frontend-builder /app/build /app/build # Set working directory to server where app.py resides WORKDIR /app/server # Environment variables ENV PYTHONUNBUFFERED=1 ENV PORT=5000 # Expose port EXPOSE ${PORT} # Run the application CMD ["python", "app.py"]