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.
108 lines
4.8 KiB
YAML
108 lines
4.8 KiB
YAML
# ─────────────────────────────────────────────────────────────────────────────
|
|
# BentoPDF mit HoneyBar — alles über den eigenen Ursprung.
|
|
#
|
|
# Pangolin → honeybar-proxy → bentopdf
|
|
# ↘ honeyos (nur /honeybar/ und zwei Abfragen)
|
|
#
|
|
# Der Kniff: Die HoneyBar wird nicht von honeyos.… geladen, sondern über die
|
|
# Adresse der App selbst durchgereicht. Für den Browser ist sie damit eigener
|
|
# Ursprung — und alle drei Hürden fallen auf einmal weg:
|
|
#
|
|
# · die CSP der App (BentoPDF erlaubt 'self', mehr braucht es nicht)
|
|
# · CORS (keine fremde Anfrage mehr)
|
|
# · COEP (kein fremdes Skript mehr)
|
|
#
|
|
# Ausserdem bleibt HONEYOS_APPS_KEY auf dem Server: Der nginx setzt ihn ein,
|
|
# im Quelltext der Seite steht er nicht.
|
|
#
|
|
# docker compose up -d
|
|
# → in Pangolin die Ressource auf honeybar-proxy:80 zeigen lassen,
|
|
# und in HoneyOS BentoPDF als App eintragen (ID: bentopdf, URL: die
|
|
# öffentliche Adresse, exakt so, wie du sie im Browser aufrufst).
|
|
# ─────────────────────────────────────────────────────────────────────────────
|
|
services:
|
|
bentopdf:
|
|
image: ghcr.io/alam00000/bentopdf-simple:latest
|
|
container_name: bentopdf
|
|
restart: unless-stopped
|
|
# Kein ports: nötig — erreichbar ist nur noch der HoneyBar-Proxy davor.
|
|
# (Zum direkten Nachsehen ohne HoneyBar ruhig eins lassen.)
|
|
networks: [honeybar]
|
|
|
|
honeybar-proxy:
|
|
image: nginx:alpine
|
|
container_name: bentopdf-honeybar
|
|
restart: unless-stopped
|
|
depends_on: [bentopdf]
|
|
ports:
|
|
# Auf welcher Adresse Pangolin die App abholt. 127.0.0.1 nur, wenn
|
|
# Pangolin auf demselben Wirt im Host-Netz läuft — hängt es in einem
|
|
# eigenen Behälter oder auf einer anderen Maschine, kommt es dort nicht
|
|
# hin. Am saubersten: kein ports:, und Pangolin (bzw. sein Newt) tritt
|
|
# dem Netz `honeybar` bei und spricht `honeybar-proxy:80` direkt an.
|
|
- "${HONEYBAR_PROXY_PORT:-8185}:80"
|
|
configs:
|
|
- source: honeybar
|
|
target: /etc/nginx/conf.d/default.conf
|
|
networks: [honeybar]
|
|
|
|
configs:
|
|
honeybar:
|
|
# `$$` ist hier ein einfaches `$` für nginx. Ein einzelnes `$` setzt
|
|
# dagegen Compose ein — genau das ist bei ${HONEYOS_APPS_KEY} gewollt:
|
|
# der Schlüssel kommt aus der .env und landet nur in der Konfiguration
|
|
# des nginx, nie im Quelltext der Seite. (nginx selbst löst keine
|
|
# Umgebungsvariablen auf; stünde dort $${…}, ginge die Zeichenkette
|
|
# wörtlich als Schlüssel hinaus.)
|
|
content: |
|
|
server {
|
|
listen 80;
|
|
resolver 127.0.0.11 valid=30s ipv6=off;
|
|
|
|
# Uploads nicht hier begrenzen — nginx nimmt sonst bei 1 MB nichts
|
|
# mehr an, und jede App mit Dateiupload waere hinter dem HoneyBar-Proxy
|
|
# kaputt. Wieviel erlaubt ist, entscheidet die App dahinter.
|
|
client_max_body_size 0;
|
|
|
|
# 1. Die HoneyBar selbst, durchgereicht über diesen Ursprung.
|
|
location /honeybar/ {
|
|
proxy_pass http://honeyos:8080/honeybar/;
|
|
}
|
|
|
|
# 2. Ihre zwei Abfragen — einzeln benannt und nur lesend. Ein
|
|
# durchgereichtes /api/ hinge die ganze HoneyOS-Schnittstelle
|
|
# unter die Adresse dieser App.
|
|
location = /honeyos-api/apps {
|
|
limit_except GET { deny all; }
|
|
proxy_pass http://honeyos:8080/api/apps;
|
|
proxy_set_header X-HoneyOS-Key "${HONEYOS_APPS_KEY}";
|
|
}
|
|
location = /honeyos-api/weather {
|
|
limit_except GET { deny all; }
|
|
proxy_pass http://honeyos:8080/api/weather;
|
|
proxy_set_header X-HoneyOS-Key "${HONEYOS_APPS_KEY}";
|
|
}
|
|
|
|
# 3. Die App selbst, mit eingesetzter Zeile.
|
|
location / {
|
|
proxy_pass http://bentopdf:8080;
|
|
proxy_set_header Host $$host;
|
|
proxy_set_header X-Forwarded-For $$proxy_add_x_forwarded_for;
|
|
proxy_set_header X-Forwarded-Proto $$scheme;
|
|
proxy_http_version 1.1;
|
|
|
|
# Unkomprimiert anfordern — in einem gzip-Strom ist nichts zu ersetzen.
|
|
proxy_set_header Accept-Encoding "";
|
|
|
|
# sub_filter_types braucht es nicht: text/html ist voreingestellt,
|
|
# und doppelt genannt warnt nginx beim Start.
|
|
sub_filter_once on;
|
|
sub_filter '</head>'
|
|
'<script defer src="/honeybar/honeybar.js" data-app="bentopdf" data-apps="/honeyos-api/apps" data-home="https://honeyos.duckdns.org/"></script></head>';
|
|
}
|
|
}
|
|
|
|
networks:
|
|
honeybar:
|
|
external: true
|