diff --git a/README.md b/README.md index 6bbbe07..0e327fb 100644 --- a/README.md +++ b/README.md @@ -234,14 +234,17 @@ Das COEP der App bleibt dabei unangetastet — ihre eigenen Fähigkeiten also au **Fertige Beispiele:** - [`beispiele/bentopdf/`](beispiele/bentopdf/) — ein Dienst, kürzestmöglich. -- [`beispiele/mehrere-apps/`](beispiele/mehrere-apps/) — **ein** Einsetzer für - alle Dienste. Am Host erkennt nginx, welcher gemeint ist; eine neue App sind - zwei Zeilen in den Tabellen oben in der Datei. Das ist der Aufbau, den man - haben will, sobald es mehr als ein Werkzeug ist — nicht ein Behälter je App. +- [`beispiele/mehrere-apps/`](beispiele/mehrere-apps/) — **HoneyOS und ein + Einsetzer für alle Dienste in einem Stapel.** Am Host erkennt nginx, welcher + Dienst gemeint ist; eine neue App sind zwei Zeilen in den Tabellen oben in + `leiste.conf`. Das ist der Aufbau, den man haben will, sobald es mehr als ein + Werkzeug ist — nicht ein Behälter je App, und nicht HoneyOS getrennt davon + gepflegt. -Damit ein gemeinsamer Einsetzer die Dienste erreicht, teilen sie sich ein Netz -(`docker network create honeybar`, in jeder App-Compose-Datei als `external` -eintragen). Ein Host, der in der Tabelle fehlt, bekommt **404** statt einer +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 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`. diff --git a/beispiele/mehrere-apps/docker-compose.yml b/beispiele/mehrere-apps/docker-compose.yml index 3f6391e..84c05b1 100644 --- a/beispiele/mehrere-apps/docker-compose.yml +++ b/beispiele/mehrere-apps/docker-compose.yml @@ -1,23 +1,56 @@ -# ───────────────────────────────────────────────────────────── -# Ein Einsetzer für mehrere Dienste. +# ───────────────────────────────────────────────────────────────────────────── +# HoneyOS und der Einsetzer in einem Stapel. # -# Pangolin → leiste → (bentopdf | uptime-kuma | …) +# Pangolin → honeyos (der Schreibtisch selbst) +# Pangolin → leiste → bentopdf, kuma, … (fremde Dienste mit Leiste) # -# Die Dienste selbst liegen in ihren eigenen Compose-Dateien. Damit der -# Einsetzer sie erreicht, teilen sie sich ein Netz: +# Beides gehört zusammen: Die Leiste kommt von HoneyOS, der Einsetzer trägt sie +# in Werkzeuge, die man nicht ändern kann. Getrennt zu pflegen hiesse, bei jeder +# neuen App an zwei Stellen zu denken. # -# docker network create honeybar +# cp ../../.env.example .env && ausfüllen +# mkdir -p daten && sudo chown 1000:1000 daten +# docker compose up -d # -# und in jeder App-Compose-Datei: +# Das Netz `honeybar` legt dieser Stapel selbst an — die fremden Dienste treten +# ihm bei. In deren Compose-Datei: # -# networks: [default, honeybar] +# services: +# bentopdf: +# networks: [default, honeybar] # ports: kann dann ganz weg # networks: # honeybar: # external: true # -# Danach in Pangolin jede Ressource auf leiste:80 zeigen lassen. -# ───────────────────────────────────────────────────────────── +# Diesen Stapel deshalb zuerst starten; danach die anderen. +# In Pangolin zeigt honeyos.… auf honeyos:8080 und jede App auf leiste:80. +# ───────────────────────────────────────────────────────────────────────────── + services: + honeyos: + image: gitea.honeyy.duckdns.org/docker/honeyos:latest + container_name: honeyos + restart: unless-stopped + user: "1000:1000" + ports: + # Nur an localhost: davor steht Pangolin, nicht das offene Netz. + - "127.0.0.1:${HONEYOS_PORT:-8088}:8080" + volumes: + - ${HONEYOS_DATA_DIR:-./daten}:/data + environment: + - HONEYOS_PUBLIC_URL=${HONEYOS_PUBLIC_URL:-} + - HONEYOS_SESSION_SECRET=${HONEYOS_SESSION_SECRET:-} + - HONEYOS_OIDC_ISSUER=${HONEYOS_OIDC_ISSUER:-} + - HONEYOS_OIDC_CLIENT_ID=${HONEYOS_OIDC_CLIENT_ID:-} + - HONEYOS_OIDC_CLIENT_SECRET=${HONEYOS_OIDC_CLIENT_SECRET:-} + - HONEYOS_OIDC_REDIRECT_URL=${HONEYOS_OIDC_REDIRECT_URL:-} + - HONEYOS_BUTTON_LABEL=${HONEYOS_BUTTON_LABEL:-Anmelden} + - HONEYOS_ALLOWED_USERS=${HONEYOS_ALLOWED_USERS:-} + - HONEYOS_PROXY_AUTH=${HONEYOS_PROXY_AUTH:-} + - HONEYOS_USER_HEADER=${HONEYOS_USER_HEADER:-} + - HONEYOS_APPS_KEY=${HONEYOS_APPS_KEY:-} + networks: [honeybar] + leiste: image: nginx:alpine container_name: honeybar-leiste @@ -26,9 +59,13 @@ services: - ./upgrade.conf:/etc/nginx/conf.d/00-upgrade.conf:ro - ./leiste.conf:/etc/nginx/conf.d/default.conf:ro ports: - - "127.0.0.1:8185:80" + - "127.0.0.1:${LEISTE_PORT:-8185}:80" networks: [honeybar] + # Der Einsetzer braucht HoneyOS nicht zum Starten — er reicht nur durch und + # setzt eine Zeile ein. Ist HoneyOS aus, fehlt die Leiste, die App läuft. networks: honeybar: - external: true + # Fester Name, damit andere Compose-Dateien ihn als `external` finden. + # Ohne den hiesse das Netz nach dem Ordner, in dem diese Datei liegt. + name: honeybar