Vier Schlüssel darin steuerten den mitgelieferten Collabora-Container statt Aether: OFFICE_ALIASGROUP, OFFICE_SSL, OFFICE_SSL_TERMINATION, OFFICE_PORT. Wer Office selbst betreibt, richtet das in dessen eigener Compose-Datei ein – in einer Vorlage für den Betrieb der Anwendung haben sie nichts zu suchen. Sie stehen jetzt kommentiert in build/docker-compose.yml, wo sie wirken; die Erklärung zu aliasgroup1 (regulärer Ausdruck, Punkte maskieren, Port anhängen) ist dorthin mitgewandert. Die Rückfallwerte im Compose gab es schon, ein frischer Aufbau ohne diese vier läuft also weiter. Meilisearch ist als "noch nicht gebaut" gekennzeichnet, statt einen Schalter vorzutäuschen: Kein Go-Code liest die beiden Werte, gesucht wird mit der Volltextsuche von Postgres. Der Rest bleibt ausführlich – die Vorlage ist auch die Übersicht, was möglich ist. Gegengeprüft: Beide Compose-Dateien lösen mit der gekürzten Vorlage als einziger .env sauber auf; Collabora bekommt aus den Rückfällen aliasgroup1=http://app:8080 und ssl.enable=false. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
156 lines
8.7 KiB
Bash
156 lines
8.7 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. 127.0.0.1 = nur dieser Rechner (Vorgabe, davor
|
||
# gehört der Proxy). 0.0.0.0 = das ganze Netz – dann unverschlüsselt.
|
||
APP_BIND=127.0.0.1
|
||
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
|
||
|
||
# ══ 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, auch wenn ein Office-Container läuft.
|
||
# Compose-Schnipsel für Collabora, OnlyOffice und Euro-Office: README.md
|
||
# collabora | onlyoffice (auch Euro-Office)
|
||
OFFICE_PROVIDER=
|
||
|
||
# Drei Adressen für drei Richtungen – die häufigste Fehlerquelle.
|
||
#
|
||
# Backend → Office. Port je nach Anbieter:
|
||
# Collabora http://office:9980
|
||
# OnlyOffice/Euro-Office http://office
|
||
OFFICE_URL=http://office:9980
|
||
# Browser → Office. Deine Domain oder LAN-IP, nicht der Compose-Name.
|
||
OFFICE_PUBLIC_URL=https://office.example.com
|
||
# Office → Aether.
|
||
#
|
||
# **Bei Collabora die öffentliche Adresse der Cloud**, nicht app:8080: Aus
|
||
# diesem Wert baut Collabora sein frame-ancestors, und der Browser darf den
|
||
# Rahmen sonst nicht zeigen ("Framing … violates 'frame-ancestors …'").
|
||
# Collabora holt die Datei dann über deinen Reverse Proxy.
|
||
OFFICE_WOPI_URL=https://cloud.example.com
|
||
# Gegen SSRF: was das Backend anfragen darf. Der Host aus OFFICE_URL zählt
|
||
# immer dazu.
|
||
OFFICE_ALLOWED_HOSTS=office
|
||
# Nur OnlyOffice/Euro-Office, mind. 32 Zeichen: openssl rand -hex 32
|
||
# Muss mit JWT_SECRET des Office-Containers übereinstimmen. Ohne ihn schlägt
|
||
# das Wandeln nach PDF fehl (der Server antwortet `{"error":-8}`). Für den
|
||
# WOPI-Weg wird er nicht gebraucht, der hat eigene Token.
|
||
OFFICE_JWT_SECRET=
|
||
OFFICE_INSECURE_TLS=false # nur für Tests mit selbstsigniertem Zertifikat
|
||
|
||
# ══ 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
|
||
|
||
# ══ App-Umschalter (optional) ═════════════════════════════════════════════════
|
||
# Andere selbst gehostete Apps im Menü der Seitenleiste.
|
||
# EXTERNAL_APPS=InkNote|https://notes.example.com|📝
|
||
|
||
# ══ 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=
|
||
# Ausweis, mit dem sich die Leiste die App-Liste holt. Muss zu HONEYOS_APPS_KEY
|
||
# drüben passen. Nur nötig, wenn HoneyOS auf einer anderen Site liegt als
|
||
# Aether – dann schickt der Browser die HoneyOS-Sitzung nicht mit.
|
||
HONEYBAR_KEY=
|
||
|
||
# ══ 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.
|