# Aether – alle Schalter. cp deploy/.env.example deploy/.env # # 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" # # Für den reinen Betrieb genügt die kürzere .env.example im # Wurzelverzeichnis – hier steht zusätzlich alles Optionale. # ── App ─────────────────────────────────────────────────────────────────────── APP_ENV=production # development | production APP_LISTEN_ADDR=:8080 # im Container; der Proxy leitet hierher PUBLIC_URL=https://cloud.example.com # IPs/CIDRs der Proxys, denen X-Forwarded-For/-Proto geglaubt wird. TRUSTED_PROXIES=172.18.0.1 # ── Datenbank ───────────────────────────────────────────────────────────────── # 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=changeme_strong_password # ── Sitzung ─────────────────────────────────────────────────────────────────── SESSION_SECRET=changeme_generate_with_openssl_rand_hex_32 # openssl rand -hex 32 SESSION_MAX_AGE=86400 # Sekunden # ── Speicher ────────────────────────────────────────────────────────────────── STORAGE_PATH=/data # im Container TMP_PATH=/data/tmp # 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 # Frühere Fassungen je Datei. Greift nur bei eingeschaltetem „Keep versions". MAX_VERSIONS_KEPT=5 # 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). # 0.0.0.0 = das ganze Netz – dann unverschlüsselt. APP_BIND=127.0.0.1 # ── Erster Start ────────────────────────────────────────────────────────────── # Legt den Admin an. Danach ADMIN_PASSWORD leeren. # Auch hier: ein $ muss $$ heißen (siehe DB_PASSWORD). ADMIN_USERNAME=admin ADMIN_PASSWORD=changeme_strong_admin_password # ── OIDC (optional) ─────────────────────────────────────────────────────────── # Leerer OIDC_ISSUER = aus. OIDC_REDIRECT_URL muss exakt # /api/v1/auth/oidc/callback sein und beim Anbieter eingetragen. # OIDC_ISSUER=https://your-idp.example.com # Adresse, nicht der Name # OIDC_CLIENT_ID=aether # OIDC_CLIENT_SECRET= # OIDC_REDIRECT_URL=https://cloud.example.com/api/v1/auth/oidc/callback # Bestehendes Konto verbinden statt ein zweites anzulegen. # VOR der ersten Anmeldung setzen – danach ist es zu spät. # OIDC_LINK_BY_USERNAME=true # Beschriftung des Knopfes auf der Anmeldeseite. # OIDC_BUTTON_LABEL=Anmelden mit PocketID # ── HoneyOS-Leiste ──────────────────────────────────────────────────────────── # 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 Oberflaeche laedt das Skript von dort nach. # # Wirkt beim **Neustart** — kein Neubau noetig. # Leer = keine Leiste, und die CSP bleibt so eng wie ohne sie. HONEYBAR_ORIGIN=https://os.example.com # Ausweis, mit dem sich die Leiste die App-Liste holt. Muss zu HONEYOS_APPS_KEY # drueben passen. Nur noetig, wenn HoneyOS auf einer anderen Site liegt als # Aether — dann schickt der Browser die HoneyOS-Sitzung nicht mit. # # Gleiche Site (os.beispiel.duckdns.org + cloud.beispiel.duckdns.org): kann leer # bleiben, die Sitzung reicht. HONEYBAR_KEY= # ── 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 ──────────────────────────────────────────────────────────── # Andere selbst gehostete Apps im Menü der Seitenleiste. # Format: Name|URL|Emoji – mehrere durch Komma. Leer = kein Menü. EXTERNAL_APPS= # ── Office (optional) ───────────────────────────────────────────────────────── # Leer = aus, auch wenn ein Office-Container läuft. Schnipsel: README.md # collabora | onlyoffice (auch Euro-Office) OFFICE_PROVIDER= # Backend → Office. Collabora lauscht auf 9980, OnlyOffice/Euro-Office auf 80. OFFICE_URL= # Browser → Office; leer = wie OFFICE_URL OFFICE_PUBLIC_URL= # Office → Aether; leer = PUBLIC_URL. # Weder localhost noch der veröffentlichte Port – beides scheitert. OFFICE_WOPI_URL= # Gegen SSRF; der Host aus OFFICE_URL zählt immer dazu. OFFICE_ALLOWED_HOSTS= # Nur OnlyOffice/Euro-Office, mind. 32 Zeichen. OFFICE_JWT_SECRET= OFFICE_INSECURE_TLS=false # nur für Tests mit selbstsigniertem Zertifikat # Nur für den Collabora-Container aus deploy/docker-compose.yml: OFFICE_ALIASGROUP=http://app:8080 OFFICE_SSL=false OFFICE_SSL_TERMINATION=false # true nur, wenn davor wirklich HTTPS endet OFFICE_PORT=9980 # ── Später ──────────────────────────────────────────────────────────────────── # MEILISEARCH_URL=http://meilisearch:7700 # MEILISEARCH_KEY= # ── WebDAV ──────────────────────────────────────────────────────────────────── # Läuft unter /dav/, kein Schalter nötig. Der Proxy muss # PROPFIND/MKCOL/MOVE/COPY durchreichen.