Back openDesk Edu for a sovereign, open-source education â every vote counts.
Vote nowSave products you love by clicking the heart icon.
Eine praktische Anleitung zum Deployment von SOGo 6 (dem kompletten Neubau der SOGo-Groupware-Suite) mit 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.