Selbst hosten
Wer niemandem vertrauen möchte, betreibt die Software selbst. Sie läuft als Docker-Compose-Stack mit App, PostgreSQL und optional Caddy für HTTPS.
Voraussetzungen
- Ein Server mit Docker und Docker Compose (ab Version 2.24)
- Eine Domain, die auf den Server zeigt
- Ein SMTP-Zugang für den Mailversand; der Mailserver braucht ein gültiges TLS-Zertifikat, weil die Verbindung geprüft wird
Konfiguration
Kopiere .env.example nach .env und trage Datenbankpasswort, geheimen Schlüssel (mindestens 32 Zeichen), öffentliche URL und SMTP-Zugang ein. Impressum und Datenschutz werden über die LEGAL_*-Variablen befüllt. Für eine öffentlich erreichbare Instanz setze außerdem ADMIN_EMAIL: Dann starten neue Logen im Testmodus und werden erst nach deiner Freigabe für größere Abstimmungen zugelassen.
cp .env.example .env
python3 -c "import secrets;print(secrets.token_urlsafe(32))"
Variante A: Eigenständig mit automatischem HTTPS
Die mitgelieferte Caddy-Konfiguration besorgt und erneuert Zertifikate selbst und schreibt keine Zugriffsprotokolle. Trage SITE_ADDRESS (deine Domain) in der .env ein und starte:
docker compose -f docker-compose.yml -f docker-compose.standalone.yml up -d --build
Variante B: Hinter einem eigenen Reverse-Proxy
Starte nur die Anwendung und lass deinen Proxy (z. B. Nginx Proxy Manager) auf Port 8000 des App-Containers zeigen. Wichtig:
- Aktiviere HTTPS.
- Schließe die Pfade
/v/und/auth/vom Access-Log aus. - Setze
FORWARDED_ALLOW_IPSauf die IP des Proxys, damit Rate-Limits die echte Client-IP sehen. - Port 8000 ist standardmäßig nur auf
127.0.0.1erreichbar. Läuft der Proxy als Container, hänge beide in ein gemeinsames Docker-Netz; sonstAPP_BIND=0.0.0.0setzen und den Port per Firewall auf den Proxy beschränken.
docker compose -f docker-compose.yml up -d --build
Hinweise zum Betrieb
- Betreibe genau einen App-Prozess; Wartungslauf und Rate-Limits liegen im Prozess.
- Sichere das Datenbank-Volume. Stimmen enthalten keine Personenbezüge, Einladungen schon – Backups also wie personenbezogene Daten behandeln.
- Der Container führt beim Start die Datenbank-Migrationen aus.
- Eine Gesundheitsprüfung steht unter
/healthzbereit. - Der Server versendet höchstens eine E-Mail pro Sekunde (
MAIL_MIN_INTERVAL_SECONDS).