diff --git a/README.md b/README.md index b5def5b..afb9c4e 100644 --- a/README.md +++ b/README.md @@ -32,10 +32,31 @@ terminiert TLS (Let's Encrypt) und leitet an den passenden Upstream weiter. Alles hängt unter `*.server.schooltech.ch`. Der Unterschied zwischen den Diensten ist nicht die Domain, sondern **wohin der Upstream zeigt**: -![Architektur-Übersicht](doc/Architektur.svg) +
+                          Internet  (HTTPS :443 / HTTP :80)
+                                     │
+              ┌────────────────────────────────────────────────┐
+              │  nginx Reverse-Proxy   (Container: appServer_PortalUI)
+              │  ein vHost pro Subdomain  *.server.schooltech.ch
+              │  TLS-Terminierung (Let's Encrypt) · 80→443 Redirect
+              └────────────────────────────────────────────────┘
+                                     │
+        ┌───────────────┬───────────┼──────────────┬────────────────────┐
+        ▼               ▼           ▼              ▼
+  server.          rp5*.        nextcloud.   inf*/rp3*/tc*/robot*/fluidnc*
+  schooltech.ch    schooltech.  schooltech.   .server.schooltech.ch
+  Portal-UI        lokale        Gerät im LAN  über SSH-Tunnel-Hub
+  (diese App)      Container     (direkte IP)  appServer_TunnelHead
+        │               │           │              │
+        ▼               ▼           ▼              ▼
+  public/          appServer_    192.168.0.210  appServer_TunnelHead (SSH-Reverse-Tunnels)
+  index.html       guacamole /                  ├─ 99xx InformatikWeb (inf*)
+  + Auth-API       portainer                    ├─ 81xx RP3/SCARA (rp3*, fluidnc*)
+                                                └─ 97xx ThinkCentre (tc*, robot*)
+ -> Diagramm-Quelle: [`doc/Architektur.svg`](doc/Architektur.svg) — auch als -> [`doc/Architektur.png`](doc/Architektur.png) (für Viewer ohne SVG-Support). +> Bild: [`doc/Architektur.png`](doc/Architektur.png) · Vektor-Quelle: +> [`doc/Architektur.svg`](doc/Architektur.svg) (für PDF/beliebige Skalierung). **Bausteine (Docker-Container, siehe `docker-compose.yaml`):** @@ -74,11 +95,19 @@ Ruft man die nackte Domain `server.schooltech.ch` auf, erscheint die **Ablauf aus Nutzersicht:** -![Portal-Ansicht](doc/Portal.svg) +
+  ┌──────────────────────────────────────────────────────────────┐
+  │ schooltech  [ Control GamePad ][ Guacamole ][ Simulation ]…  [Logout] │  ← Navigationsleiste
+  ├──────────────────────────────────────────────────────────────┤
+  │                                                                │
+  │                  « ausgewählter Dienst im iFrame »             │
+  │                                                                │
+  └──────────────────────────────────────────────────────────────┘
+ *Oben die Navigationsleiste mit Logo und Dienst-Buttons, darunter der gewählte -Dienst im iFrame. (Quelle: [`doc/Portal.svg`](doc/Portal.svg) — auch als -[`doc/Portal.png`](doc/Portal.png) und [`doc/Portal.pdf`](doc/Portal.pdf).)* +Dienst im iFrame. Bild: [`doc/Portal.png`](doc/Portal.png) · Quellen: +[`doc/Portal.svg`](doc/Portal.svg), [`doc/Portal.pdf`](doc/Portal.pdf).* 1. Seite öffnen → ist man nicht eingeloggt, zeigt der Button **„Login“**. 2. Login (User/Passwort) → der Auth-Service setzt ein Session-Cookie für die