Plattform

Selbsthosting

Dasselbe Image läuft auf Ihrem Host oder auf unserem. Diese Seite ist die Sicht des Betreibers: was zu setzen ist, was davor gehört und wie es weiterläuft, ohne dass etwas das Gebäude verlässt.

Aufbau

  • Ein Python-Prozess betreibt den Chat-Listener, den Scheduler und die API mit dem Dashboard in einer einzigen Ereignisschleife.
  • Der Container lauscht nur auf der Loopback-Schnittstelle; ein Reverse-Proxy (Nginx oder Caddy) terminiert TLS und leitet an ihn weiter.
  • Der Zustand liegt in einem Datenverzeichnis: die SQLite-Datenbank, Uploads, GeoIP-Daten, erzeugte Schlüssel und Modellgewichte. Richten Sie DATABASE_URL für Deployments über mehrere Hosts auf Postgres; der additive Migrationssatz funktioniert auf beiden.
  • Der Chat-Server (Synapse oder ein anderer Matrix-Homeserver) kann überall erreichbar sein.

Umgebung

MATRIX_HOMESERVER, MATRIX_USER_ID, MATRIX_ACCESS_TOKENdas Bot-Konto
MATRIX_STANDUP_ROOM_IDder Standard-Standup-Raum
MATRIX_ADMIN_TOKENHomeserver-Admin-Token für Bereitstellung und Abfragen; nur in der Umgebung, nie persistiert
SECRET_KEYeine zufällige Zeichenfolge mit 64+ Zeichen, die Dashboard-Sitzungen signiert
DATABASE_URLstandardmäßig sqlite oder eine Postgres-URL
BOOTSTRAP_ADMIN_MATRIX_IDder erste Admin, beim Start befördert
AI_PROVIDER und der Anbieterschlüsselsiehe KI-Anbieter
INTEGRATION_VAULT_KEYder Schlüssel, der gespeicherte Integrationszugangsdaten verschlüsselt
TZ, MAX_BODY_BYTES, AI_REASONING_MODELoptional

Reverse-Proxy

  • Leiten Sie X-Forwarded-For und X-Forwarded-Proto weiter; ohne Letzteres kann das Produkt HTTP nicht von HTTPS unterscheiden und lässt den HSTS-Header weg.
  • Aktivieren Sie Kompression für weitergeleitete Antworten und HTTP/2; das Dashboard lädt bei einem Kaltstart Dutzende Assets.
  • Komprimieren oder puffern Sie nie den Ereignisstrom-Endpunkt; Live-Updates sind Server-Sent Events.
  • Ratenbegrenzung je IP ist Aufgabe des Proxys; das Produkt begrenzt Code-Anfragen und Anmeldungen selbst.
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
gzip_proxied any;
http2 on;

Sicherheitsheader und Grenzen

Jede Antwort trägt nosniff, eine Frame-Verweigerung, eine No-Referrer-Richtlinie, eine restriktive Permissions-Policy, ein zweijähriges HSTS bei TLS und eine Content-Security-Policy. Anfragekörper sind standardmäßig auf 5 MiB begrenzt. Jede Eingabe wird per Schema validiert, bevor ein Handler läuft; Chat-IDs werden vor jedem Homeserver-Aufruf per Regex geprüft; ausgehendes HTTP ist auf den Homeserver und den konfigurierten Anbieter-Host festgelegt.

Betrieb

  • Upgrade: Pull, Rebuild, Neustart. Migrationen laufen beim Start und überspringen, was bereits existiert.
  • Sichern Sie das Datenverzeichnis nächtlich; für Postgres verwenden Sie pg_dump.
  • Gesundheit: ein schneller, nicht authentifizierter Liveness-Endpunkt für die Containerprüfung und ein Admin-gesperrter detaillierter mit Betriebszeit, Datenbankgröße und Anbieterstatus.
  • GeoIP: Führen Sie das Aktualisierungsskript wöchentlich aus (schlüsselloses db-ip Lite oder MaxMind mit kostenlosem Schlüssel); eine Kopie im Datenvolume wird beim Neustart ohne Konfiguration übernommen.
  • Der Scheduler betreibt den Arbeitstag: Präsenzabfragen alle fünf Minuten, Abwesenheitsprüfungen alle fünfzehn, nächtliche Zusammenfassungen und Bewertungsmaterialisierung, Zusammenfassungen und Berichte in ihren Kadenzen.
docker compose up -d --build
docker exec inroots sqlite3 /app/data/standup.db ".backup /tmp/backup.db"
GEO_DATA_DIR=/app/data/geo scripts/update_geoip.sh

Abgeschottet

Mit einem selbst gehosteten Matrix-Server, Ollama als Anbieter, einer lokalen IP-Datenbank auf dem Host, ausgeschalteten gesprochenen Antworten und ohne aktivierte Integrationen benötigt das Produkt überhaupt kein Internet. Es gibt keine Telemetrie, kein Nutzungssignal und keinen nach außen meldenden Crash-Reporter; kein Byte verlässt das System, sofern Sie kein Ziel konfigurieren.