Files
nobswebdev 32cd1bdb9e Precompress ExifTool WASM with Brotli and serve via nginx brotli_static.
Tor first loads drop from ~25 MB raw to ~5 MB on the wire; prod build writes .wasm.br sidecars and Alpine nginx serves them under /assets with long-lived cache.
2026-10-30 23:32:16 +01:00

50 lines
1.4 KiB
Docker

FROM node:22.23.4-alpine AS frontend-builder
WORKDIR /frontend
COPY frontend/package*.json .
COPY frontend/patches ./patches
RUN npm ci
COPY frontend/ .
ARG VITE_API_BASE_URL
ARG VITE_CLEARNET_SCHEME
ARG VITE_CLEARNET_DOMAIN
ARG VITE_ONION_HOSTNAME
ARG VITE_ALTCHA_ENABLED
ARG VITE_ALTCHA_MAX_NUMBER
ARG VITE_UPLOAD_MAX_QUEUE_SIZE
ARG VITE_VALIDATION_UPLOAD_MAX_VIEWS_MAX
ARG VITE_VALIDATION_UPLOAD_MAX_IMAGE_BYTES
ENV VITE_API_BASE_URL=$VITE_API_BASE_URL \
VITE_CLEARNET_SCHEME=$VITE_CLEARNET_SCHEME \
VITE_CLEARNET_DOMAIN=$VITE_CLEARNET_DOMAIN \
VITE_ONION_HOSTNAME=$VITE_ONION_HOSTNAME \
VITE_ALTCHA_ENABLED=$VITE_ALTCHA_ENABLED \
VITE_ALTCHA_MAX_NUMBER=$VITE_ALTCHA_MAX_NUMBER \
VITE_UPLOAD_MAX_QUEUE_SIZE=$VITE_UPLOAD_MAX_QUEUE_SIZE \
VITE_VALIDATION_UPLOAD_MAX_VIEWS_MAX=$VITE_VALIDATION_UPLOAD_MAX_VIEWS_MAX \
VITE_VALIDATION_UPLOAD_MAX_IMAGE_BYTES=$VITE_VALIDATION_UPLOAD_MAX_IMAGE_BYTES
RUN npm run build && node scripts/optimize-dist-wasm.mjs
FROM alpine:3.23
RUN apk add --no-cache \
nginx=1.28.3-r7 \
nginx-mod-http-brotli=1.28.3-r7 \
gettext
COPY --from=frontend-builder /frontend/dist /usr/share/nginx/html
COPY nginx/conf.d/ /etc/nginx/templates/conf.d/
COPY nginx/snippets/private-image-locations.conf.template /etc/nginx/templates/snippets/
COPY nginx/docker-entrypoint.sh /docker-entrypoint.sh
RUN chmod +x /docker-entrypoint.sh
ENTRYPOINT ["/docker-entrypoint.sh"]