# App frontend — React SPA served via Nginx, proxies /api and /ws to backend FROM node:20-alpine AS frontend-builder WORKDIR /build/frontend COPY frontend/package.json frontend/package-lock.json ./ RUN npm ci COPY frontend/ ./ ARG VITE_APP_HOSTNAME ARG VITE_NETWORK=ukmesh ARG VITE_SITE=ukmesh ARG VITE_OBSERVER_ID= ARG VITE_SITE_DISPLAY_NAME= ARG VITE_SITE_FOOTER_NAME= ARG VITE_SITE_APP_URL= ARG VITE_SITE_HOME_URL= ARG VITE_VIEWSHED_ENABLED=false ENV VITE_APP_HOSTNAME=$VITE_APP_HOSTNAME ENV VITE_NETWORK=$VITE_NETWORK ENV VITE_SITE=$VITE_SITE ENV VITE_OBSERVER_ID=$VITE_OBSERVER_ID ENV VITE_SITE_DISPLAY_NAME=$VITE_SITE_DISPLAY_NAME ENV VITE_SITE_FOOTER_NAME=$VITE_SITE_FOOTER_NAME ENV VITE_SITE_APP_URL=$VITE_SITE_APP_URL ENV VITE_SITE_HOME_URL=$VITE_SITE_HOME_URL ENV VITE_VIEWSHED_ENABLED=$VITE_VIEWSHED_ENABLED RUN npm run build FROM nginx:alpine COPY --from=frontend-builder /build/frontend/dist /usr/share/nginx/html COPY nginx.app.conf /etc/nginx/conf.d/default.conf COPY nginx.security-headers.conf /etc/nginx/snippets/security-headers.conf EXPOSE 80