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.
50 lines
1.4 KiB
Docker
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"]
|