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
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;'"]
|