# 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 16 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_ 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