OFFICE_URL stand fest auf http://office:9980 – das ist Collabora. OnlyOffice
und Euro-Office lauschen im Container auf 80, dort waere die Adresse
http://office ohne Port. Mit dem falschen Port meldet die Discovery nichts
und der Menuepunkt bleibt weg.
Dazu deutlicher: leerer OFFICE_PROVIDER heisst aus, auch wenn der Container
laeuft.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
profiles: [office] war als Sparmassnahme gedacht: Der Container laeuft nur
auf Wunsch. In Portainer/Dockge/Komodo gibt es aber kein --profile, und der
Dienst entstand dort nie – ohne Fehlermeldung, ohne Hinweis, ohne Weg ueber
die Bedienung.
Eine Voreinstellung, bei der das Einfuegen des Schnipsels nichts bewirkt,
ist die falsche. Alle drei Schnipsel starten jetzt mit (geprueft: app office postgres). Abschalten: docker compose stop
office. Wer ein Profil will, haengt die Zeile selbst an.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Der Office-Container entstand nie, ohne Fehlermeldung: profiles: [office]
startet nur mit --profile office, und in Portainer/Dockge/Komodo gibt es
diesen Schalter gar nicht.
COMPOSE_PROFILES=office in der .env wirkt genauso und braucht keine
Kommandozeile – Compose liest die Variable fuer sich selbst. Gemessen mit
den echten Dateien: ohne die Zeile 'app postgres', mit ihr
'app office postgres'.
Steht jetzt in beiden .env.example, beiden Compose-Kopfzeilen, README und
TESTING.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Die README-Schnipsel fuer OnlyOffice und Euro-Office verlangen
OFFICE_JWT_SECRET, in den Beispieldateien stand es nicht – Compose warnt
dann nur 'variable is not set' und der Dokumentenserver laeuft mit leerem
Geheimnis.
Dazu praeziser, wo es bei OnlyOffice/Euro-Office nach Aktenlage haken
wuerde: IP-Filter des Integrators und Proof-Key-Signatur. Beides
ungeprueft, aber besser benannt als verschwiegen.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Nachfrage aus der Praxis: printenv zeigt nach dem Escapen ein einzelnes $,
und das sah nach einem zweiten Fehler aus. Es ist das gewuenschte Ergebnis –
angemeldet wird mit dem einfachen $. Dazu der Hinweis, dass einfache
Anfuehrungszeichen dasselbe ohne Verdopplung leisten.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Ein $ im Wert wird von Docker Compose als Variable gelesen und schneidet
ab: Sicher$Passwort2026 kommt als Sicher an (gemessen). Angelegt wird ein
Konto mit einem Passwort, das niemand kennt; die Anmeldung scheitert mit
'invalid credentials', obwohl alles richtig eingetippt ist. Die Datenbank
laeuft dabei weiter, weil Postgres denselben abgeschnittenen Wert bekommt.
Der Start nennt jetzt die Laenge des Passworts (nicht den Wert) und warnt
unter 12 Zeichen mit dem Hinweis auf $$. Ohne diese Zahl war der Fehler
von aussen nicht zu sehen: Compose meldet zwar 'variable is not set', aber
auf stderr beim up, nicht im Container-Log.
Escape-Tabelle in README und beiden .env.example. Ein Backslash hilft
nicht.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Der Port war fest auf 127.0.0.1 gebunden. Richtig, solange ein Reverse
Proxy davorsteht – beim Ausprobieren in einer Testumgebung heißt es aber
ERR_CONNECTION_REFUSED, sobald man über die IP zugreift, und nichts im
Log deutet darauf hin: Der Kernel lehnt ab, bevor die Anwendung etwas
davon sieht.
APP_BIND ist jetzt eine Variable, Vorgabe bleibt 127.0.0.1. Gilt für die
App und für die Office-Container in allen drei README-Schnipseln.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Die beiden .env.example zusammen waren 251 Zeilen für 40 Schlüssel – gut
gemeint, aber niemand liest einen Absatz pro Variable. Jetzt eine Zeile je
Schlüssel (58 + 89), die Begründungen stehen im README unter
'Einstellungen', gebündelt als die sieben Dinge, die nicht beim Start
auffallen, sondern später.
Dabei durch einen echten Start aus den Beispieldateien gefunden:
STORAGE_PATH fehlte, Vorgabe ./data wird im Container zu /app/data, und
der Start endete in 'mkdir /app/data: permission denied'. Das Abbild setzt
STORAGE_PATH und TMP_PATH jetzt selbst – es kennt seine Verzeichnisse
besser als eine Beispieldatei. Eine .env darf weiter überschreiben.
Geprüft: jeder Schlüssel, den die Anwendung liest, steht weiterhin in
deploy/.env.example; eine frische Instanz startet allein aus den beiden
Beispieldateien.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Go-Backend (chi, pgx, golang-migrate) + React/TS-Frontend als PWA.
Enthalten: Auth inkl. OIDC, Dateien mit Versionen und Papierkorb,
Freigaben (Links + intern), WebDAV, Gruppenordner, Admin/Theming,
Volltextsuche mit OCR, eigener PDF-Betrachter und WOPI-Office
(Collabora/OnlyOffice).
Nicht im Repo: deploy/.env (Sitzungsschlüssel, DB- und Admin-Passwort)
sowie alle Daten- und Build-Verzeichnisse – siehe .gitignore.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>