munin/.env.example
2026-10-19 10:13:56 +02:00

132 lines
6.1 KiB
Text

# Wissensspeicher — Konfigurationsvorlage
#
# Kopieren und mit eigenen Werten befüllen:
# cp .env.example .env
#
# .env enthält Geheimnisse und steht in .gitignore. Niemals einchecken.
# ── Pflichtangaben ────────────────────────────────────────────────────────────
# Signiert Sitzungs-Cookies und CSRF-Tokens. Mindestens 32 Zeichen.
# openssl rand -hex 32
SESSION_SECRET=
# Zugang des Plattform-Admins: legt Projekte an und löscht sie, kommt an jedes
# Projekt. Mindestens 32 Zeichen.
# openssl rand -hex 24
ADMIN_TOKEN=
# ── Datenbank ─────────────────────────────────────────────────────────────────
# Wo die Daten liegen: "sqlite" (Standard) oder "postgres".
# Siehe AUSBAUSTUFEN.md 4.10.
# DB_DRIVER=sqlite
# Nur bei DB_DRIVER=sqlite: Datenverzeichnis mit der zentralen
# Kontroll-Datenbank (control.db) und dem Ordner workspaces/ mit einer
# SQLite-Datei je Workspace (Abteilung). Wird beim Start angelegt.
DATA_DIR=data
# Nur bei DB_DRIVER=postgres: Verbindung zur Datenbank. Munin legt darin das
# Schema munin_control und je Workspace ein Schema munin_ws_<id> an.
# Für die lokale Entwicklung siehe docker-compose.dev.yml.
# DATABASE_URL=postgres://munin:munin@localhost:5432/munin?sslmode=disable
#
# Im Betrieb: das Passwort nicht in die Adresse schreiben, sondern als
# PGPASSWORD setzen, und TLS verlangen (sslmode=verify-full). Welche Rechte
# der Datenbank-User braucht, steht in BETRIEB.md.
# DATABASE_URL=postgres://munin@db.intern:5432/munin?sslmode=verify-full
# PGPASSWORD=
# ── Server ────────────────────────────────────────────────────────────────────
# Port, auf dem der Server lauscht.
PORT=8080
# ── Sicherheit und Betrieb ────────────────────────────────────────────────────
# Secure-Flag der Cookies: Der Browser schickt sie dann nur über HTTPS.
#
# Ohne Angabe wird automatisch entschieden — bei Zugriff über localhost aus,
# sonst an. Für die lokale Entwicklung ist damit nichts zu tun. Ausdrücklich auf
# true setzen, wenn ein Reverse-Proxy das TLS beendet und intern http spricht.
# COOKIE_SECURE=true
# HSTS-Header senden: weist den Browser an, die Adresse künftig nur noch über
# HTTPS aufzurufen.
#
# NUR einschalten, wenn ein gültiges Zertifikat vorhanden ist — ein Browser, der
# den Header einmal gesehen hat, weigert sich ein Jahr lang, die Seite über http
# zu laden.
# ENABLE_HSTS=true
# Vertrauenswürdige Reverse-Proxys — kommagetrennte IPs und/oder CIDR-Netze.
#
# Nur wenn ein Request von einer dieser Adressen kommt, wird X-Forwarded-For
# ausgewertet, um die echte Client-Adresse zu bestimmen (wichtig für
# Rate-Limiting und Protokoll). Ohne Angabe wird der Header ignoriert — er ist
# frei fälschbar.
# TRUSTED_PROXY=127.0.0.1,10.0.0.0/8
# Höchstgröße eines MCP-Requests in Bytes. Standard: 4194304 (4 MB).
# MAX_API_BODY_BYTES=4194304
# Schreibbudget: wie oft ein Projekt je Stunde über MCP schreiben darf
# (remember und forget). Standard: 1000. Lesen ist nie begrenzt.
#
# Warum es das gibt: Ein gültiger API-Key umgeht die IP-Sperre bewusst — sonst
# würde ein falsch konfigurierter Client alle anderen im selben Büro mitsperren.
# Damit hätte aber ein Agent, der in einer Schleife hängt, überhaupt keine
# Grenze mehr. Diese hier ist sein Netz.
#
# Die Zahl darf großzügig sein: Sie soll eine Schleife stoppen, nicht Arbeit
# rationieren. Einzelne Projekte bekommen bei Bedarf eine eigene Obergrenze
# unter /admin/projects.
#
# 0 schaltet die Begrenzung vollständig ab.
# WRITE_LIMIT_HOURLY=1000
# ── Markdown-Export ───────────────────────────────────────────────────────────
# Zielverzeichnis für den Export. Ohne Angabe ist der Export abgeschaltet.
#
# Der Bestand wird täglich (und auf Knopfdruck) als Markdown-Dateien dorthin
# geschrieben — ein Ordner je Projekt. Gedacht als Sicherung, die sich in ein
# Git-Repository legen lässt und auch ohne dieses Programm lesbar bleibt.
#
# Ein Lauf ohne inhaltliche Änderungen fasst keine Datei an und erzeugt damit
# auch keinen Git-Diff.
# EXPORT_DIR=data/export
# ── Sicherung (nur für die Skripte) ───────────────────────────────────────────
# Diese Werte liest nicht der Server, sondern scripts/backup.sh und
# scripts/sicherung-pruefen.sh — und zwar aus der Umgebung, nicht aus dieser
# Datei. Im Cronjob also mitgeben oder vorher die .env einlesen. Die Skripte
# nutzen außerdem DB_DRIVER, DATA_DIR und DATABASE_URL von oben.
# Einzelheiten stehen im Kopf der Skripte und in BETRIEB.md.
# Wohin die Sicherungen geschrieben werden. Standard: backups
# BACKUP_DIR=/srv/backups
# Sicherungen, die älter als so viele Tage sind, werden gelöscht. Ohne Angabe
# bleibt jede liegen.
# RETENTION_DAYS=14
# Nur PostgreSQL: eine leere Datenbank, in die die Probe der Sicherung
# zurückspielt. Niemals die Produktivdatenbank eintragen.
# PROBE_DATABASE_URL=postgres://munin@db.intern:5432/munin_probe
# Nur PostgreSQL: andere Aufrufe für die Werkzeuge, z.B. aus dem Container,
# wenn sie auf dem Sicherungsrechner fehlen. Den Namen des Containers anpassen
# (die lokale Entwicklungsumgebung heißt go-wiki-postgres-1).
# PSQL="docker exec -i munin-postgres psql"
# PG_DUMP="docker exec -i munin-postgres pg_dump"
# PG_RESTORE="docker exec -i munin-postgres pg_restore"
# Für die Probe: das Munin-Programm, mit dem sie die Sicherung öffnet. Ohne
# Angabe baut das Skript es selbst, dafür braucht es Go.
# MUNIN_BIN=/srv/munin/munin
# Port, auf dem Munin während der Probe kurz läuft. Standard: 18080
# PROBE_PORT=18080