Running Mailyte on your own server with Docker Compose
The Mailyte team · · 7 min read

The Mailyte community edition is published under AGPL-3.0 and ships the full mail stack — Postfix, Dovecot, spam filtering, the API and the webmail — as a Docker Compose deployment. No seat counting, no usage caps, no feature flag that turns off at ten mailboxes.
What you need before you start
Self-hosting mail is not hard, but it is unforgiving about a few specific things. Get these right first:
- A machine with port 25 open, outbound and inbound. Many cloud providers block outbound 25 by default and will unblock it on request. Check before you build anything.
- A static IP with a PTR record that resolves to the hostname your server announces. Receiving servers check this, and a missing PTR is the most common reason a brand-new mail server's messages are rejected.
- Control of your DNS. You'll be publishing MX, SPF, DKIM and DMARC records.
- An IP with no history. Ask your provider whether the address has been used for mail before. Inherited reputation is real.
The deployment itself
Clone the repository, copy the example environment file, set your domain and hostname, and bring the stack up. The compose file starts the mail transfer agent, the IMAP server, the spam filter, the database, the API and the webmail, wired together.
DKIM keys are generated for you on first run. The records you need to publish are printed by the setup step — publish them before you send anything, not after.
What differs from the hosted version
The core is the same. What Mailyte Cloud adds is the operational work you'd otherwise own:
- Backups, updates and security patches, applied for you.
- Deliverability monitoring — the continuous re-checks that catch a record breaking months after setup.
- Migration tooling, team roles and audit history.
- Somebody else's pager.
Moving between the two
This matters more than either option on its own: because the core is the same, the door swings both ways. Start self-hosted and hand it over when the operational load stops being interesting. Start hosted and take it in-house when your compliance team asks. Neither direction is a rewrite, and neither is a negotiation with us.
That's the point of the licence. Take the source from GitHub.


