The right server for AcelleMail is dictated by send volume, not subscriber count. A list of 5 million subscribers that you mail once a month needs less compute than a list of 100,000 you mail daily. This article gives concrete specs at four volume tiers, a provider comparison, and the operational considerations that determine your real cost.
Pick a tier from your monthly send volume#
| Tier |
Monthly sends |
Recommended specs |
Notes |
| Hobby |
< 50k |
1 vCPU, 2 GB RAM, 20 GB SSD |
Single droplet. SQLite OK if < 10k subscribers. |
| Small |
50k - 500k |
2 vCPU, 4 GB RAM, 50 GB SSD |
MySQL on same host. Redis for queue. |
| Medium |
500k - 5M |
4 vCPU, 8 GB RAM, 100 GB SSD |
DB on the same host or split. 2 queue workers. |
| Large |
5M - 50M |
8 vCPU, 16 GB RAM, 200 GB SSD + separate DB |
DB on its own host (managed RDS or self-managed). 4-8 queue workers. Consider 2+ application hosts behind LB. |
| XL |
50M+ |
Custom — multi-host, dedicated DB cluster, Redis cluster, separate sending-cluster MTAs |
Talk to AcelleMail support; this tier is rare and bespoke. |
These figures assume 30-day rolling average. Black Friday spikes need ~2× headroom.
Software baseline (any tier)#
| Component |
Minimum |
Recommended (2026) |
| OS |
Ubuntu 20.04 / Debian 11 / Rocky 8 |
Ubuntu 24.04 LTS |
| PHP |
8.1 |
8.3 (8.4 should also work; PHP 9 not yet) |
| MySQL / MariaDB |
MySQL 5.7 / MariaDB 10.3 |
MySQL 8.0 or MariaDB 11 |
| Redis |
(optional) |
7.x — strongly recommended for queue + cache |
| Web server |
Apache 2.4 |
Nginx 1.24+ |
| Process manager |
systemd |
Supervisor (worker recovery cleaner than systemd's restart on busy queues) |
| TLS |
Let's Encrypt |
certbot --nginx with auto-renewal |
Provider comparison#
The 4-tier table below uses the Small tier (50k - 500k sends/month) as a like-for-like comparison. All prices are 2026 list prices, USD/month, before any committed-spend discount. Adjust by tier (~2× per step up).
| Provider |
Plan |
vCPU |
RAM |
SSD |
Egress |
$/mo |
Notes |
| Hetzner |
CX22 |
2 |
4 GB |
40 GB |
20 TB |
$5 |
Cheapest in EU, no AMD/Intel choice |
| Hetzner |
CPX21 |
3 (AMD) |
4 GB |
80 GB |
20 TB |
$9 |
Better CPU-to-$ ratio than CX22 |
| DigitalOcean |
Premium AMD 2vCPU/4GB |
2 (AMD) |
4 GB |
80 GB |
4 TB |
$24 |
Best ops UX (managed DB, snapshots, monitoring) |
| Linode |
Shared 2GB |
1 |
2 GB |
50 GB |
2 TB |
$12 |
Cheaper than DO, slightly worse UX |
| Vultr |
High-Frequency 2vCPU |
2 |
4 GB |
64 GB |
3 TB |
$24 |
Strong CPU benchmark; routes to Asia faster than DO |
| AWS EC2 |
t3.medium + 50 GB gp3 |
2 |
4 GB |
50 GB |
100 GB free, then $0.09/GB |
~$30 + traffic |
Most flexible; egress costs add up; spot pricing 70 % cheaper if you can tolerate interruption |
| AWS Lightsail |
$20 plan |
2 |
4 GB |
80 GB |
4 TB |
$20 |
EC2 with the bill predictability of DO |
Top picks per use case:
- Side-project / hobby (< 50k/month): Hetzner CX11 ($4/mo) — best price-performance globally.
- Production small business (50k - 500k/month): Hetzner CPX21 ($9) for cost, DigitalOcean Premium AMD ($24) for ops quality.
- Production medium business (500k - 5M/month): DigitalOcean managed DB + Premium AMD droplet, ~$80/mo all-in. AWS if you already have AWS infra.
- Sending-server-as-a-service (lots of customers, lots of egress): AWS with reserved instances + S3 for backups.
Cost beyond the server#
The server is rarely the largest line item. The real recurring costs:
| Line item |
Typical $/month at Small tier |
| Server (above) |
$5 - $30 |
| Sending API (Amazon SES at $0.10/1k) |
$5 - $50 (50k - 500k sends) |
| Domain + DNS (Cloudflare free tier OK) |
$0 - $5 |
| Backups (off-site, e.g. BorgBase or Restic to B2) |
$2 - $10 |
| Monitoring (UptimeRobot free, Better Uptime $9, etc.) |
$0 - $20 |
| Subtotal |
$12 - $115 |
Compare to Mailchimp's Standard tier at the same scale: $35-$185/month for 10k-100k contacts (no per-send cost included). At 500k sends/month the AcelleMail TCO is ~5× cheaper — and the gap widens with volume.
Operations cost — the hidden expense#
A self-hosted setup at 500k+ sends/month is not zero-ops. Plan for:
- Backups. Daily DB dump + weekly full filesystem snapshot. Test restore quarterly.
- OS patching.
unattended-upgrades for security; manual review of major upgrades.
- TLS renewal. certbot auto-renew, but verify with a calendar reminder.
- Bounce-handler maintenance. Email log rotation, FBL handler health-check.
- Monitoring. Uptime check on the public site, queue depth, disk space, MySQL slow-query log.
- Incident response. Plan for "site down" + "campaign stuck in sending" runbooks. The KB has a troubleshooting playbook library.
A reasonable estimate is 2-4 hours/month of attention for a Small-tier site once steady state is reached. Compare to Mailchimp's "0 hours, but you pay $185" — the trade-off is real, not theoretical.
When NOT to self-host#
AcelleMail's value proposition assumes you have, or can build, basic Linux operations skill. If you don't and can't, choose a SaaS:
- You don't have anyone who can SSH into a Linux box.
- You can't write or read a
crontab line.
- You have hard SOC 2 / HIPAA compliance requirements and no time to assemble the controls (AcelleMail can be made compliant, but the work is yours).
- Your sending pattern is peaky (zero for 25 days, blast on day 30) — SaaS handles bursts better.
For everyone else — agencies, SaaS founders, e-commerce stores, newsletter publishers, regulated-industry teams who want their data on-prem — AcelleMail's TCO and control wins.
Related reading#
FAQ#
Can I run AcelleMail on shared hosting?#
Technically yes (cPanel + PHP 8.1+ + MySQL is enough), realistically no — the queue worker needs a long-running process and the cron needs reliable execution, both of which most shared hosts kill. Use a $5 VPS instead.
Do I need a dedicated IP?#
Only at Medium tier and above (500k+ sends/month). Below that, shared IPs from your sending API (SES, SendGrid) deliver better — they have established reputation that you'd have to warm from scratch on a dedicated IP.
Where should I put the database?#
Same host as AcelleMail at Small tier. Split to a managed DB (DigitalOcean Managed MySQL, AWS RDS, etc.) at Medium+ for backup + failover. Don't co-locate Redis with MySQL on the same disk — IO contention will hurt both.
What about Docker / Kubernetes?#
Docker works fine for AcelleMail and there's a Docker deployment guide in this KB. Kubernetes is overkill until you're at XL tier with multiple application hosts; even then, a 2-host setup with HAProxy is simpler.
Sample 12-month cost projections#
The numbers above are list prices; the question is what they actually total over a year of operation. Three common scenarios:
Scenario A — solo founder, growth from 5k to 80k contacts.
- Months 1-3: Hetzner CX22 ($5) + SES ($1) + domain ($1) = $7/month.
- Months 4-9: Hetzner CPX21 ($9) + SES ($5-15) + domain ($1) = $15-25/month.
- Months 10-12: same hardware, list grew = $20-30/month.
- 12-month total: ~$200-250. Same year on Mailchimp Standard: $1,000-1,800.
Scenario B — agency hosting 30 client lists totaling 250k contacts.
- DigitalOcean Premium AMD 4vCPU/8GB ($48) + DO Managed MySQL ($15) + Backups ($10) + SES ($30) + domain ($1) = $104/month.
- 12-month total: ~$1,250. Same year on Mailchimp Premium for an agency consolidator: $4,800-7,200.
Scenario C — SaaS company with 1.5M monthly transactional + marketing sends.
- AWS m6i.large 1-yr Reserved ($50) + RDS Multi-AZ ($60) + EBS + snapshots ($15) + SES ($150) + Route 53 ($3) = $278/month.
- 12-month total: ~$3,350. Mailchimp at this scale is impossible (no transactional product); SendGrid Pro Plus ~$1,000/month + still need a CRM ~$500/month → $18,000/year.
The break-even versus SaaS is generally at 50k-100k sends/month. Below that, SaaS hassle-cost wins; above, AcelleMail TCO wins decisively.
Triggers that mean "time to scale up"#
Three signals consistently mean a tier upgrade is overdue (and ignoring them ends in a campaign that hangs or a queue depth that grows unbounded):
- Sustained queue depth > 1,000. Run
php artisan queue:size (or check the AcelleMail dashboard's Queue Status) at peak hour. If the depth doesn't drain to single-digits between campaigns, your worker count + DB throughput is the bottleneck. Add workers first; if CPU/IO redlines, upgrade the tier.
- MySQL
Threads_running > 20 for minutes at a time. Run mysqladmin extended-status | grep -E 'Threads_running|Innodb_row_lock'. Sustained contention means the DB is at capacity — split it to a managed instance or upgrade RAM (so the buffer pool fits the working set).
- Disk usage > 80 %. AcelleMail's
storage/logs/, the bounce log, the campaign-attachment cache, and the database all grow over time. The fix is rotation/archive plus tier upgrade if archive doesn't reclaim enough. The DigitalOcean Spaces offload pattern is the cleanest way to cap local-disk growth.
What "operations cost" actually buys you#
The 2-4 hours/month of attention cited above isn't busywork — it's:
- 5 min/week: scan UptimeRobot dashboard, check disk usage, look at fail2ban ban list.
- 20 min/month: rotate / verify the daily DB dump, eyeball Grafana for any metric drifting outside its band, verify last week's certbot renewal.
- 45 min/quarter: OS package updates (
apt upgrade), AcelleMail patch upgrade if one was released, restore-from-backup test.
- 2-3 hours/year: annual hardening re-audit (run the post-install hardening checklist again), key rotation, certificate renewals you've been deferring.
If you can't carve out this time, or you're not the kind of person who'll do it, a managed-hosting layer (such as paying a freelancer to run the maintenance script monthly) is the right answer rather than skipping it. Skipped maintenance is the #1 cause of "AcelleMail was working last month" tickets.