# Build stage FROM node:20-alpine AS builder WORKDIR /app # Copy package files COPY package.json package-lock.json* ./ # Install dependencies RUN npm ci # Copy source code COPY . . # Set build-time environment variables ARG DATABASE_URL ARG GOOGLE_CLIENT_ID ARG GOOGLE_CLIENT_SECRET ARG R2_ACCOUNT_ID ARG R2_ACCESS_KEY_ID ARG R2_SECRET_ACCESS_KEY ARG R2_BUCKET_NAME ARG GOOGLE_MAPS_API_KEY ARG VAPID_PUBLIC_KEY ARG VAPID_PRIVATE_KEY ARG VAPID_SUBJECT ENV DATABASE_URL=${DATABASE_URL} ENV GOOGLE_CLIENT_ID=${GOOGLE_CLIENT_ID} ENV GOOGLE_CLIENT_SECRET=${GOOGLE_CLIENT_SECRET} ENV R2_ACCOUNT_ID=${R2_ACCOUNT_ID} ENV R2_ACCESS_KEY_ID=${R2_ACCESS_KEY_ID} ENV R2_SECRET_ACCESS_KEY=${R2_SECRET_ACCESS_KEY} ENV R2_BUCKET_NAME=${R2_BUCKET_NAME} ENV GOOGLE_MAPS_API_KEY=${GOOGLE_MAPS_API_KEY} ENV VAPID_PUBLIC_KEY=${VAPID_PUBLIC_KEY} ENV VAPID_PRIVATE_KEY=${VAPID_PRIVATE_KEY} ENV VAPID_SUBJECT=${VAPID_SUBJECT} # Build the app RUN npm run build # Production stage FROM node:20-alpine WORKDIR /app # Copy package files COPY package.json package-lock.json* ./ # Install production dependencies only RUN npm ci --omit=dev # Copy built app from builder COPY --from=builder /app/build ./build # Expose port EXPOSE 3000 # Set environment variables ENV NODE_ENV=production ENV ORIGIN=http://localhost:3000 # Start the app CMD ["node", "build"]