Files
nvrl 7e1776bb04
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
feat(website): add the fl.narl.io site
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.
2026-11-06 11:30:12 +01:00

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