Layer 5 · self-hosting reality check
What it actually takes to self-host Mautic
The docs say not stated by the vendor. Its official Docker image gives each PHP process a 512 MB memory limit, Cloudron packages it with a 1 GB limit, and Mautic says not to use shared hosting.. In practice you want 4 GB for a list in the low tens of thousands, 8 GB beyond that. One 4 GB server ran out of memory updating segments at about 50,000 contacts on Mautic 5.. Here is the honest version — real requirements, real monthly cost, what you will be maintaining, and the one thing that catches people out.
Usually reached from Mailchimp alternatives, where Mautic is one of the picks.
Wondering whether you need to at all? Is Mailchimp free? — what the free tier actually allows, and where the wall is.
| RAM — documented minimum | not stated by the vendor. Its official Docker image gives each PHP process a 512 MB memory limit, Cloudron packages it with a 1 GB limit, and Mautic says not to use shared hosting. |
|---|---|
| RAM — what it really needs | 4 GB for a list in the low tens of thousands, 8 GB beyond that. One 4 GB server ran out of memory updating segments at about 50,000 contacts on Mautic 5. |
| CPU | 2–4 vCPU; not stated by the vendor. The load comes from the segment and campaign cron jobs. |
| Disk | MySQL is what grows: every contact, email open and page hit is stored, so tracking data builds up over time. Plan to prune it. Uploaded assets are small next to that. |
| Monthly cost | $12–48/mo on a 4–8 GB VPS, plus an email service: Amazon SES is $0.10 per 1,000 emails |
| Setup time | Half a day with Docker Compose; a weekend to get cron, the worker and the sending domain (SPF/DKIM) right |
| How you install it | The official mautic/mautic Docker image, run in three roles (web, cron and worker) with MySQL or MariaDB. The project advises the Apache variant over FPM for now. Or Composer on a LAMP VPS. |
| Ongoing maintenance | Watch the cron jobs and the email worker, prune tracking data, and plan major upgrades. Mautic 7 (January 2026) raised the minimum to PHP 8.2 and MySQL 8.4 or MariaDB 10.11, and removed in-browser updates. |
| Where it stops scaling | One 8 GB box handles tens of thousands of contacts with batch limits set. A forum report at about 1 million contacts ran an 8 GB app server against a 64 GB, 32-core database server and still slowed down once the database passed about 50 GB. At that size you run separate MySQL servers. |
The thing that catches people out
Mautic does almost nothing by itself. Segments, campaigns and sends all happen in cron jobs you schedule, and the docs ask you to stagger them so they do not run in the same minute. Those jobs run as command-line PHP with their own memory limit. In a 2025 forum report the Docker cron container stayed at 128 MB while the web container had 4 GB, and campaigns:trigger kept crashing. On Mautic 5, segments:update used all of a 4 GB server at about 50,000 contacts. Set memory_limit explicitly for the cron and worker containers, use --batch-limit, and check cron output weekly.
When not to self-host Mautic
You only send a newsletter: Keila or listmonk do that with a fraction of the RAM. Also skip it if nobody will watch the cron jobs and sending reputation every week; HubSpot or Mailchimp do that for you.
Every guide here carries this section. A site that only ever tells you to self-host is selling something — the useful answer is sometimes no.
Other Layer 5 self-hosting guides
- Self-hosting LibreOffice2 GB with a large spreadsheet open
- Self-hosting ONLYOFFICE6 GB for the Document Server with a handful of concurrent editors
- Self-hosting Collabora Online4 GB, and roughly 1 GB per 20 concurrent documents
- Self-hosting CryptPad2 GB for a small instance
- Self-hosting Mattermost4 GB for a team of 50 with PostgreSQL on the same box
- Self-hosting Rocket.Chat6 GB with MongoDB on the same machine
Common questions
- How much RAM does Mautic actually need?
- 4 GB for a list in the low tens of thousands, 8 GB beyond that. One 4 GB server ran out of memory updating segments at about 50,000 contacts on Mautic 5. in practice. The documented minimum is not stated by the vendor. Its official Docker image gives each PHP process a 512 MB memory limit, Cloudron packages it with a 1 GB limit, and Mautic says not to use shared hosting., which is the figure at which the process starts rather than the figure at which it works under real use. 2–4 vCPU; not stated by the vendor. The load comes from the segment and campaign cron jobs. alongside it.
- What does self-hosting Mautic cost per month?
- $12–48/mo on a 4–8 GB VPS, plus an email service: Amazon SES is $0.10 per 1,000 emails This is commodity VPS pricing and excludes your time, which is the larger cost for most people — budget for watch the cron jobs and the email worker, prune tracking data, and plan major upgrades. Mautic 7 (January 2026) raised the minimum to PHP 8.2 and MySQL 8.4 or MariaDB 10.11, and removed in-browser updates.
- How long does it take to set up Mautic?
- Half a day with Docker Compose; a weekend to get cron, the worker and the sending domain (SPF/DKIM) right, via The official mautic/mautic Docker image, run in three roles (web, cron and worker) with MySQL or MariaDB. The project advises the Apache variant over FPM for now. Or Composer on a LAMP VPS..
- When should I NOT self-host Mautic?
- You only send a newsletter: Keila or listmonk do that with a fraction of the RAM. Also skip it if nobody will watch the cron jobs and sending reputation every week; HubSpot or Mailchimp do that for you.
- What is the most common mistake when self-hosting Mautic?
- Mautic does almost nothing by itself. Segments, campaigns and sends all happen in cron jobs you schedule, and the docs ask you to stagger them so they do not run in the same minute. Those jobs run as command-line PHP with their own memory limit. In a 2025 forum report the Docker cron container stayed at 128 MB while the web container had 4 GB, and campaigns:trigger kept crashing. On Mautic 5, segments:update used all of a 4 GB server at about 50,000 contacts. Set memory_limit explicitly for the cron and worker containers, use --batch-limit, and check cron output weekly.