Beim Löschen von convert.go ist Aethers einzige Verwendung des JWT-Schlüssels mitgegangen: signJWT stand dort. Zurück blieb ein Feld auf dem Client, das niemand liest, plus Config-Eintrag und Aufrufparameter – Go meldet ungenutzte Strukturfelder nicht, deshalb lief der Build durch. Eine Einstellung, die nichts mehr tut, ist schlimmer als keine: Wer sie setzt, glaubt, sie wirke. OFFICE_JWT_SECRET bleibt in der .env, wird aber vom **Office-Container** gelesen, nicht von Aether. Geprüft mit Euro-Office: JWT_ENABLED=true und Aether ohne jedes Signieren – der WOPI-Weg läuft. Doku richtiggestellt, nachdem Marc den Compose-Schnipsel angezweifelt hat: - „Euro-Office ist hier nie gelaufen" stimmte nicht mehr. Jetzt steht da, was tatsächlich geprüft ist (Abbild, Start, Discovery, CheckFileInfo, Ausliefern, mobileEdit) und was nicht: PutFile, also das Zurückschreiben. - Der Absatz zu /ConvertService.ashx beschrieb gelöschten Code. - OFFICE_PUBLIC_URL: die Falle benannt, die einen Tag gekostet hat. Stand dort localhost, lief alles am Docker-Rechner und blieb am Telefon schwarz – dort ist localhost das Telefon. Ohne Fehlermeldung. - Zur Portbindung: Die Office-Schnipsel binden auf 0.0.0.0, anders als Aether selbst. Das ist nötig, weil der Browser direkt hin muss – steht jetzt dabei, samt dem sauberen Weg über einen Reverse Proxy. Geprüft: go build/vet sauber, alle 234 Prüfungen der sieben Selbsttest-Suiten grün. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
162 lines
9.3 KiB
Bash
162 lines
9.3 KiB
Bash
# Aether – alle Einstellungen des Betriebs. cp .env.example .env
|
||
#
|
||
# Hier steht, was die ANWENDUNG liest. Nichts davon hängt daran, ob du das
|
||
# fertige Abbild ziehst (docker-compose.example.yml) oder selbst baust
|
||
# (build/docker-compose.yml) – zum Entwickeln: cp .env.example build/.env
|
||
#
|
||
# Was NICHT hier steht: die Schalter des mitgelieferten Collabora-Containers
|
||
# (aliasgroup1, ssl, Port). Die gehören zum Compose, das ihn startet, und
|
||
# stehen kommentiert in build/docker-compose.yml. Wer Office selbst betreibt,
|
||
# richtet sie in dessen eigener Compose-Datei ein.
|
||
#
|
||
# Zwei Fallen beim Bearbeiten:
|
||
# $ im Wert → als $$ schreiben, sonst schneidet Compose ab
|
||
# Kommentar hinter einem LEEREN Wert → der Kommentar wird zum Wert
|
||
# Erklärungen und Fallstricke: README.md, Abschnitt „Einstellungen"
|
||
|
||
# ══ Pflicht ═══════════════════════════════════════════════════════════════════
|
||
|
||
APP_ENV=production # development | production
|
||
# Adresse, unter der der BROWSER die Cloud sieht. Ohne Schrägstrich am Ende.
|
||
# Ein falscher Wert startet klaglos und fällt erst auf, wenn ein Freigabe-Link
|
||
# oder ein OIDC-Rücksprung ins Leere zeigt.
|
||
PUBLIC_URL=https://cloud.example.com
|
||
# openssl rand -hex 32
|
||
SESSION_SECRET=
|
||
|
||
# DB_HOST ist der Dienstname aus dem Compose, nicht localhost.
|
||
DB_HOST=postgres
|
||
DB_PORT=5432
|
||
DB_NAME=aether
|
||
DB_USER=aether
|
||
# Jedes Zeichen erlaubt – nur ein $ muss $$ heißen oder der Wert in
|
||
# 'einfache Anführungszeichen'. Sonst schneidet Compose lautlos ab. (README)
|
||
DB_PASSWORD=
|
||
|
||
# Verzeichnis auf dem Wirt. Nur lesend anfassen – zum Hineinlegen: WebDAV.
|
||
DATA_PATH=/pfad/zu/aether-data
|
||
# `id -u` / `id -g` – sonst gehören die Dateien einem Container-Nutzer.
|
||
APP_UID=1000
|
||
APP_GID=1000
|
||
|
||
# ══ Erster Start ══════════════════════════════════════════════════════════════
|
||
# Legt den Admin an. Danach ADMIN_PASSWORD leeren – das Konto bleibt.
|
||
# Auch hier: ein $ muss $$ heißen (siehe DB_PASSWORD).
|
||
ADMIN_USERNAME=admin
|
||
ADMIN_PASSWORD=
|
||
|
||
# ══ Reverse Proxy ═════════════════════════════════════════════════════════════
|
||
# IPs/CIDRs der Proxys, denen X-Forwarded-For/-Proto geglaubt wird. Steht hier
|
||
# das Falsche, sieht die Anwendung überall die IP des Proxys – Rate-Limit und
|
||
# Audit-Log werden damit wertlos, ohne dass etwas nach Fehler aussieht.
|
||
TRUSTED_PROXIES=172.18.0.1
|
||
# Port auf dem Wirt. Im Container bleibt es 8080.
|
||
APP_PORT=8080
|
||
# Wer den Port erreichen darf.
|
||
# 0.0.0.0 alles, was den Server im Netz erreicht (Vorgabe)
|
||
# 127.0.0.1 nur dieser Rechner – richtig, wenn der Reverse Proxy hier läuft
|
||
# 10.0.0.5 eine bestimmte Adresse, etwa das Ende eines WireGuard-Tunnels
|
||
#
|
||
# Die Vorgabe ist 0.0.0.0, weil der Proxy typischerweise woanders steht und
|
||
# 127.0.0.1 ihn gar nicht erst herankommen ließe. Der Preis: Der Port ist auch
|
||
# aus dem eigenen Netz offen, und TLS endet erst am Proxy – bis dahin liegt die
|
||
# Anmeldung unverschlüsselt im Netz. Wer den Proxy auf demselben Rechner hat,
|
||
# setzt hier 127.0.0.1 und ist besser dran.
|
||
APP_BIND=0.0.0.0
|
||
APP_LISTEN_ADDR=:8080 # im Container; der Proxy leitet hierher
|
||
|
||
# ══ Sitzung ═══════════════════════════════════════════════════════════════════
|
||
# Wie lange eine Anmeldung gilt – **ab der letzten Benutzung**, nicht ab dem
|
||
# Anmelden. Wer die Cloud regelmäßig öffnet, bleibt angemeldet; wer sie so
|
||
# lange nicht anfasst, meldet sich neu an. 2592000 = 30 Tage.
|
||
#
|
||
# Kürzer ist sinnvoll, wenn mehrere Leute denselben Rechner benutzen. Alle
|
||
# Sitzungen sofort beenden: SESSION_SECRET wechseln und neu starten.
|
||
SESSION_MAX_AGE=2592000 # Sekunden
|
||
|
||
# ══ Speicher ══════════════════════════════════════════════════════════════════
|
||
STORAGE_PATH=/data # im Container
|
||
TMP_PATH=/data/tmp
|
||
# Frühere Fassungen je Datei. Greift nur bei eingeschaltetem „Keep versions".
|
||
MAX_VERSIONS_KEPT=5
|
||
|
||
# ══ Volltextsuche (OCR) ═══════════════════════════════════════════════════════
|
||
# Standardmäßig an. Fehlen die Programme im Abbild, schaltet sich der Arbeiter
|
||
# beim Start selbst ab, statt den Start zu verhindern.
|
||
OCR_ENABLED=true
|
||
# Sprachen für Tesseract. Jede zusätzliche kostet Zeit – nimm nur, was vorkommt.
|
||
OCR_LANGUAGES=deu+eng
|
||
# Seiten je Datei; 0 = unbegrenzt. Die Grenze ist Absicht: OCR ist das einzige
|
||
# Stück dieser Anwendung, das ohne Zutun eines Menschen Platz und Rechenzeit
|
||
# verbraucht. Wer regelmäßig lange Scans ablegt, setzt sie herauf.
|
||
OCR_MAX_PAGES=50
|
||
# Abbruch je Datei. Ein Scan, der so lange braucht, wird auch beim vierten
|
||
# Versuch nicht fertig.
|
||
OCR_TIMEOUT=10m
|
||
|
||
# ══ Anmeldung über einen Identitätsanbieter (optional) ════════════════════════
|
||
# Leerer OIDC_ISSUER = aus. Sonst die vollständige ADRESSE des Anbieters,
|
||
# z. B. https://id.example.com – nicht seinen Namen. Falsch gesetzt bricht der
|
||
# Start ab.
|
||
OIDC_ISSUER=
|
||
OIDC_CLIENT_ID=aether
|
||
OIDC_CLIENT_SECRET=
|
||
# Muss EXAKT <PUBLIC_URL>/api/v1/auth/oidc/callback sein.
|
||
OIDC_REDIRECT_URL=https://cloud.example.com/api/v1/auth/oidc/callback
|
||
# Bestehendes Konto gleichen Namens mit der Identität verbinden, statt ein
|
||
# zweites anzulegen. VOR der ersten Anmeldung setzen – danach ist es zu spät.
|
||
# Nur bei einem Anbieter, dem die Namen gehören: Bei freier Registrierung wäre
|
||
# es die Übernahme fremder Konten.
|
||
OIDC_LINK_BY_USERNAME=false
|
||
# Beschriftung des Knopfes auf der Anmeldeseite.
|
||
OIDC_BUTTON_LABEL=Sign in with SSO / OIDC
|
||
|
||
# ══ Office (optional) ═════════════════════════════════════════════════════════
|
||
# Leer = aus. Compose-Schnipsel, Adressen und Fallstricke: README.md.
|
||
# Bei Collabora muss OFFICE_WOPI_URL die öffentliche Adresse der Cloud sein,
|
||
# sonst verweigert der Browser den Rahmen.
|
||
OFFICE_PROVIDER=onlyoffice # collabora | onlyoffice (auch Euro-Office)
|
||
OFFICE_URL=http://office # Backend → Office (Collabora: :9980)
|
||
# Browser → Office. **Muss eine Adresse sein, die der Browser auflösen kann**
|
||
# – deine Domain oder die LAN-IP, niemals "localhost" und nie der interne
|
||
# Dienstname. Sonst lädt der Editor am Rechner mit Docker und bleibt auf jedem
|
||
# anderen Gerät schwarz, ohne Fehlermeldung. Leer = wie OFFICE_URL, und das
|
||
# ist fast immer falsch.
|
||
OFFICE_PUBLIC_URL=
|
||
OFFICE_WOPI_URL=http://app:8080 # Office → Aether
|
||
OFFICE_ALLOWED_HOSTS=office # gegen SSRF
|
||
# Nur für ein Office mit selbstsigniertem Zertifikat im eigenen Netz. Schaltet
|
||
# die Zertifikatsprüfung **ab** – im Internet nichts zu suchen.
|
||
OFFICE_INSECURE_TLS=false
|
||
# Liest **der Office-Container**, nicht Aether: Es schützt seine eigene API.
|
||
# Der WOPI-Weg braucht es nicht, der hat eigene Token. Bei OnlyOffice und
|
||
# Euro-Office mit JWT_ENABLED=true gehört es gesetzt, sonst steht deren API
|
||
# offen. Collabora kennt es nicht. openssl rand -hex 32
|
||
OFFICE_JWT_SECRET=
|
||
|
||
# ══ Volltextsuche (OCR) ═══════════════════════════════════════════════════════
|
||
# Standardmäßig an; fehlen ocrmypdf/tesseract, schaltet es sich selbst ab.
|
||
# OCR_ENABLED=false
|
||
# OCR_LANGUAGES=deu+eng # weitere brauchen ein apk-Paket im Dockerfile
|
||
# OCR_MAX_PAGES=50 # 0 = unbegrenzt; rund 1 Minute je Seite
|
||
# OCR_TIMEOUT=10m # Notbremse je Datei
|
||
|
||
# ══ HoneyOS-Leiste (optional) ═════════════════════════════════════════════════
|
||
# Ursprung, von dem die Leiste geladen wird. Wird an zwei Stellen gebraucht und
|
||
# kommt deshalb aus einer Quelle: die CSP erlaubt ihn (script-src +
|
||
# connect-src), und die Oberfläche lädt das Skript von dort nach.
|
||
# Wirkt beim **Neustart** – kein Neubau nötig.
|
||
# Leer = keine Leiste, und die CSP bleibt so eng wie ohne sie.
|
||
HONEYBAR_ORIGIN=
|
||
|
||
# ══ Später ════════════════════════════════════════════════════════════════════
|
||
# NOCH NICHT GEBAUT – Notiz, kein Schalter. Gesucht wird derzeit mit der
|
||
# Volltextsuche von Postgres; diese beiden Werte liest niemand.
|
||
# MEILISEARCH_URL=http://meilisearch:7700
|
||
# MEILISEARCH_KEY=
|
||
|
||
# ══ WebDAV ════════════════════════════════════════════════════════════════════
|
||
# Läuft unter /dav/, kein Schalter nötig. Der Proxy muss
|
||
# PROPFIND/MKCOL/MOVE/COPY durchreichen. Anmeldung ausschließlich mit
|
||
# App-Passwörtern, nie mit dem Kontopasswort.
|