feat: F5.6b server F as an image: the editor from F itself, one stack per environment

F hands out the editor's page and bundle (editor/ beside main.mjs, or
FILIUS_EDITOR_DIR): GET and HEAD only, one wall against leaving the folder,
F's own routes first, assets/ cached a year, the rest asked for again; the
build lays .br and .gz beside the files and F sends the better one the
browser takes (bundle 695 KB to 212 KB).

deploy/Dockerfile: two stages, Node 24, no node_modules, not root.
deploy/docker-compose.yml with an env file per environment: the file sets
the stack's name, volume, image tag and port (test 8081, production 8080).
Measured with both stacks side by side behind nginx and Chromium.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
2026-10-04 17:43:51 +00:00
co-authored by Claude Opus 5.5
parent 709146b58a
commit 087721cba3
19 changed files with 714 additions and 10 deletions
+19 -1
View File
@@ -31,7 +31,8 @@ die Herkunft je Paket. Lizenz dieses Repos: **GPL-3.0** (`LICENSE`).
| `packages/protocol` | die eine Nachrichtenliste zwischen Editor und Simulationsraum (`/sim`) |
| `packages/sim` | Simulationsraum (für Server F und den Web Worker) und `LocalSimHost` |
| `packages/editor` | Oberfläche im Iframe des Dashboards (React, Vite), auf einem Projekt von F (`?project=<uuid>`) oder mit einem Raum in der eigenen Seite (Entwicklung): Fläche, Palette, Werkzeuge des Entwurfs, Geräte-Blatt, Aktionsmodus (Desktops, Anwendungen, Datenaustausch), Dokumentationsmodus (Text, Gliederungsfläche, Bild exportieren, Bericht als PDF); `npm run dev -w @mdg-filius/editor` öffnet die Entwicklungsseite |
| `packages/server` | Filius-Dienst auf Server F: gemeinsame Dokumente über Hocuspocus (`/sync`), gespeichert in Postgres (Stand und Aktualisierungen, verdichtet), Hausmeister; Anmeldung mit der Eintrittskarte des Dashboards (`/__auth`, Keks, Lese- und Schreibstufe); Dienstweg des Dashboards (`/svc/*`: Projekte anlegen, löschen, einfrieren, Zugänge widerrufen); Simulationsräume auf `/sim` in `worker_threads`, einer je Projekt für alle; `/healthz`; `npm run build -w @mdg-filius/server` bündelt ihn nach `dist/main.mjs` und den Faden der Räume nach `dist/simWorker.mjs` |
| `packages/server` | Filius-Dienst auf Server F: gemeinsame Dokumente über Hocuspocus (`/sync`), gespeichert in Postgres (Stand und Aktualisierungen, verdichtet), Hausmeister; Anmeldung mit der Eintrittskarte des Dashboards (`/__auth`, Keks, Lese- und Schreibstufe); Dienstweg des Dashboards (`/svc/*`: Projekte anlegen, löschen, einfrieren, Zugänge widerrufen); Simulationsräume auf `/sim` in `worker_threads`, einer je Projekt für alle; `/healthz`; liefert Seite und Bundle des Editors aus (`editor/` neben `main.mjs`, vorab gepackt); `npm run build -w @mdg-filius/server` bündelt ihn nach `dist/main.mjs` und den Faden der Räume nach `dist/simWorker.mjs` |
| `deploy` | Image (`Dockerfile`), ein Stack je Umgebung (`docker-compose.yml`, `*.env.example`), Eintrag für den externen OpenResty (`proxy.conf`) |
Plan und Entscheidungen: `knowledge/plans/FILIUS_WEB_PLAN.md` im Dashboard.
@@ -61,9 +62,26 @@ Zwei Docker-Stacks auf Server F, je mit eigener Datenbank, eigenem
| `test-filius.hub.mdg-hamburg.de` | 8081 | `test-dashboard` |
| `filius.hub.mdg-hamburg.de` | 8080 | `dashboard` |
Im Klon auf F, je Umgebung einmal:
```bash
cp deploy/test.env.example deploy/test.env # leere Werte füllen
docker compose -f deploy/docker-compose.yml --env-file deploy/test.env up -d --build
```
(für die Produktion dasselbe mit `production`). Die Umgebungsdatei bestimmt
Stack-Namen, Volume, Image-Tag und Port; die beiden Stacks teilen nichts.
Braucht Docker Compose v2. Gesichert werden muss nur das Volume
`<stack>_db` (Befehl in `deploy/docker-compose.yml`).
`deploy/proxy.conf` ist der Eintrag für den externen OpenResty (in dessen
`conf.d`); vorher die Adresse von F für `filius-lxc.invalid` einsetzen.
`FILIUS_ORIGINS` ist jeweils der eigene Name mit `https://`.
Das Image liefert auch den Editor aus: F nimmt den Ordner `editor/` neben
`main.mjs` (anderswo `FILIUS_EDITOR_DIR`). Es läuft auf Node 24, die
Entwicklung auf Node 20; vor einem Update einmal mit
`docker compose … up --build` auf `test-filius` prüfen.
Code, Kommentare und Testnamen sind englisch; sichtbare Texte stehen hinter
i18n-Schlüsseln (Deutsch/Englisch).