Files
ukmesh/Dockerfile.app
T

43 lines
1.7 KiB
Docker

# App frontend — React SPA served via Nginx, proxies /api and /ws to backend
FROM node:26-alpine@sha256:aadf416b2cdce311a8811ba3f0608a61b77dbf997500e2eafe781b51f6a0b019 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_BUILD_TARGET=app
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_RF_COVERAGE_ENABLED=false
ENV VITE_APP_HOSTNAME=$VITE_APP_HOSTNAME
ENV VITE_BUILD_TARGET=$VITE_BUILD_TARGET
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_RF_COVERAGE_ENABLED=$VITE_RF_COVERAGE_ENABLED
RUN npm run build
FROM nginx:alpine@sha256:4a73073bd557c65b759505da037898b61f1be6cbcc3c2c3aeac22d2a470c1752
ARG SOURCE_REVISION=unknown
LABEL org.opencontainers.image.revision="${SOURCE_REVISION}" \
org.opencontainers.image.source="https://github.com/gadgethd/ukmesh"
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
# .mjs (ES module workers, e.g. maplibre-gl) must be served as JS, not the
# nginx default (application/octet-stream) — add the mapping inside mime.types.
RUN sed -i 's/^}$/ application\/javascript mjs;\n}/' /etc/nginx/mime.types
RUN chown -R nginx:nginx /var/cache/nginx /etc/nginx/conf.d \
&& chown nginx:nginx /run
USER 101:101
EXPOSE 8080