Mailcow vs Stalwart vs Mailu at 10,000 Mailboxes: What Holds Up in Production
Описание и применение
Stalwart был выбран для миграции 10 000 почтовых ящиков университета благодаря поддержке JMAP, внешнему хранилищу PostgreSQL и MinIO, а также возможностям кластеризации. Конфигурация изменилась в версии 0.16, поэтому необходимо использовать JSON‑файл и базу данных для настроек.
Задача
Migrating a university email system to 10,000 mailboxes while ensuring high availability, scalability, and manageable administration.
Результат
Stalwart provided a scalable, cluster‑ready mail solution that met the university’s 10,000‑mailbox requirement, with external PostgreSQL and MinIO storage, JMAP support, and manageable administration via web UI and API.
Рабочий процесс
- 1. Evaluate each candidate based on documentation and production experience.
- 2. Choose Stalwart for its Rust binary, JMAP support, and clustering model.
- 3. Configure PostgreSQL for metadata and MinIO for message blobs.
- 4. Replace the old config.toml with a datastore JSON file and use the web admin/API for settings.
- 5. Set up NATS for inter‑node coordination and HAProxy as a front‑end.
- 6. Create a shared PostgreSQL replica and MinIO distributed mode for redundancy.
- 7. Import accounts from LDAP/AD and migrate mail with imapsync, calendars and contacts with a custom script.
- 8. Apply per‑user send‑rate limits via webmail layer and reverse proxy.
- 9. Test failover by shutting down a node and verifying continuity.
- 10. Monitor performance and adjust resources as needed.
Доказательства
We run Stalwart for a university with 10,000 mailboxes
Stalwart is a single binary written in Rust that speaks every mail and groupware protocol itself
We keep metadata and settings in PostgreSQL and message blobs in S3-compatible object storage (MinIO)
Version 0.16 changed the configuration model. There's no big config.toml anymore
We wanted a server‑side send rate limit per user, so a compromised account talking raw SMTP couldn't blast out mail
- Дата записи: 2026-10-08T13:40:54.029Z