# Stage 1: Build Next.js frontend FROM node:20-alpine AS frontend-builder WORKDIR /app # Install dependencies COPY package.json package-lock.json* ./ RUN npm ci # Copy source and build COPY . . RUN npm run build # Stage 2: Build Python backend FROM python:3.11-slim AS backend-builder WORKDIR /backend # Install dependencies COPY backend/requirements.txt ./ RUN pip install --no-cache-dir -r requirements.txt # Copy backend source COPY backend/ ./ # Stage 3: Production image with supervisor FROM python:3.11-slim AS runner WORKDIR /app # Install Node.js and supervisor RUN apt-get update && apt-get install -y \ curl \ supervisor \ && curl -fsSL https://deb.nodesource.com/setup_20.x | bash - \ && apt-get install -y nodejs \ && apt-get clean \ && rm -rf /var/lib/apt/lists/* # Create non-root user RUN groupadd --system --gid 1001 appgroup \ && useradd --system --uid 1001 --gid appgroup appuser # Copy Next.js standalone build COPY --from=frontend-builder /app/public ./public COPY --from=frontend-builder /app/.next/standalone ./ COPY --from=frontend-builder /app/.next/static ./.next/static # Copy Python backend COPY --from=backend-builder /usr/local/lib/python3.11/site-packages /usr/local/lib/python3.11/site-packages COPY --from=backend-builder /backend ./backend # Copy data directory for prompts COPY --from=frontend-builder /app/data ./data # Create supervisor config RUN mkdir -p /var/log/supervisor COPY <