Files
HoneyOS/beispiele/mehrere-apps/leiste.conf
T
marcandClaude Opus 5 8f294e15db feat(beispiel): die Leiste ueber die eigene Adresse der App ausliefern
Marcs BentoPDF-Image (ghcr.io/alam00000/bentopdf-simple) schickt eine strenge
CSP — mit dem Image von Docker Hub, an dem ich zuerst geprueft hatte, war das
nicht zu sehen. Statt fremde Kopfzeilen umzuschreiben, reicht der Einsetzer
jetzt auch /honeybar/ und die zwei Abfragen der Leiste unter seiner eigenen
Adresse durch. Damit ist fuer den Browser alles derselbe Ursprung: CSP
unangetastet, kein CORS, kein COEP, und der Schluessel bleibt auf dem Server.

Durchgereicht wird nur /api/apps und /api/weather, nur lesend. Ein pauschales
/api/ haette die ganze Schnittstelle unter die Adresse der App gehaengt — beim
Ausprobieren hat meine eigene Schreibprobe prompt die App-Liste geleert.

Das Binden auf 127.0.0.1 ist raus: Es passt nur, wenn der Proxy auf demselben
Wirt im Host-Netz laeuft, und nicht fuer Marcs Aufbau.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-29 01:28:12 +02:00

74 lines
3.7 KiB
Plaintext

# ─────────────────────────────────────────────────────────────────────────────
# HINWEIS: Diese Datei ist die lesbare Fassung zum Nachschlagen. Verwendet wird
# derselbe Inhalt aus `docker-compose.yml` (Abschnitt `configs:`) — dort steht
# er noch einmal, mit `$$` statt `$`. Wer hier etwas ändert, ändert es dort.
#
# Der Grund für den Umweg: Bind-Mounts einzelner Dateien scheitern, sobald die
# Datei auf dem Wirt fehlt — Docker legt dann ein Verzeichnis an und bricht mit
# „not a directory" ab. Beim Einsetzen über eine Oberfläche will man ausserdem
# nur eine Datei bearbeiten, nicht drei.
# ─────────────────────────────────────────────────────────────────────────────
# ─────────────────────────────────────────────────────────────────────────────
# Ein Einsetzer für alle Dienste, die die Leiste tragen sollen.
#
# Pangolin gibt den ursprünglichen Host weiter; daran erkennt nginx, welcher
# Dienst gemeint ist. Eine neue App heisst: zwei Zeilen in den Tabellen unten,
# neu laden, fertig — kein weiterer Behälter.
# ─────────────────────────────────────────────────────────────────────────────
# Wohin durchgereicht wird. Links der Name, unter dem du die App aufrufst,
# rechts Behältername und Port im Docker-Netz.
map $host $ziel {
default "";
pdf.honeyos.duckdns.org "bentopdf:8080";
status.honeyos.duckdns.org "uptime-kuma:3001";
}
# Welche App das für HoneyOS ist. Muss der id in der App-Liste entsprechen —
# daran erkennt die Leiste, wo man gerade ist, und hebt sie hervor.
map $host $appid {
default "";
pdf.honeyos.duckdns.org "bentopdf";
status.honeyos.duckdns.org "status";
}
server {
listen 80;
server_name _;
# Für ein proxy_pass mit Variable braucht nginx einen Namensauflöser —
# im Docker-Netz ist das der eingebaute unter 127.0.0.11.
resolver 127.0.0.11 valid=30s ipv6=off;
# Unbekannter Host: nicht raten, sondern ablehnen. Sonst wird aus einem
# Tippfehler in Pangolin eine stille Weiterleitung irgendwohin.
if ($ziel = "") { return 404; }
location / {
proxy_pass http://$ziel;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Real-IP $remote_addr;
# WebSockets durchlassen — viele Werkzeuge (Uptime Kuma, Dashboards,
# alles mit Live-Anzeige) brechen sonst ab.
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection $connection_upgrade;
# Unkomprimiert anfordern, sonst ist im Strom nichts zu ersetzen.
proxy_set_header Accept-Encoding "";
# Nur HTML anfassen; alles andere geht unberührt durch.
sub_filter_once on;
sub_filter '</head>'
'<script defer src="https://honeyos.duckdns.org/honeybar/honeybar.js" data-app="$appid"></script></head>';
# Lange Antworten nicht künstlich aufhalten (Downloads, Fortschritt).
proxy_buffering off;
proxy_read_timeout 300s;
}
}