# syntax=docker/dockerfile:1 # --- Stage 1: build --- FROM node:20-alpine AS build WORKDIR /app COPY package.json package-lock.json* ./ RUN npm ci || npm install COPY . . RUN npm run build # --- Stage 2: serve --- FROM nginx:alpine COPY --from=build /app/dist /usr/share/nginx/html # The image entrypoint runs envsubst over /etc/nginx/templates/*.template at # startup. Only SPIN_BACKEND_URL is substituted so nginx's own $vars survive. ENV NGINX_ENVSUBST_FILTER=SPIN_BACKEND_URL COPY nginx.conf.template /etc/nginx/templates/default.conf.template EXPOSE 8080