Kein alter Stand mehr im Zwischenspeicher, Einsetzer heisst HoneyBar-Proxy

Die HoneyBar kommt bei fremden Apps ueber deren eigenen Ursprung — das
loest CSP, CORS und COEP auf einmal, setzt sie aber auch deren Zwischen-
speicher aus. Eine alte HoneyBar dort sieht aus wie ein Fehler in HoneyOS.
Statt no-cache jetzt no-store, must-revalidate; dazu ein Abschnitt in der
README, wie man einen haengengebliebenen Stand erkennt.

Und der nginx davor heisst nicht mehr 'Einsetzer', sondern HoneyBar-Proxy
(Dienst und Behaelter honeybar-proxy bzw. <app>-honeybar). Er ist ein
Reverse Proxy, der die HoneyBar einsetzt — der alte Name sagte das
Gegenteil von dem, was man im docker ps sehen will. LEISTE_PORT heisst
jetzt HONEYBAR_PROXY_PORT.
This commit is contained in:
marc committed 2026-08-29 22:36:56 +02:00
1 parent 53ab62d220
commit 6fe6533667
4 files changed
+63 -33

No files matched your search

+34 -10
View File
@@ -229,7 +229,7 @@ hinein, ihre Stile nicht hinaus. Sie schiebt den Seiteninhalt um 32 px nach unte
Vorschau ohne Einbau: `/honeybar/demo.html`.
### Weg 2 — fertige Apps: ein Einsetzer davor
### Weg 2 — fertige Apps: ein HoneyBar-Proxy davor
Für Werkzeuge, die man **nicht selbst geschrieben hat**, gibt es keinen
`<script>`-Tag zum Ändern — den setzt ein kleiner nginx ein, während er die
@@ -295,7 +295,7 @@ schickt — und das tun die meisten:
| `HONEYOS_APPS_KEY` | steht im Quelltext der Seite | **bleibt auf dem Server** |
| Aufwand | eine `sub_filter`-Zeile | drei `location`-Blöcke |
Bei der zweiten reicht der Einsetzer auch `/honeybar/` und die zwei Abfragen der
Bei der zweiten reicht der HoneyBar-Proxy auch `/honeybar/` und die zwei Abfragen der
HoneyBar durch, unter *seiner* Adresse. Für den Browser ist damit alles derselbe
Ursprung, und die drei Hürden fallen auf einmal weg. Durchgereicht werden dabei
**nur** `/api/apps` und `/api/weather`, und nur lesend (`limit_except GET`) —
@@ -328,29 +328,29 @@ services:
networks:
honeybar:
external: true # legt der Einsetzer-Stapel an
external: true # legt der HoneyBar-Proxy-Stapel an
```
Zwei Änderungen, mehr nicht:
1. **`ports:` fällt weg.** Die App braucht kein Loch nach außen mehr — der
Einsetzer spricht sie im Docker-Netz unter ihrem Namen an (`bentopdf:8080`;
HoneyBar-Proxy spricht sie im Docker-Netz unter ihrem Namen an (`bentopdf:8080`;
die `8080` ist der Port *im* Behälter und bleibt, die `8888` war nur die
Klinke an der Außenseite). Ginge Pangolin weiter direkt auf die App, wäre der
Einsetzer umgangen und die HoneyBar fehlte. Zum Nachsehen darf ein `ports:`
HoneyBar-Proxy umgangen und die HoneyBar fehlte. Zum Nachsehen darf ein `ports:`
ruhig stehen bleiben — dann hast du zwei Wege: direkt ohne HoneyBar, über
Pangolin mit.
2. **Das Netz `honeybar` dazu.** Es entsteht im Einsetzer-Stapel; hier wird es
2. **Das Netz `honeybar` dazu.** Es entsteht im HoneyBar-Proxy-Stapel; hier wird es
nur als `external` mitbenutzt. Deshalb jenen Stapel zuerst starten.
Dazu noch zwei Zeilen im Einsetzer (`$ziel` und `$appid`) und in Pangolin die
Dazu noch zwei Zeilen im HoneyBar-Proxy (`$ziel` und `$appid`) und in Pangolin die
Ressource von der App auf `honeybar:80` umstellen. Fertig.
#### Was es kostet
Nicht viel, aber nicht nichts:
- **Ein Ausfallpunkt mehr.** Ist der Einsetzer weg, sind die Apps dahinter weg —
- **Ein Ausfallpunkt mehr.** Ist der HoneyBar-Proxy weg, sind die Apps dahinter weg —
nicht nur ihre HoneyBar. `restart: unless-stopped` ist deshalb Pflicht; ein
nginx, der nur durchreicht, fällt praktisch nie aus.
- **Eine Stelle mehr zum Pflegen.** Je App zwei Zeilen, und beim Umbenennen
@@ -366,7 +366,7 @@ Nicht viel, aber nicht nichts:
strenge CSP und COEP mitbringt: HoneyBar, Apps und Wetter erscheinen, ohne dass
an dessen Kopfzeilen etwas geändert wird.
- [`beispiele/mehrere-apps/`](beispiele/mehrere-apps/) — **HoneyOS und ein
Einsetzer für beliebig viele Dienste in einem Stapel.** Zwei Tabellen oben in
HoneyBar-Proxy für beliebig viele Dienste in einem Stapel.** Zwei Tabellen oben in
der Datei sagen, welcher Name zu welchem Behälter gehört und welche App das
für HoneyOS ist; eine neue App sind zwei Zeilen. Die HoneyBar hebt die aktuelle
App hervor, sobald `$appid` der `ID` in der App-Liste entspricht — genau wie
@@ -378,7 +378,7 @@ Nicht viel, aber nicht nichts:
Das Netz `honeybar` legt dieser Stapel selbst an, unter festem Namen. Die
fremden Dienste treten ihm bei (`networks: [default, honeybar]` und
`honeybar: {external: true}`); ihre eigenen `ports:` können dann ganz weg,
erreichbar ist nur noch der Einsetzer. Deshalb diesen Stapel zuerst starten. Ein Host, der in der Tabelle fehlt, bekommt **404** statt einer
erreichbar ist nur noch der HoneyBar-Proxy. Deshalb diesen Stapel zuerst starten. Ein Host, der in der Tabelle fehlt, bekommt **404** statt einer
geratenen Weiterleitung — sonst wird aus einem Tippfehler in Pangolin eine
stille Umleitung irgendwohin. WebSocket-Verbindungen (Uptime Kuma, Dashboards,
alles mit Live-Anzeige) gehen durch, dafür sorgt `upgrade.conf`.
@@ -443,6 +443,30 @@ eingebettetes Bild einer fremden Seite eine Abmeldung auslösen. Der Punkt
erscheint nur, wenn HoneyOS selbst anmeldet; hinter einem Proxy oder im offenen
Betrieb fehlt er.
## Wenn die HoneyBar veraltet aussieht
Die HoneyBar wird bei Weg 2 über den **eigenen Ursprung der App** ausgeliefert
(`/honeybar/honeybar.js`). Das ist der Kniff, der CSP, CORS und COEP auf einmal
erledigt — es setzt sie aber zugleich dem Zwischenspeicher dieser App aus, und
dem ihres Service Workers, falls sie einen hat. Eine alte HoneyBar dort sieht
aus wie ein Fehler in HoneyOS: Ein neuer Menüpunkt fehlt, obwohl der
Schreibtisch ihn längst hat.
HoneyOS liefert seine Dateien deshalb mit `Cache-Control: no-store` aus. Bleibt
trotzdem etwas hängen, hilft die Probe von Hand:
```bash
curl -s https://<app-adresse>/honeybar/honeybar.js | grep -c sysmenu
```
Kommt dort **0**, ist die ausgelieferte Datei alt — dann läuft HoneyOS noch auf
einem älteren Abbild (`docker compose pull && up -d`). Kommt **2**, liegt es am
Browser: einmal hart neu laden (Strg+Umschalt+R), und bei einer installierten
PWA deren Daten löschen.
**Am schnellsten zu sehen ohne Werkzeug:** Stehen im App-Streifen der HoneyBar
Symbole neben den Namen? Dann ist sie aktuell.
## Wer angemeldet ist
Steht auf dem Schreibtisch, als eigenes Widget: Bild, Name und Begrüßung, aus