# Production stage for building the app FROM node:current-bullseye-slim as prod ARG VITE_AUTH0_DOMAIN ARG VITE_AUTH0_CLIENT_ID ARG VITE_JWT_AUDIENCE ARG VITE_JWT_ISSUER ENV VITE_AUTH0_DOMAIN=$VITE_AUTH0_DOMAIN \ VITE_AUTH0_CLIENT_ID=$VITE_AUTH0_CLIENT_ID \ VITE_JWT_AUDIENCE=$VITE_JWT_AUDIENCE \ VITE_JWT_ISSUER=$VITE_JWT_ISSUER WORKDIR /app COPY package.json package-lock.json ./ RUN npm install # Set environment variables for production RUN echo "VITE_AUTH0_DOMAIN=$VITE_AUTH0_DOMAIN" > .env.production.local && \ echo "VITE_AUTH0_CLIENT_ID=$VITE_AUTH0_CLIENT_ID" >> .env.production.local && \ echo "VITE_JWT_AUDIENCE=$VITE_JWT_AUDIENCE" >> .env.production.local && \ echo "VITE_JWT_ISSUER=$VITE_JWT_ISSUER" >> .env.production.local COPY . . RUN npm run build # Nginx stage for serving the content FROM nginx:stable-alpine as nginx-server WORKDIR /usr/share/nginx/html # Remove default nginx static assets RUN rm -rf ./* # Create cache directories for nginx and adjust permissions RUN mkdir -p /var/cache/nginx/client_temp /var/cache/nginx/proxy_temp /var/cache/nginx/fastcgi_temp /var/cache/nginx/uwsgi_temp /var/cache/nginx/scgi_temp && \ chmod -R 755 /var/cache/nginx/ # Copy static assets from builder stage COPY --from=prod /app/dist . # Copy nginx configuration COPY nginx.conf /etc/nginx/nginx.conf # Ensure we use a modified default.conf that suits our needs COPY nginx.conf /etc/nginx/conf.d/default.conf # Expose the port nginx is reachable on EXPOSE 7860 # Use the "exec" form of CMD so Nginx shuts down gracefully on SIGTERM (i.e., `docker stop`) CMD ["nginx", "-g", "daemon off;"]