You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

98 lines
4.1 KiB
Docker

# ─── Stage 1: Build ─────────────────────────────────────────────────────────
FROM node:22-alpine AS builder
WORKDIR /app
COPY package.json package-lock.json ./
# --legacy-peer-deps: jspdf-autotable@3.8.4 declares a peer dep on jspdf@^2,
# but the project pins jspdf@^4.2.1 directly and already runs against it
# locally (jspdf-autotable's v3 API still works against jsPDF v4 in
# practice). Without this flag, npm ci hard-fails on the peer conflict.
RUN npm ci --ignore-scripts --legacy-peer-deps
COPY . .
# Vite injects env values during build time. Jenkins can override any of these
# with docker build --build-arg VITE_...=...
ARG VITE_AUTH_APP_URL=/auth
ARG VITE_EFFICIENCY_APP_URL=/efficiency
ARG VITE_OH_APP_URL=/optimumoh
ARG VITE_PFI_APP_URL=/pfi/api/v1
ARG VITE_API_V1_LIVE=/pfi/api/v1
ARG VITE_LCCA_APP_URL=/lcca
ARG VITE_RELIABILITY_APP_URL=/reliability
ARG VITE_RISK_MATRIX_APP_URL=/risk-matrix/api
ARG VITE_EQUIPMENT_IMAGE_URL=/pfi/uploads
ARG VITE_API_MONITORING_URL=/monitoring
ARG VITE_RBD_APP_URL=/rbd
ARG VITE_IRCFA_APP_URL=/ircfa
ARG VITE_AHM_APP_URL=/ahm/api/v1
ARG VITE_OPS_DOCK_APP_URL=/ops-dock/api/v1
ARG VITE_AUTH_URL=
ARG VITE_AUTH_SECRET=
ARG VITE_ENABLE_SECURE_EXPORT=false
ARG VITE_ALLOW_ACCESS_EFFICIENCY=true
ARG VITE_ALLOW_ACCESS_PFI=true
ARG VITE_ALLOW_ACCESS_RELIABILITY=true
ARG VITE_ALLOW_ACCESS_RISK_MATRIX=true
ARG VITE_ALLOW_ACCESS_LCCA=true
ARG VITE_ALLOW_ACCESS_RBD=true
ARG VITE_ALLOW_ACCESS_OH=true
ARG VITE_ALLOW_ACCESS_IRCFA=true
ARG VITE_ALLOW_ACCESS_AHM=true
ARG VITE_ENVIRONMENT=production
ENV VITE_AUTH_APP_URL=$VITE_AUTH_APP_URL \
VITE_EFFICIENCY_APP_URL=$VITE_EFFICIENCY_APP_URL \
VITE_OH_APP_URL=$VITE_OH_APP_URL \
VITE_PFI_APP_URL=$VITE_PFI_APP_URL \
VITE_API_V1_LIVE=$VITE_API_V1_LIVE \
VITE_LCCA_APP_URL=$VITE_LCCA_APP_URL \
VITE_RELIABILITY_APP_URL=$VITE_RELIABILITY_APP_URL \
VITE_RISK_MATRIX_APP_URL=$VITE_RISK_MATRIX_APP_URL \
VITE_EQUIPMENT_IMAGE_URL=$VITE_EQUIPMENT_IMAGE_URL \
VITE_API_MONITORING_URL=$VITE_API_MONITORING_URL \
VITE_RBD_APP_URL=$VITE_RBD_APP_URL \
VITE_IRCFA_APP_URL=$VITE_IRCFA_APP_URL \
VITE_AHM_APP_URL=$VITE_AHM_APP_URL \
VITE_OPS_DOCK_APP_URL=$VITE_OPS_DOCK_APP_URL \
VITE_AUTH_URL=$VITE_AUTH_URL \
VITE_AUTH_SECRET=$VITE_AUTH_SECRET \
VITE_ENABLE_SECURE_EXPORT=$VITE_ENABLE_SECURE_EXPORT \
VITE_ALLOW_ACCESS_EFFICIENCY=$VITE_ALLOW_ACCESS_EFFICIENCY \
VITE_ALLOW_ACCESS_PFI=$VITE_ALLOW_ACCESS_PFI \
VITE_ALLOW_ACCESS_RELIABILITY=$VITE_ALLOW_ACCESS_RELIABILITY \
VITE_ALLOW_ACCESS_RISK_MATRIX=$VITE_ALLOW_ACCESS_RISK_MATRIX \
VITE_ALLOW_ACCESS_LCCA=$VITE_ALLOW_ACCESS_LCCA \
VITE_ALLOW_ACCESS_RBD=$VITE_ALLOW_ACCESS_RBD \
VITE_ALLOW_ACCESS_OH=$VITE_ALLOW_ACCESS_OH \
VITE_ALLOW_ACCESS_IRCFA=$VITE_ALLOW_ACCESS_IRCFA \
VITE_ALLOW_ACCESS_AHM=$VITE_ALLOW_ACCESS_AHM \
VITE_ENVIRONMENT=$VITE_ENVIRONMENT
# Build the static Vite bundle. Keep this at vite build so deployment is not
# blocked by unrelated TypeScript debt during the migration.
RUN npx vite build
# ─── Stage 2: Serve ─────────────────────────────────────────────────────────
FROM nginx:stable-alpine AS runtime
RUN apk add --no-cache gettext
COPY nginx.conf /etc/nginx/templates/default.conf.template
COPY --from=builder /app/dist /usr/share/nginx/html
# Runtime (not build-time) — where nginx proxies each API prefix to. These
# are read by envsubst at container start, so they can be overridden per
# deployment (e.g. via docker-compose environment:) without rebuilding the
# image. BACKEND_URL_IRCFA is separate because IRCFA lives on a different
# host than the rest of the backend routes.
ENV BACKEND_URL=http://192.168.1.82:8000
ENV BACKEND_URL_IRCFA=http://192.168.1.119:8000
EXPOSE 80
CMD ["sh", "-c", \
"envsubst '${BACKEND_URL} ${BACKEND_URL_IRCFA}' < /etc/nginx/templates/default.conf.template \
> /etc/nginx/conf.d/default.conf && nginx -g 'daemon off;'"]