Files
OPNexus/website/README.md
T
Julian Boldt e788afab2f
Release / verify (push) Canceled after 0s
CI / checks (push) Canceled after 0s
CI / frontend (push) Canceled after 0s
CI / backend (push) Canceled after 0s
Release / test (push) Canceled after 0s
Release / publish (backend) (push) Canceled after 0s
Release / publish (frontend) (push) Canceled after 0s
Release / publish (proxy) (push) Canceled after 0s
Release v1.14.0
Diagnose von der Firewall aus sowie VXLAN und GIF. Gegen die OPNsense-Core-Quellen
geprüft und live auf den Test-Firewalls getestet, siehe Handbuch „Erweiterung 1.14.0“:

- **Host-System › Diagnose:** Ping, Traceroute, Port-Prüfung und DNS-Abfrage, ausgeführt von der
  ausgewählten Firewall. Nur für Admins, strenge Eingabeprüfung, jeder Lauf im Audit-Log,
  Ping-Jobs werden immer wieder aufgeräumt, der Banner der Gegenstelle wird nicht weitergegeben.
  Packet-Capture gibt es bewusst nicht (Mitschnitte enthalten fremde Nutzdaten).
- **Netzwerk › Geräte:** VXLAN und GIF-Tunnel (anlegen, ändern, löschen) über dieselbe abgesicherte
  Engine wie die übrigen Geräte.
- **Fehlerkorrektur:** Auf den Host-System-Seiten war „Übersicht › Hosts“ markiert und der Seitentitel
  falsch, weil `/hostsystem` mit `/hosts` beginnt.
2026-10-09 22:49:10 +02:00

4.4 KiB
Raw Blame History

opnexus.dev – Website

Statische Seite ohne Laufzeit-Abhängigkeiten und ohne externe Requests (keine Web-Fonts, kein CDN, keine Cookies, kein Tracking). Wird 1:1 als Dateibaum ausgeliefert. Mobile first, Hell/Dunkel (System oder Umschalter), Deutsch und Englisch. Das HTML wird von scripts/build_website.mjs aus scripts/website_content.mjs erzeugt und eingecheckt — zum Ausliefern ist kein Build nötig.

Pfad Inhalt
index.html / en/index.html Startseite Deutsch / Englisch
screenshots/ / en/screenshots/ Galerie aller Ansichten (Filter, Lightbox)
impressum.html, datenschutz.html Pflichtseiten (nur Deutsch) — [TODO …]-Felder vor dem Veröffentlichen ausfüllen
assets/ style.css, theme.js (Farbschema vor dem ersten Paint), site.js (Tabs, Lightbox, Vergleichsregler, Kopieren; alles optional), Favicon, og.png
assets/screenshots/{de,en}/ Screenshots als WebP: <seite>-<hell|dunkel>-<desktop|mobile>.webp plus -s.webp (halbe Breite für srcset) und manifest.json (Maße)
latest.json Update-Feed, ausgeliefert als updates.opnexus.dev/latest.json (siehe unten)
_headers Sicherheits- und Cache-Header für Cloudflare Pages
_worker.js Pages-Worker: updates.opnexus.dev liefert nur /latest.json, alles andere leitet auf opnexus.dev um

Inhalte ändern

Texte (Deutsch und Englisch nebeneinander) stehen in scripts/website_content.mjs, Struktur in scripts/build_website.mjs, Gestaltung in assets/style.css:

node scripts/build_website.mjs     # schreibt alle HTML-Seiten und sitemap.xml neu

Beim Ändern von style.css/site.js ASSET_V in build_website.mjs hochzählen (Cache-Busting). Inhaltlich nur Funktionen nennen, die es in der App gibt (Quellen: docs/HANDBUCH.md, CHANGELOG.md).

Screenshots neu erzeugen

Alle Screenshots entstehen mit erfundenen Demo-Daten: das Skript fängt jede /api/**-Anfrage im Browser ab und beantwortet sie lokal; es berührt weder eine echte Firewall noch das Backend noch die Datenbank und lässt keine schreibenden Anfragen durch. Es braucht einen Produktions-Build des aktuellen Frontends (der Docker-Container kann älter sein als der Arbeitsstand):

cd frontend && npx next build && npx next start -p 3101     # eigenes Terminal
OPNEXUS_SHOT_URL=http://localhost:3101 node scripts/generate_website_screenshots.mjs
node scripts/make_og_image.mjs                              # Social-Preview (1200x630)
node scripts/build_website.mjs

ONLY=dashboard,rules LANGS=en THEMES=dark DEVICES=mobile begrenzt den Lauf. Pro Lauf entstehen 19 Ansichten × 2 Sprachen × 2 Farbschemata × Desktop/Mobil. Playwright (Chromium) wird wie bei den anderen scripts/*.mjs über PLAYWRIGHT_MODULE gefunden; WebP wird mit Chromium selbst kodiert (keine Bildbibliothek nötig).

Lokal ansehen

cd website && python3 -m http.server 8080    # http://localhost:8080

Die Seiten verwenden absolute Pfade (/assets/…), sie müssen also an der Wurzel einer Domain liegen — file:// funktioniert nicht.

Ausliefern (Cloudflare Pages)

Ein einziges Pages-Projekt bedient beide Hostnamen; das website/-Verzeichnis ist das fertige Ausgabeverzeichnis (kein Build-Befehl):

  • opnexus.dev → Seiten und assets/
  • updates.opnexus.dev → dieselben Dateien, abgerufen wird nur /latest.json

Erstmalig im Cloudflare-Dashboard: Workers & Pages → Create → Pages → Upload assets, Projektname opnexus, den Ordner website/ hochladen. Danach unter Custom domains opnexus.dev und updates.opnexus.dev hinzufügen (die DNS- Einträge legt Cloudflare selbst an). Spätere Aktualisierungen per CLI (prüft vorher mit check_website.sh, lässt diese README weg):

export CLOUDFLARE_API_TOKEN=…  CLOUDFLARE_ACCOUNT_ID=…      # Token: "Cloudflare Pages: Edit"
scripts/deploy_website.sh

Der Feed wird nur abgerufen, wenn eine Installation UPDATE_CHECK_URL gesetzt hat (Standard: aus). Offizielle URL: https://updates.opnexus.dev/latest.json. Header liegen in _headers (CSP, HSTS, Cache-Zeiten); die Seiten kommen ohne Inline-Skripte/-Styles aus.

Neue Version ankündigen

Erst nach dem Veröffentlichen des Release (Tag gepusht, Images verfügbar):

scripts/make_update_feed.sh v1.14.0     # prüft Version/CHANGELOG, schreibt latest.json

Danach website/ neu ausliefern. Vorabversionen werden vom Skript abgelehnt (die App schlägt sie ohnehin nie vor).