Back openDesk Edu for a sovereign, open-source education — every vote counts.
Vote nowSave products you love by clicking the heart icon.
Ein praxisnaher Leitfaden zur Bereitstellung von SOGo 6 (dem vollständigen Rewrite der SOGo Groupware-Suite) mit dem Stalwart Mail Server und OpenLDAP-Authentifizierung – vollständig containerisiert mit Docker Compose.
TL;DR: SOGo 6 ist ein kompletter Neuaufbau der klassischen SOGo Groupware-Suite, bei dem der GNUstep/Objective-C-Stack durch eine moderne Next.js 16 + Flask/Python 3.14 Architektur ersetzt wurde. Dieser Fork bündelt die Suite mit dem Stalwart Mailserver und OpenLDAP, implementiert jedes wichtige Roadmap-Feature und fügt SSO, MFA, App-Passwörter, Kalender-/Kontaktfreigaben sowie eine CardDAV-Sync-Engine hinzu — alles abgesichert durch >1.800 bestandene Tests.
SOGo ist seit Jahren eine feste Größe in der Self-Hosted-Groupware-Landschaft, aber das GNUstep/Objective-C-Fundament von SOGo 5 machte Erweiterungen, die Containerisierung und die Wartung schwierig. SOGo 6 ist ein kompletter Rewrite, der diese Schwachstellen direkt behebt:
Das Ergebnis ist ein Stack, der sich modern anfühlt, sauber containerisiert werden kann und unkompliziert zu erweitern ist.
Der Stack besteht aus sieben Docker-Services, die via Docker Compose orchestriert werden:
| Service | Rolle |
|---|---|
| SOGo6 UI | Next.js 16 Standalone-Frontend |
| SOGo6 Server | Flask/Python 3.14 REST API |
| PostgreSQL | Primäre Datenbank |
| Redis | Session-Cache, Rate Limiting, Sync-Locking |
| OpenLDAP | Benutzerverzeichnis mit Seed-Daten |
| Stalwart | IMAP/SMTP/Sieve Mailserver |
| NGINX | Reverse Proxy mit TLS-Terminierung |
Alle ursprünglichen Roadmap-Features von SOGo 6 sind vollständig implementiert:
Über die ursprüngliche Roadmap hinaus fügt dieser Fork signifikante Enterprise-Funktionen hinzu:
SSO (OIDC + SAML2) — Vollständige Implementierung als OpenID Connect Relying Party und SAML2 Service Provider. OIDC unterstützt Discovery, Token Exchange, RS256/384/512 und ES256/384/512 Signaturvalidierung sowie RP-initiiertes Logout. SAML2 unterstützt die Generierung von AuthnRequest XML, HTTP-Redirect und HTTP-POST Bindings, SP-Metadaten-Publishing und Auto-Provisioning beim ersten Login.
MFA/TOTP — Zeitbasierte Einmalpasswörter, generiert via pyotp, mit direkt in den Login-Flow integrierten QR-Code-Provisioning-URIs. Die Code-Verifizierung erfolgt innerhalb des bestehenden POST /login Endpunkts anstelle eines separaten Challenge-Flows, was die UX einfach hält.
App-Passwörter — sogo-ap-<64-hex> Tokens mit bcrypt-Hashing, bereitgestellt über einen vollständigen CRUD + Verify API-Endpunkt. Entwickelt für Thunderbird, Outlook und andere Desktop-/Mobile-Clients, die keine interaktive MFA unterstützen.
Passwort-Wiederherstellung — Vollständiger Lebenszyklus mit SHA-256 gehashten Tokens, Rate-Limited Endpunkten und SMTP-Relay via Stalwart. Der Recovery-Flow besteht aus drei Schritten: Prüfung → Re-Authentifizierung → LDAP-Update.
Auth-Hardening — Redis-basierter Brute-Force-Schutz (Tracking pro Benutzerkonto), IP-basiertes Rate Limiting (20 Anfragen/Minute), Security-Header (CSP, HSTS, X-Content-Type-Options, X-Frame-Options, Referrer-Policy, Permissions-Policy) und CORS-Hardening.
Kalenderfreigabe — Datenbankgestützte Share-Tabellen mit einer ACL-Engine, die VIEW-, MODIFY- und DELETE-Berechtigungen unterstützt. Ein Frontend-Share-Dialog ermöglicht es Benutzern, Zugriffe ohne Admin-Eingriff zu verwalten.
Kontaktfreigabe — Ähnliche DB-gestützte Freigaben mit VIEW- und MODIFY-ACLs. Die Freigaben werden sowohl auf API- als auch auf UI-Ebene erzwungen.
CardDAV Sync Engine — Ein SSRF-geschützter HTTPS-Fetcher, der sich mit externen CardDAV-Servern verbindet, vCard Diff-by-UID durchführt und Insert/Update/Delete-Pipelines ausführt. Redis-Locking verhindert gleichzeitige Sync-Konflikte, und der Sync-Status wird über die API bereitgestellt.
Theme-Einstellungen — HSL-Farbschema, Logo-URL und benutzerdefiniertes CSS werden in PostgreSQL gespeichert und über einen Live-Public-CSS-Endpunkt ausgeliefert. Für visuelle Änderungen ist kein erneutes Deployment erforderlich.
Rules CRUD — Sieve-Mailfilterregeln werden in PostgreSQL mit einer vollständigen Admin-CRUD-API gespeichert, wodurch die direkte Manipulation von Sieve-Dateien entfällt.
Observability — Prometheus /metrics Endpunkt (Anzahl der Anfragen, Dauer, Fehler), strukturiertes JSON-Logging und ein erweiterter Health-Endpunkt, der die Konnektivität zu PostgreSQL, LDAP, Redis und Stalwart prüft.
CI/CD — GitHub Actions Pipeline mit Build, Backend-Testsuite, Playwright E2E-Tests (23 Szenarien), k6 Lasttests (3 Suites) und einem CardDAV-Sync-Benchmark.
| Suite | Anzahl | Details |
|---|---|---|
| Backend Python | 1.723 | Modul, Interface, API, E2E, SMTP-Protokoll |
| Frontend Jest | 69 | Admin-Seiten, Benutzereinstellungen, a11y |
| Admin API (bash) | 29 | Alle Admin-CRUD-Endpunkte |
| Playwright E2E | 23 | Auth-Flows, Admin, Navigation, Einstellungen |
| k6 Lasttests | 100% pass | 3 Suites, 0% Fehler, ~25ms p95 |
| Shell-Tests | 129+ | SMTP/IMAP, LDAP, Postgres, Redis, Nginx, Sicherheit, Integration |
| Gesamt | >1.800 |
Der Stack basiert vollständig auf Docker Compose. Ein einziger Setup-Befehl genügt:
git clone https://github.com/tobias-weiss-ai-xr/sogo6-stalwart-openldap-dockerized
cd sogo6-stalwart-openldap-dockerized
bash sogo6/scripts/setup.sh
docker compose up -d
bash sogo6/scripts/init-sogo6.sh
Es werden zwei Umgebungen unterstützt:
docker compose up -d) — Multi-stage Builds, gehärtete Container, TLS-Terminierungdocker compose -f docker-compose.dev.yaml up -d) — Hot-Reloading, MailHog für E-Mail-Tests, pgAdmin, Redis Insight, Prometheus/GrafanaDas ursprüngliche Source-Repository befindet sich unter github.com/tobias-weiss-ai-xr/sogo6-stalwart-openldap-dockerized. Die SOGo-Mailingliste (users@sogo.nu) ist der beste Ort für Community-Diskussionen.
Bereiche, in denen Feedback besonders wertvoll wäre:
Diese Evaluierung und der dazugehörige Fork wurden mit Unterstützung von Mistral AI (Modell Mistral Medium 3.5 128B, aufgerufen über hessian.ai und gehostet an der TU Darmstadt) für die Codegenerierung, das Debugging und die architektonische Beratung entwickelt. Vielen Dank an Mistral AI und hessian.ai.