docs: Doku nach fuenf Runden aufraeumen
Nach dem Hin und Her um Profile, Ports und Escaping war Sediment
liegengeblieben:
- README: "Drei Adressen fuer drei Richtungen" stand zweimal; die
Profil-Erklaerung war eine Chronik ("das war nicht immer so") statt
einer Anleitung. Jetzt ein Absatz.
- .env.example (beide): der Office-Block begann mit einem Hinweis auf
COMPOSE_PROFILES, den man nur braucht, wenn man selbst ein Profil
anlegt - als erste Zeile eines Abschnitts unbrauchbar. Raus.
- TESTING: der grosse Office-Abschnitt behauptete noch "Getestet mit
Collabora im Compose-Profil office" und pruefte "ohne --profile startet
der Container nicht". Beides ueberholt.
- Umlaute vereinheitlicht (laeuft neben gehoert), $-Hinweis von vier auf
zwei Zeilen.
Dazu zwei neue Zeilen in der Fehlertabelle des README: Container entsteht
gar nicht (Profil) und Container laeuft, aber kein Menuepunkt (leerer
OFFICE_PROVIDER oder falscher Port).
Geprueft: beide Compose-Dateien gueltig, jeder Schluessel aus dem Code
steht in deploy/.env.example, keine doppelten Absaetze mehr.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
1 parent
9f5b003177
commit
7fc8bb51d5
5 files changed
+49
-67
No files matched your search
+12
-17
@@ -14,11 +14,8 @@ DB_HOST=postgres
|
|||||||
DB_PORT=5432
|
DB_PORT=5432
|
||||||
DB_NAME=aether
|
DB_NAME=aether
|
||||||
DB_USER=aether
|
DB_USER=aether
|
||||||
# Jedes Zeichen erlaubt, auch % @ : / und Leerzeichen.
|
# Jedes Zeichen erlaubt – nur ein $ muss $$ heißen oder der Wert in
|
||||||
# Ein $ im Wert wird von Docker Compose als Variable gelesen und schneidet
|
# 'einfache Anführungszeichen'. Sonst schneidet Compose lautlos ab. (README)
|
||||||
# lautlos ab: geheim$wort kommt als geheim an. Als $$ schreiben oder den
|
|
||||||
# ganzen Wert in 'einfache Anfuehrungszeichen' setzen. Ein \ hilft NICHT.
|
|
||||||
# Im Container steht danach EIN $ – so gehoert es, angemeldet wird mit einem.
|
|
||||||
DB_PASSWORD=
|
DB_PASSWORD=
|
||||||
|
|
||||||
# Verzeichnis auf dem Wirt. Nur lesend anfassen – zum Hineinlegen: WebDAV.
|
# Verzeichnis auf dem Wirt. Nur lesend anfassen – zum Hineinlegen: WebDAV.
|
||||||
@@ -38,7 +35,7 @@ APP_BIND=127.0.0.1
|
|||||||
|
|
||||||
# ── Erster Start ──────────────────────────────────────────────────────────────
|
# ── Erster Start ──────────────────────────────────────────────────────────────
|
||||||
# Legt den Admin an. Danach ADMIN_PASSWORD leeren.
|
# Legt den Admin an. Danach ADMIN_PASSWORD leeren.
|
||||||
# Auch hier: ein $ muss $$ heissen (siehe DB_PASSWORD).
|
# Auch hier: ein $ muss $$ heißen (siehe DB_PASSWORD).
|
||||||
ADMIN_USERNAME=admin
|
ADMIN_USERNAME=admin
|
||||||
ADMIN_PASSWORD=
|
ADMIN_PASSWORD=
|
||||||
|
|
||||||
@@ -54,21 +51,19 @@ OIDC_REDIRECT_URL=https://cloud.example.com/api/v1/auth/oidc/callback
|
|||||||
OIDC_LINK_BY_USERNAME=false
|
OIDC_LINK_BY_USERNAME=false
|
||||||
|
|
||||||
# ── Office (optional) ─────────────────────────────────────────────────────────
|
# ── Office (optional) ─────────────────────────────────────────────────────────
|
||||||
# Nur noetig, wenn du dem Office-Dienst selbst ein `profiles:` gegeben hast.
|
# Leer = aus, auch wenn ein Office-Container läuft.
|
||||||
# Die Schnipsel im README haben keins und starten von allein.
|
# Schnipsel für Collabora, OnlyOffice und Euro-Office: README.md
|
||||||
# COMPOSE_PROFILES=office
|
|
||||||
# Leer = aus – auch wenn der Container laeuft. Schnipsel: README.md
|
|
||||||
OFFICE_PROVIDER=
|
OFFICE_PROVIDER=
|
||||||
# Backend → Office. Der Port haengt vom Anbieter ab:
|
|
||||||
# Collabora http://office:9980
|
# Backend → Office. Port je nach Anbieter:
|
||||||
# OnlyOffice/Euro-Office http://office (lauschen auf 80)
|
# Collabora http://office:9980
|
||||||
|
# OnlyOffice/Euro-Office http://office
|
||||||
OFFICE_URL=http://office:9980
|
OFFICE_URL=http://office:9980
|
||||||
# Browser → Office
|
# Browser → Office. Deine Domain oder LAN-IP, nicht der Compose-Name.
|
||||||
OFFICE_PUBLIC_URL=https://office.example.com
|
OFFICE_PUBLIC_URL=https://office.example.com
|
||||||
# Office → Aether. NICHT localhost, NICHT der veröffentlichte Port.
|
# Office → Aether. Weder localhost noch der veröffentlichte Port.
|
||||||
OFFICE_WOPI_URL=http://app:8080
|
OFFICE_WOPI_URL=http://app:8080
|
||||||
# Gegen SSRF: was das Backend anfragen darf.
|
# Gegen SSRF: was das Backend anfragen darf.
|
||||||
OFFICE_ALLOWED_HOSTS=office
|
OFFICE_ALLOWED_HOSTS=office
|
||||||
# Nur fuer OnlyOffice/Euro-Office: gemeinsames Geheimnis, mind. 32 Zeichen.
|
# Nur OnlyOffice/Euro-Office, mind. 32 Zeichen: openssl rand -hex 32
|
||||||
# openssl rand -hex 32 – Collabora braucht es nicht.
|
|
||||||
OFFICE_JWT_SECRET=
|
OFFICE_JWT_SECRET=
|
||||||
@@ -430,32 +430,21 @@ Schnipsel und häng ihn an dein `docker-compose.yml`.
|
|||||||
| `OFFICE_WOPI_URL` | wo der **Office-Server** Aether erreicht (leer = `PUBLIC_URL`) |
|
| `OFFICE_WOPI_URL` | wo der **Office-Server** Aether erreicht (leer = `PUBLIC_URL`) |
|
||||||
| `OFFICE_ALLOWED_HOSTS` | Ziele, die das Backend anfragen darf – gegen SSRF |
|
| `OFFICE_ALLOWED_HOSTS` | Ziele, die das Backend anfragen darf – gegen SSRF |
|
||||||
|
|
||||||
**Drei Adressen für drei Richtungen.** Das wirkt übertrieben, bis man es einmal
|
**Drei Adressen für drei Richtungen** – die häufigste Fehlerquelle beim
|
||||||
aufgebaut hat: Im Compose-Netz heißt der Office-Server `collabora`, im Browser
|
Aufbau. Im Compose-Netz heißt der Server `office`, der Browser braucht dort
|
||||||
muss dort ein auflösbarer Name stehen, und der Office-Server wiederum erreicht
|
einen Namen, den *er* auflösen kann (deine Domain oder LAN-IP), und der
|
||||||
Aether unter `app:8080` – „localhost" ist aus seinem Container heraus er selbst.
|
Office-Server erreicht Aether unter `app:8080`: „localhost" ist aus seinem
|
||||||
|
Container heraus er selbst.
|
||||||
|
|
||||||
**Drei Adressen für drei Richtungen.** Das wirkt übertrieben, bis man es einmal
|
Der Port unterscheidet sich je nach Anbieter: **Collabora lauscht auf 9980,
|
||||||
aufgebaut hat – die häufigste Fehlerquelle beim Aufbau.
|
OnlyOffice und Euro-Office auf 80.**
|
||||||
|
|
||||||
Die Schnipsel unten starten **sofort** mit `docker compose up -d`. Das war
|
Die Schnipsel unten starten sofort mit `docker compose up -d`. Zum Abschalten
|
||||||
nicht immer so: Anfangs stand in jedem `profiles: ["office"]`, damit der
|
`docker compose stop office`. Wer den Container lieber ganz aus der normalen
|
||||||
Container nur auf Wunsch läuft. Ein Dienst in einem Profil startet aber nur
|
Startfolge nimmt, hängt `profiles: ["office"]` an den Dienst – dann braucht es
|
||||||
mit `--profile office` – und in einer Oberfläche wie Portainer, Dockge oder
|
`--profile office` oder `COMPOSE_PROFILES=office` in der `.env`. **Vorsicht:**
|
||||||
Komodo gibt es diesen Schalter nicht. Der Container entstand dort nie, ohne
|
Oberflächen wie Portainer, Dockge oder Komodo kennen `--profile` nicht; dort
|
||||||
eine einzige Fehlermeldung. Eine Voreinstellung, bei der das Einfügen des
|
entsteht der Container dann nie, ohne jede Fehlermeldung.
|
||||||
Schnipsels nichts bewirkt, ist die falsche.
|
|
||||||
|
|
||||||
Wer ihn dennoch wahlweise an- und ausschalten will, hängt die Zeile selbst an
|
|
||||||
den Dienst:
|
|
||||||
|
|
||||||
```yaml
|
|
||||||
profiles: ["office"]
|
|
||||||
```
|
|
||||||
|
|
||||||
Dann startet er nur mit `docker compose --profile office up -d` – oder mit
|
|
||||||
`COMPOSE_PROFILES=office` in der `.env`, was auch ohne Kommandozeile wirkt
|
|
||||||
(gemessen). Zum Ausschalten reicht sonst `docker compose stop office`.
|
|
||||||
|
|
||||||
### Schnipsel 1: Collabora
|
### Schnipsel 1: Collabora
|
||||||
|
|
||||||
@@ -611,6 +600,8 @@ Alles hier ist beim Testen tatsächlich passiert, in dieser Reihenfolge:
|
|||||||
|
|
||||||
| Symptom | Ursache |
|
| Symptom | Ursache |
|
||||||
|---|---|
|
|---|---|
|
||||||
|
| Der Container entsteht gar nicht, ohne Fehlermeldung | Ein `profiles:` am Dienst. Startet nur mit `--profile office`, und Oberflächen wie Portainer kennen den Schalter nicht. Die Schnipsel oben haben deshalb keins. |
|
||||||
|
| Container läuft, aber kein „Edit in Office…" im Menü | `OFFICE_PROVIDER` ist leer – oder `OFFICE_URL` nennt den falschen Port (Collabora 9980, OnlyOffice/Euro-Office 80). Ohne Antwort auf `/hosting/discovery` bleibt der Punkt weg. |
|
||||||
| Rahmen bleibt leer, Konsole: *„Framing … violates default-src 'self'"* | Unsere eigene Sicherheitsrichtlinie. `frame-src` fällt auf `default-src` zurück; der Office-Ursprung muss ausdrücklich erlaubt sein. Passiert automatisch, sobald `OFFICE_PROVIDER` gesetzt ist. |
|
| Rahmen bleibt leer, Konsole: *„Framing … violates default-src 'self'"* | Unsere eigene Sicherheitsrichtlinie. `frame-src` fällt auf `default-src` zurück; der Office-Ursprung muss ausdrücklich erlaubt sein. Passiert automatisch, sobald `OFFICE_PROVIDER` gesetzt ist. |
|
||||||
| Editor lädt, Dokument bleibt weiß | `ssl.termination=true` ohne HTTPS davor. Collabora sagt dem Browser dann `wss://`, das es nicht gibt. Im HTTP-Test `OFFICE_SSL_TERMINATION=false`. |
|
| Editor lädt, Dokument bleibt weiß | `ssl.termination=true` ohne HTTPS davor. Collabora sagt dem Browser dann `wss://`, das es nicht gibt. Im HTTP-Test `OFFICE_SSL_TERMINATION=false`. |
|
||||||
| Log: *„CheckFileInfo returned 0 … ECONNREFUSED"* | `OFFICE_WOPI_URL` zeigt auf `127.0.0.1:8090`. Der Port ist auf loopback gebunden – aus einem Container nicht erreichbar. Im Compose den Dienstnamen nehmen. |
|
| Log: *„CheckFileInfo returned 0 … ECONNREFUSED"* | `OFFICE_WOPI_URL` zeigt auf `127.0.0.1:8090`. Der Port ist auf loopback gebunden – aus einem Container nicht erreichbar. Im Compose den Dienstnamen nehmen. |
|
||||||
|
|||||||
+8
-3
@@ -950,10 +950,11 @@ Die Daten liegen seit dem 23.08.2026 in einem gewöhnlichen Verzeichnis
|
|||||||
- [ ] Beim Umzug: Prüfsummen von Volume und Zielverzeichnis stimmen überein,
|
- [ ] Beim Umzug: Prüfsummen von Volume und Zielverzeichnis stimmen überein,
|
||||||
**bevor** umgeschaltet wird 🔎
|
**bevor** umgeschaltet wird 🔎
|
||||||
|
|
||||||
## Office – Collabora / OnlyOffice (24.08.2026)
|
## Office – Collabora / OnlyOffice / Euro-Office (24.08.2026)
|
||||||
|
|
||||||
Aether ist WOPI-Host; der Office-Server holt die Datei selbst ab und schreibt
|
Aether ist WOPI-Host; der Office-Server holt die Datei selbst ab und schreibt
|
||||||
sie zurück. Getestet mit Collabora im Compose-Profil `office`.
|
sie zurück. **Gemessen wurde mit Collabora**; OnlyOffice und Euro-Office
|
||||||
|
sprechen dieselbe Schnittstelle, sind hier aber nie gelaufen (Arbeitsspeicher).
|
||||||
|
|
||||||
### Öffnen
|
### Öffnen
|
||||||
- [ ] Rechtsklick auf .odt/.docx/.ods → „Edit in Office…" erscheint 🔎
|
- [ ] Rechtsklick auf .odt/.docx/.ods → „Edit in Office…" erscheint 🔎
|
||||||
@@ -979,7 +980,11 @@ sie zurück. Getestet mit Collabora im Compose-Profil `office`.
|
|||||||
- [ ] `/wopi/files/<id>` ohne Token → `401` 🔎
|
- [ ] `/wopi/files/<id>` ohne Token → `401` 🔎
|
||||||
|
|
||||||
### Aufbau
|
### Aufbau
|
||||||
- [ ] Ohne `--profile office` startet der Container nicht 🔎
|
- [ ] Schnipsel aus dem README anhängen, `docker compose up -d` → der
|
||||||
|
Container entsteht (die Schnipsel haben **kein** Profil, siehe unten) 🔎
|
||||||
|
- [ ] `OFFICE_PROVIDER` leer → kein Menüpunkt, auch wenn der Container läuft
|
||||||
|
- [ ] Falscher Port in `OFFICE_URL` (9980 statt 80 bei Euro-Office) → die
|
||||||
|
Ermittlung findet nichts, der Menüpunkt bleibt weg
|
||||||
- [ ] `OFFICE_ALLOWED_HOSTS` greift: eine fremde Adresse in `OFFICE_URL` wird
|
- [ ] `OFFICE_ALLOWED_HOSTS` greift: eine fremde Adresse in `OFFICE_URL` wird
|
||||||
abgelehnt statt angefragt
|
abgelehnt statt angefragt
|
||||||
- [ ] Sicherheitsrichtlinie nennt den Office-Ursprung unter `frame-src` 🔎
|
- [ ] Sicherheitsrichtlinie nennt den Office-Ursprung unter `frame-src` 🔎
|
||||||
|
|||||||
+9
-17
@@ -17,11 +17,8 @@ DB_HOST=postgres
|
|||||||
DB_PORT=5432
|
DB_PORT=5432
|
||||||
DB_NAME=aether
|
DB_NAME=aether
|
||||||
DB_USER=aether
|
DB_USER=aether
|
||||||
# Jedes Zeichen erlaubt, auch % @ : / und Leerzeichen.
|
# Jedes Zeichen erlaubt – nur ein $ muss $$ heißen oder der Wert in
|
||||||
# Ein $ im Wert wird von Docker Compose als Variable gelesen und schneidet
|
# 'einfache Anführungszeichen'. Sonst schneidet Compose lautlos ab. (README)
|
||||||
# lautlos ab: geheim$wort kommt als geheim an. Als $$ schreiben oder den
|
|
||||||
# ganzen Wert in 'einfache Anfuehrungszeichen' setzen. Ein \ hilft NICHT.
|
|
||||||
# Im Container steht danach EIN $ – so gehoert es, angemeldet wird mit einem.
|
|
||||||
DB_PASSWORD=changeme_strong_password
|
DB_PASSWORD=changeme_strong_password
|
||||||
|
|
||||||
# ── Sitzung ───────────────────────────────────────────────────────────────────
|
# ── Sitzung ───────────────────────────────────────────────────────────────────
|
||||||
@@ -44,7 +41,7 @@ APP_BIND=127.0.0.1
|
|||||||
|
|
||||||
# ── Erster Start ──────────────────────────────────────────────────────────────
|
# ── Erster Start ──────────────────────────────────────────────────────────────
|
||||||
# Legt den Admin an. Danach ADMIN_PASSWORD leeren.
|
# Legt den Admin an. Danach ADMIN_PASSWORD leeren.
|
||||||
# Auch hier: ein $ muss $$ heissen (siehe DB_PASSWORD).
|
# Auch hier: ein $ muss $$ heißen (siehe DB_PASSWORD).
|
||||||
ADMIN_USERNAME=admin
|
ADMIN_USERNAME=admin
|
||||||
ADMIN_PASSWORD=changeme_strong_admin_password
|
ADMIN_PASSWORD=changeme_strong_admin_password
|
||||||
|
|
||||||
@@ -72,27 +69,22 @@ ADMIN_PASSWORD=changeme_strong_admin_password
|
|||||||
EXTERNAL_APPS=
|
EXTERNAL_APPS=
|
||||||
|
|
||||||
# ── Office (optional) ─────────────────────────────────────────────────────────
|
# ── Office (optional) ─────────────────────────────────────────────────────────
|
||||||
# Nur noetig, wenn du dem Office-Dienst selbst ein `profiles:` gegeben hast.
|
# Leer = aus, auch wenn ein Office-Container läuft. Schnipsel: README.md
|
||||||
# Die Schnipsel im README haben keins und starten von allein.
|
|
||||||
# COMPOSE_PROFILES=office
|
|
||||||
# Leer = aus. Container-Schnipsel: README.md
|
|
||||||
OFFICE_PROVIDER= # collabora | onlyoffice (auch Euro-Office)
|
OFFICE_PROVIDER= # collabora | onlyoffice (auch Euro-Office)
|
||||||
# Der Port haengt vom Anbieter ab: Collabora 9980, OnlyOffice/Euro-Office 80.
|
# Backend → Office. Collabora lauscht auf 9980, OnlyOffice/Euro-Office auf 80.
|
||||||
OFFICE_URL= # Backend → Office
|
OFFICE_URL=
|
||||||
OFFICE_PUBLIC_URL= # Browser → Office; leer = wie OFFICE_URL
|
OFFICE_PUBLIC_URL= # Browser → Office; leer = wie OFFICE_URL
|
||||||
# Office → Aether; leer = PUBLIC_URL.
|
# Office → Aether; leer = PUBLIC_URL.
|
||||||
# NICHT localhost, NICHT der veröffentlichte Port – beides scheitert.
|
# Weder localhost noch der veröffentlichte Port – beides scheitert.
|
||||||
OFFICE_WOPI_URL=
|
OFFICE_WOPI_URL=
|
||||||
OFFICE_ALLOWED_HOSTS= # gegen SSRF; Host aus OFFICE_URL zählt immer
|
OFFICE_ALLOWED_HOSTS= # gegen SSRF; Host aus OFFICE_URL zählt immer
|
||||||
# Nur fuer OnlyOffice/Euro-Office: gemeinsames Geheimnis, mind. 32 Zeichen.
|
OFFICE_JWT_SECRET= # nur OnlyOffice/Euro-Office, mind. 32 Zeichen
|
||||||
# openssl rand -hex 32 – Collabora braucht es nicht.
|
|
||||||
OFFICE_JWT_SECRET=
|
|
||||||
OFFICE_INSECURE_TLS=false # nur für Tests mit selbstsigniertem Zertifikat
|
OFFICE_INSECURE_TLS=false # nur für Tests mit selbstsigniertem Zertifikat
|
||||||
|
|
||||||
# Nur für den Collabora-Container aus deploy/docker-compose.yml:
|
# Nur für den Collabora-Container aus deploy/docker-compose.yml:
|
||||||
OFFICE_ALIASGROUP=http://app:8080
|
OFFICE_ALIASGROUP=http://app:8080
|
||||||
OFFICE_SSL=false
|
OFFICE_SSL=false
|
||||||
OFFICE_SSL_TERMINATION=false # produktiv true; false ohne HTTPS davor
|
OFFICE_SSL_TERMINATION=false # true nur, wenn davor wirklich HTTPS endet
|
||||||
OFFICE_PORT=9980
|
OFFICE_PORT=9980
|
||||||
|
|
||||||
# ── Später ────────────────────────────────────────────────────────────────────
|
# ── Später ────────────────────────────────────────────────────────────────────
|
||||||
|
|||||||
@@ -56,12 +56,11 @@ services:
|
|||||||
timeout: 5s
|
timeout: 5s
|
||||||
retries: 10
|
retries: 10
|
||||||
|
|
||||||
# Office – kostet rund 1 GB Arbeitsspeicher, deshalb hier im Profil:
|
# Office – kostet rund 1 GB, deshalb hier im Profil (Entwicklerdatei, immer
|
||||||
# docker compose -f deploy/docker-compose.yml --profile office up -d
|
# von der Kommandozeile): ... --profile office up -d
|
||||||
# Achtung: Oberflächen wie Portainer oder Dockge kennen `--profile` nicht.
|
# Die Schnipsel im README haben bewusst kein Profil: Oberflächen wie
|
||||||
# Dort entsteht der Container nie, ohne Fehlermeldung – für solche Fälle
|
# Portainer oder Dockge kennen `--profile` nicht, dort entstünde der
|
||||||
# entweder COMPOSE_PROFILES=office in die .env oder die Zeile `profiles:`
|
# Container nie – ohne Fehlermeldung.
|
||||||
# streichen. Die Schnipsel im README haben deshalb keine.
|
|
||||||
collabora:
|
collabora:
|
||||||
container_name: aether-collabora
|
container_name: aether-collabora
|
||||||
image: collabora/code:latest
|
image: collabora/code:latest
|
||||||
|
|||||||
Reference in new issue
Block a user