diff --git a/src/components/domain-admin.tsx b/src/components/domain-admin.tsx
index e10e403..9868d87 100644
--- a/src/components/domain-admin.tsx
+++ b/src/components/domain-admin.tsx
@@ -2,6 +2,8 @@
import { useCallback, useEffect, useState } from "react";
+import { DomainHilfe } from "@/components/domain-hilfe";
+import { HelpButton } from "@/components/help-button";
import { Icon } from "@/components/icons";
import { Modal } from "@/components/modal";
import {
@@ -134,10 +136,14 @@ export function DomainAdmin({ baseUrlHostname }: { baseUrlHostname: string }) {
Eine Domain wirkt erst, wenn dein Reverse Proxy sie auf diese Anwendung
weiterleitet. Die Weiterleitung erkennt sie am{" "}
Host-Header und prüft ihn
- gegen diese Liste — ein unbekannter Hostname endet mit 404.
+ gegen diese Liste — ein unbekannter Hostname endet mit 404. Was dafür
+ einzurichten ist, steht in der Kurzhilfe.
-
+ Eine Domain hier zu registrieren genügt nicht — sie muss den Browser + auch hierher führen. Dazu gehören drei Dinge außerhalb dieser + Anwendung: ein DNS-Eintrag, ein Eintrag im Reverse Proxy und ein + Zertifikat. +
+ ++ Beim Anbieter der Domain einen A-Record (bei IPv6 + zusätzlich AAAA) auf die öffentliche Adresse des + Reverse Proxy setzen. Ein CNAME auf einen bestehenden Namen tut es + auch. +
++ Steht der Name nur im internen DNS oder ist er nur über VPN + erreichbar, funktionieren gedruckte Codes{" "} + auch nur dort. Für Aushänge, Flyer und + Verpackungen muss er öffentlich auflösbar sein. +
+
+ Für die Domain einen eigenen Eintrag anlegen, der auf diese
+ Anwendung zeigt — Ziel ist der Docker-Host auf Port{" "}
+ 3000, oder im selben
+ Docker-Netz der Servicename{" "}
+ app.
+
+ Diese drei Kopfzeilen muss der Proxy mitschicken. Nginx Proxy + Manager, Traefik und Caddy tun das von sich aus; ein blankes nginx + braucht sie im Serverblock: +
+
+ Ohne X-Forwarded-Host{" "}
+ landet jeder Aufruf unter der Standard-Domain, und Kurz-URLs der
+ Zweitdomain werden nicht gefunden.
+
+ HTTPS erledigt der Proxy. Im Nginx Proxy Manager ist das der Reiter{" "} + SSL mit Force SSL; Traefik und Caddy holen das + Zertifikat selbst, sobald der DNS-Eintrag steht. +
++ Ohne gültiges Zertifikat brechen viele Scanner-Apps den Aufruf ohne + Erklärung ab — der Code sieht dann für die Nutzer schlicht kaputt + aus. +
+
+ Über Domain registrieren den Hostnamen eintragen —
+ genau so, wie er im Browser steht, ohne{" "}
+ https:// und ohne Pfad:
+
+ Die Weiterleitung prüft den Hostnamen gegen diese Liste. Ein + unbekannter Name endet mit 404 — über eine gefälschte Kopfzeile + lässt sich also keine fremde Domain ansprechen. +
++ Eine frisch registrierte Domain gehört noch niemandem. Erst über{" "} + Gruppen zuteilen können Mitglieder dieser Gruppe + dort Codes anlegen. Die als Voreinstellung markierte + Domain ist die, die beim Anlegen vorausgewählt ist. +
+Von außerhalb des eigenen Netzes:
++ Kommt eine Antwort dieser Anwendung, stimmen DNS, Proxy und + Zertifikat. Danach einen Code der zugeteilten Gruppe anlegen, die + Domain auswählen und den fertigen Code einmal mit dem Handy + scannen — das ist die einzige Prüfung, die wirklich zählt. +
+BASE_URL damit zu tun hat
+
+ Die Umgebungsvariable{" "}
+ BASE_URL ist die
+ Standard-Adresse: Sie greift bei Aufrufen über eine nicht
+ registrierte Adresse und bestimmt, ob Kurz-URLs mit{" "}
+ http oder{" "}
+ https gebildet werden.
+ Weitere Domains werden hier registriert, nicht dort eingetragen.
+
+ {children}
+
+ );
+}
diff --git a/src/components/icons.tsx b/src/components/icons.tsx
index 7ab0f02..91d02c8 100644
--- a/src/components/icons.tsx
+++ b/src/components/icons.tsx
@@ -238,6 +238,13 @@ const PATHS = {