Check and Windows preview / check (anvil) (push) Successful in 49s
Check and Windows preview / check (crucible) (push) Successful in 48s
Check and Windows preview / check (knurl) (push) Successful in 40s
Check and Windows preview / check (lathe) (push) Successful in 41s
Check and Windows preview / check (patina) (push) Successful in 56s
Check and Windows preview / check (rivet) (push) Successful in 45s
Check and Windows preview / check (temper) (push) Successful in 43s
Check and Windows preview / check (weld) (push) Successful in 1m20s
Check and Windows preview / previews (push) Successful in 1m15s
Check and Windows preview / windows (push) Successful in 2m31s
Astro site for the suite: a home page with the plugin cards, install steps, principles, the metalwork names and the ideas on the bench, one page per plugin, and the Impressum and privacy policy. Plugin names, versions, download links and editor previews come from the catalog, the wrapper manifests and docs/*/assets at build time. Served by unprivileged nginx in Docker behind Traefik on fl.narl.io, the same setup as proton.narl.io: no access logs, CSP 'self', no JavaScript, legal pages filled from the environment at start.
31 lines
1.3 KiB
Docker
31 lines
1.3 KiB
Docker
# syntax=docker/dockerfile:1
|
|
# Build context is the repository root, so the site can read plugins/catalog.json, the
|
|
# plugin versions and the editor screenshots. Dockerfile.dockerignore keeps the context small.
|
|
|
|
FROM node:24-alpine AS build
|
|
WORKDIR /repo/website
|
|
COPY website/package.json website/package-lock.json ./
|
|
RUN npm ci --no-audit --no-fund
|
|
COPY . /repo
|
|
ARG SITE_URL=https://fl.narl.io
|
|
ENV SITE_URL=$SITE_URL
|
|
RUN npm run build
|
|
|
|
FROM nginxinc/nginx-unprivileged:stable-alpine
|
|
COPY website/docker/nginx.conf /etc/nginx/nginx.conf
|
|
COPY website/docker/security-headers.conf /etc/nginx/security-headers.conf
|
|
COPY website/docker/40-legal-notice.sh /docker-entrypoint.d/40-legal-notice.sh
|
|
COPY --from=build /repo/website/dist /usr/share/nginx/html
|
|
COPY --from=build /repo/website/dist/impressum/index.html /opt/legal-templates/impressum/index.html
|
|
COPY --from=build /repo/website/dist/datenschutz/index.html /opt/legal-templates/datenschutz/index.html
|
|
|
|
# Only the two legal pages are rewritten at start-up; everything else stays read-only.
|
|
USER root
|
|
RUN rm -f /etc/nginx/conf.d/default.conf \
|
|
&& chown 101:101 /usr/share/nginx/html/impressum/index.html /usr/share/nginx/html/datenschutz/index.html
|
|
USER 101
|
|
|
|
EXPOSE 8080
|
|
HEALTHCHECK --interval=30s --timeout=3s --start-period=5s \
|
|
CMD wget -q -O /dev/null http://127.0.0.1:8080/healthz || exit 1
|