## Multi-stage Dockerfile for MenuScene (Vite + Needle) # Dev stage: runs Vite with HTTPS on port 3000 # FROM node:18-alpine AS dev # WORKDIR /app # # Install dependencies first (better layer caching) # COPY package.json package-lock.json ./ # RUN npm ci --no-audit --no-fund # # Copy the rest of the app # COPY . . # # Expose Vite dev server port # EXPOSE 3000 # # Vite needs HTTPS for this project. The config already enables https and strictPort: 3000 # ENV NODE_ENV=development # CMD ["npm", "run", "start"] # Build stage: produce optimized static assets FROM node:18-alpine AS build USER root WORKDIR /app COPY package.json package-lock.json ./ RUN npm ci --no-audit --no-fund COPY . . RUN npm run build:production USER node FROM devgeoanalysis/minideb:bookworm as certgen RUN mkdir /certs && apt-get update -y && apt-get install -y wget && \ wget https://github.com/minio/certgen/releases/download/v1.3.0/certgen_1.3.0_linux_amd64.deb && \ apt-get install -y ./certgen_1.3.0_linux_amd64.deb WORKDIR /certs RUN certgen -host "192.168.1.11" # Production stage: serve static files via nginx FROM nginx:1.25-alpine AS prod RUN mkdir /certs COPY --from=certgen /certs /certs # Copy build output COPY --from=build /app/dist /usr/share/nginx/html COPY nginx.conf /etc/nginx/conf.d/default.conf # Serve on port 8080 (container). Map as needed from host EXPOSE 8080 CMD ["nginx", "-g", "daemon off;"]