What this is for#
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 current 2026 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, 30 GB SSD |
Single droplet. Queue uses database driver. Avoid 1 GB / 512 MB shapes — won't fit PHP-FPM + MySQL + Redis. |
| Small (baseline) |
50k - 500k |
2 vCPU, 4 GB RAM, 50 GB SSD |
MySQL on the same host. Redis for queue + cache. 2 supervisor workers. |
| Medium |
500k - 5M |
4 vCPU, 8 GB RAM, 100 GB SSD |
DB on the same host or split to managed. 4 supervisor workers. |
| Large |
5M - 50M |
8 vCPU, 16 GB RAM, 200 GB SSD + separate DB |
DB on its own host (managed RDS / DO Managed DB / self-managed). 4–8 queue workers. Consider 2+ application hosts behind a load balancer with Redis-backed sessions. |
| 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 / Cyber Monday spikes need ~2× headroom — provision against your peak day, not your mean.
Software baseline (any tier)#
Per Acelle's InstallController system-compatibility check (the source-of-truth for what the wizard accepts):
| Component |
Minimum (wizard-enforced) |
Recommended (2026) |
| OS |
Ubuntu 22.04 / Debian 11 / Rocky 8 |
Ubuntu 24.04 LTS |
| PHP |
8.3.0 (wizard hard-fails below) |
PHP 8.3 (8.4 works informally; PHP 9 not yet) |
| MySQL / MariaDB |
MySQL 5.7 / MariaDB 10.3 |
MySQL 8.0 or MariaDB 11.4 LTS |
| Redis |
(optional) |
7.x — strongly recommended for queue + cache |
| Web server |
Apache 2.4 |
Nginx 1.22+ |
| Process manager |
systemd |
Supervisor (worker recovery is cleaner than systemd's restart on busy queues) |
| TLS |
Let's Encrypt |
certbot --nginx with auto-renewal |
Required PHP extensions (all wizard-enforced):
mysqli openssl mbstring pdo tokenizer zip imap sqlite3
gd fileinfo curl xml bcmath intl redis mailparse gmp
The two operators most often forget: php8.3-imap (FBL bounce handler) and php8.3-sqlite3 (internal data store). The wizard's System Check hard-fails on either — see the Ubuntu install Step 2.
Provider comparison (2026 list prices)#
The table uses the Small tier (50k - 500k sends/month) as a like-for-like comparison. All prices are 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 globally for the spec; EU + US datacenters; AMD/Intel mixed |
| Hetzner |
CPX21 |
3 (AMD) |
4 GB |
80 GB |
20 TB |
~$9 |
Best CPU-to-$ ratio; faster than CX22 |
| DigitalOcean |
Premium AMD 2vCPU |
2 (AMD) |
4 GB |
80 GB |
4 TB |
~$28 |
Best ops UX — managed DB, snapshots, Reserved IPs, monitoring all built-in |
| Linode |
Shared 4GB |
2 |
4 GB |
80 GB |
4 TB |
~$24 |
Slightly cheaper than DO, slightly less polished UI; Akamai-owned |
| Vultr |
High-Frequency 2vCPU |
2 |
4 GB |
64 GB |
3 TB |
~$24 |
Strong CPU benchmark; better routes to Asia than DO |
| AWS EC2 |
t3.medium + 50 GB gp3 |
2 |
4 GB |
50 GB |
100 GB free, then $0.09/GB |
~$32 on-demand / ~$20 RI |
Most flexible; egress costs add up unless sending via SES in-region |
| AWS Lightsail |
$20 plan |
2 |
4 GB |
80 GB |
4 TB |
~$20 |
EC2 with the bill-predictability of DO; outgrown at Medium tier |
Top picks per use case:
- Side-project / hobby (< 50k/month): Hetzner CX22 (~$5/mo) — best price-performance globally.
- Production small business (50k - 500k/month): Hetzner CPX21 (
$9) for cost, DigitalOcean Premium AMD ($28) 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 and can leverage SES in-region.
- AWS-native shops: EC2 t3.medium (or m6i.large at Medium tier) + Reserved Instance + SES in-region — see the AWS EC2 install guide for the full cost breakdown.
- Container-first teams: any of the above + the Docker deployment guide.
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 – $32 |
| 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 – $117 |
Compare to Mailchimp's Standard tier at the same scale: $35-$185/month for 10k-100k contacts (not sends — Mailchimp's pricing is contact-tier, not send-volume). At 500k sends/month against a 50k contact list, AcelleMail's TCO is ~5× cheaper — and the gap widens as your list grows, since AcelleMail's price is flat in contacts.
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. See Automated Database Backups.
- OS patching.
unattended-upgrades for security; manual review of major upgrades. On Rocky, see the dnf-automatic FAQ.
- TLS renewal. certbot auto-renew, but verify with a calendar reminder twice a year.
- 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.
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 than a $5 droplet.
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.
Sizing rules of thumb#
If your workload doesn't fit neatly into a tier:
- RAM = 2 × (peak concurrent queue workers) + 1 GB for MySQL + 256 MB for Redis + 512 MB OS overhead. Each worker peaks ~256-512 MB on heavy campaigns.
- vCPU = 1 + (queue workers / 2). Workers are mostly I/O-bound (sending API calls), so they share well.
- Disk = 20 GB OS + (subscriber count / 1k) MB for DB + 1 GB/month log retention + 5 GB image headroom. A 100k-subscriber list with 12 months of logs needs ~50 GB.
- Egress = (avg email size in KB) × (sends/month) / 1024 / 1024 GB. A 50 KB email × 500k sends = 25 GB/month. Free on Hetzner + DO; charged on AWS unless you use SES in-region.
If RAM is the bottleneck, memory-limit per FPM child in /etc/php/8.3/fpm/pool.d/www.conf is what to tune — pm.max_children × memory_limit is your worst-case FPM RAM.
Choosing between Ubuntu / Debian / Rocky#
Per the install guides:
- Ubuntu 24.04 LTS — the canonical recommendation. Best documentation, most copy-paste-friendly. Pick this unless you have a reason to pick something else.
- Debian 12 (Bookworm) — slightly lighter weight, longer security cycle (Freexian ELTS through 2033). Use if you're already a Debian shop or want minimal pre-installed surprises. See the Debian install guide.
- Rocky Linux 9 — required if your operations policy is RHEL-family. Same setup applies to AlmaLinux 9 and CentOS Stream 9. Has SELinux configuration overhead — see the Rocky install guide.
Common issues#
| What you see |
Likely cause |
Fix |
Wizard System Check red on IMAP or SQLite3 |
Forgot php8.3-imap / php8.3-sqlite3 |
sudo apt install -y php8.3-imap php8.3-sqlite3 && sudo systemctl restart php8.3-fpm |
| MySQL choked at 100k subscribers |
Hobby tier (2 GB RAM) too small |
Bump to Small tier (4 GB) and tune innodb_buffer_pool_size = 1G |
| Queue worker OOM-killed during big campaign |
memory_limit too low for send-campaign job |
memory_limit = 512M in /etc/php/8.3/fpm/php.ini AND in /etc/php/8.3/cli/php.ini (workers use CLI) |
| Disk full after 6 months |
Logs + failed_jobs table runaway |
Add find /var/www/acellemail/storage/logs -name "*.log" -mtime +14 -delete to cron; php artisan queue:flush failed jobs |
| Sends slow on a 1 vCPU droplet |
CPU starvation under burst |
Move to 2 vCPU; worker count = floor(vCPU × 1.5) is a good starting point |
| AWS bill spike after first big campaign |
Egress to a non-AWS sending API |
Use SES in-region (free egress) — see the AWS install Step 7 |
FAQ#
Can I run AcelleMail on shared hosting? Technically yes (cPanel + PHP 8.3+ + 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.
ARM vs x86? AWS Graviton (t4g/m6g), Hetzner ARM (CAX), and Ampere-based offerings all work — they're typically ~20% cheaper. PHP 8.3 + MySQL + Redis all run fine on ARM. Caveat: a small fraction of third-party PHP extensions (especially PECL ones) may need building from source. For a stock AcelleMail install with only the wizard-required extensions, ARM is fine and saves money.
Why MariaDB and not MySQL? Both work; both pass AcelleMail's tests. MariaDB has the cleaner install path on Debian and Rocky (no Oracle repo needed); MySQL is the slightly safer choice if you want maximum compatibility with MySQL-specific tooling. Pick what your team already runs.
Do I need IPv6? Not for AcelleMail itself. Modern receivers (Gmail, Outlook) accept connections from IPv4-only senders without penalty. Adding IPv6 doesn't hurt either, but it's not a deliverability requirement.
Can I share a server with other apps? Technically yes (separate PHP-FPM pools, separate MySQL databases, separate nginx server blocks). Operationally messy — campaign blasts will starve the other apps of CPU, and the other apps' MySQL queries will degrade campaign performance. Better to dedicate the box.
What about Hetzner Cloud vs Hetzner Dedicated? Hetzner Cloud (CX/CPX SKUs) is what's tabulated above — virtual servers, billed monthly, scale up/down freely. Hetzner Dedicated (AX/EX SKUs) is bare-metal — same datacenter, single tenant, much more compute per dollar at scale, but month-on/month-off bursting isn't possible. Use Cloud for everything up to Large tier; consider Dedicated at XL tier if you can commit.
Should I co-locate AcelleMail with my main app? No — sending workloads have unpredictable spikes that can starve your main app's resources. Dedicate a small droplet for AcelleMail and a separate larger one for your main app. The $5–$30/month for the AcelleMail droplet is much cheaper than the consequences of a campaign blast taking your main app offline.
Related articles#