What this is for#
A 4-minute version of "spin up an AcelleMail droplet on DigitalOcean" — the minimum decisions you need to make, plus the three gotchas that bite every new sender.
👉 For the full DigitalOcean-specific guide (Cloud Firewall rules, Reserved IP, Monitoring alerts, common-issues table): Install AcelleMail on a DigitalOcean Droplet.
👉 For the OS-level install (PHP, MySQL, nginx, certbot, supervisor, web wizard): Install AcelleMail on Ubuntu 24.04 LTS.
The 4 decisions#
| Decision |
Recommended |
| Droplet shape |
Premium AMD, 2 vCPU / 4 GB / 80 GB SSD (~$28/mo). Skip Basic — 1 vCPU + 512 MB doesn't fit PHP-FPM + MySQL + Redis. |
| Image |
Ubuntu 24.04 (LTS) x64. Maintained until April 2029. |
| Region |
Closest to your subscribers (latency is minor for email, but matters for the admin UI). Pick the right country if you have GDPR data-residency needs. |
| Droplet Name |
The exact mail FQDN, e.g. mail.example.com — this is what DigitalOcean uses to set your PTR record. See Gotcha #1. |
CLI version, if you prefer:
doctl compute droplet create mail.example.com \
--image ubuntu-24-04-x64 \
--size s-2vcpu-4gb-amd \
--region sgp1 \
--ssh-keys "$(doctl compute ssh-key list --format ID --no-header | tr '\n' ',' | sed 's/,$//')" \
--enable-monitoring \
--wait
The 3 gotchas#
Gotcha 1 — Droplet name = PTR record#
DigitalOcean auto-generates the PTR (reverse-DNS) record for your droplet's primary IPv4 from the droplet's name field (not the in-OS hostname). If you name the droplet acellemail-prod-1, your PTR is acellemail-prod-1 — and Gmail / Outlook will treat your sends as suspect because PTR ≠ HELO hostname.
Fix: name the droplet mail.example.com (the FQDN you'll HELO with). Verify after creation:
dig +short -x <droplet-ip>
# Expect: mail.example.com.
If you got it wrong, Console → Droplet → ... → Rename → wait 5 min → re-check.
Gotcha 2 — Outbound port 25 is blocked by default#
DigitalOcean blocks outbound port 25 on every new account. If you try to send mail directly via your droplet (e.g. AcelleMail → Gmail's MX directly), it'll silently time out.
Two options:
- Route through a relay (recommended) — Amazon SES, SendGrid, Mailgun, etc. They use ports 587/465 which DO doesn't block. Better deliverability story anyway.
- Ask DO support to unblock port 25 — open a ticket. Approval usually within 24h for accounts in good standing.
Gotcha 3 — localhost vs 127.0.0.1 for MySQL#
In your AcelleMail .env, use DB_HOST=127.0.0.1, not DB_HOST=localhost. The localhost literal makes PHP's MySQL driver prefer Unix sockets, which can mismatch with how MySQL is bound — you'll see intermittent "Connection refused" from queue workers. Using the IP forces TCP, which is what's actually configured.
After droplet creation#
- SSH in, create a non-root sudo user, disable root + password SSH.
- Create a DigitalOcean Cloud Firewall — inbound 22 (your IP only), 80, 443, 587, 465. Outbound: all. (Full firewall reference in the canonical DO guide.)
- Follow the canonical Ubuntu install from Step 1: Install AcelleMail on Ubuntu 24.04 LTS.
Total time, droplet creation to working admin login: ~30 minutes if you've done it before, ~60 if it's your first time.
Related articles#