# Build stage FROM node:22-alpine AS builder WORKDIR /app # Install build dependencies for sharp (libvips) RUN apk add --no-cache python3 make g++ vips-dev # Copy package files and install dependencies COPY package*.json ./ RUN npm ci # Copy source and build COPY . . RUN npm run build # Production stage — nginx serving static files FROM nginx:alpine # Copy built site COPY --from=builder /app/public /usr/share/nginx/html # Copy ads.txt if present at root COPY --from=builder /app/public/ads.txt /usr/share/nginx/html/ads.txt # Custom nginx config for SPA/history routing with image format support RUN echo 'server { \ listen 80; \ server_name localhost; \ root /usr/share/nginx/html; \ index index.html; \ location / { \ try_files $uri $uri/ /index.html; \ } \ location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg|woff|woff2|ttf|eot|webp|avif)$ { \ expires 1y; \ add_header Cache-Control "public, immutable"; \ } \ }' > /etc/nginx/conf.d/default.conf EXPOSE 80