How to Install Acelle Mail on Caddy: Complete Guide
Before you start
Caddy is a useful front end for Acelle Mail when you want simple TLS and a clean PHP-FPM configuration. The main Laravel-specific rule is to expose the application's public directory, not the entire project tree, and to make sure storage/cache directories remain writable to PHP. Caddy handles HTTP and TLS; it does not replace Acelle's scheduler, queue workers, database or sending service.
Important: installation instructions can change between software releases. Use the version bundled with your license and compare the vendor's current requirements before copying commands into production. Where this article uses an adapted Caddy or Docker pattern, it is clearly labeled rather than presented as vendor certification.
What you need
- Linux VPS.
- Caddy.
- PHP-FPM and Acelle-required extensions.
- MySQL/MariaDB.
- Acelle Mail package/license.
- A DNS hostname with ports 80/443 available.
- Cron/worker mechanism and optional Redis where required.
Architecture
Domain → Caddy → PHP-FPM → Acelle public/ → MySQL + queue/Redis → SMTP/SES
Keeping these layers separate makes troubleshooting easier. If the web dashboard works but campaigns do not send, the problem may be in cron, the queue, the delivery server or the provider rather than in the web server. Conversely, a 502 or 500 error normally belongs to the web/PHP layer.
Step-by-step installation
1. Prepare the host
Point the domain to the VPS, update the OS and configure a firewall. Keep MySQL private.
2. Install PHP-FPM
Install the PHP version required by your Acelle release and all required extensions. Confirm PHP-FPM is running.
3. Install MySQL
Create a dedicated database/user and test the connection.
4. Upload Acelle
Extract the application under a directory such as /var/www/acelle. Identify the public directory from the package documentation.
5. Configure Caddy
Use a site block with root pointing at the public directory, php_fastcgi pointing at PHP-FPM and file_server for static files. Caddy's official PHP documentation recommends this combination for modern PHP applications.
6. Configure application permissions
Keep the public directory readable and allow only the required storage/cache paths to be writable. Do not expose .env or other project files through the web root.
7. Enable HTTPS
Caddy will attempt automatic certificate provisioning for a public hostname. Confirm DNS and ports 80/443 first.
8. Run the installer
Complete the Acelle web installer over HTTPS and verify the application URL.
9. Configure workers and cron
Add the version-specific scheduler and worker processes. If you use Supervisor, run it alongside Caddy/PHP rather than trying to make Caddy perform queue work.
10. Test sending
Configure SES/SMTP, run a test campaign and verify that the worker actually processes the queue.
Post-install configuration
Once the installer finishes, resist the temptation to immediately import a large list and launch a campaign. First configure the sending layer, domain authentication, bounce handling and unsubscribe behavior. Your application can be perfectly healthy while the email infrastructure is not ready for production.
1. Configure the sending service
Use a delivery service or MTA that is appropriate for your sending volume and compliance requirements. Record the exact SMTP/API endpoint, credentials, region and encryption settings. Never publish credentials in screenshots, tutorials, public repositories or support tickets.
2. Authenticate the sending domain
Publish the SPF, DKIM and DMARC records required by your chosen delivery service. If the provider gives you DKIM CNAME records, use those exact values. Avoid creating multiple conflicting SPF records. Start DMARC in a monitoring mode when you are still mapping legitimate senders, then tighten the policy once authentication is verified.
3. Configure bounces and complaints
A campaign system should not keep treating permanently failing addresses as healthy subscribers. Configure the application's bounce/complaint workflow and monitor the resulting logs. If your provider exposes feedback-loop events, connect them where the application supports it.
4. Test with a small list
Send a controlled test to addresses you own at more than one mailbox provider. Check authentication results, rendering, unsubscribe behavior, tracking, bounce handling and queue processing. Only after the end-to-end workflow passes should you increase campaign volume.
Common mistakes to avoid
- Installing a PHP version without checking the application's current compatibility requirements.
- Using the database root account inside the application.
- Making the entire application directory world-writable.
- Putting passwords or AWS credentials into a public repository.
- Assuming a successful login means scheduled jobs are working.
- Sending a large campaign before SPF/DKIM/DMARC and bounce handling are verified.
- Treating the application as the email delivery server when it actually relies on an external SMTP/API provider.
- Skipping backups before upgrades.
Troubleshooting
Caddy returns 404
Confirm the root points to the Acelle public directory and that index.php exists there.
Caddy returns 502
Verify PHP-FPM socket/port and permissions.
Laravel route returns 404
Check the php_fastcgi try_files behavior and Caddy routing. Modern Laravel applications normally route non-file requests to public/index.php.
Worker not running
Use Supervisor/systemd or another scheduler; Caddy is not a queue manager.
Certificate not issued
Check DNS and external reachability of ports 80/443.
Security checklist
- Use SSH keys where possible and disable unnecessary remote access.
- Keep the operating system, PHP runtime and application patched.
- Use a dedicated database account.
- Keep MySQL private unless remote access is explicitly required.
- Use HTTPS for the administration interface.
- Protect application configuration and secret files.
- Back up the database and uploaded/application data.
- Test restoring a backup rather than assuming it is usable.
- Monitor disk, RAM, CPU, queue depth and application logs.
When should you choose this installation method?
Caddy is a strong fit for operators who want automatic TLS and a minimal web-server configuration. It is particularly clean for a single VPS. The trade-off is that Caddy does not eliminate the Laravel operational requirements; you still need queue workers, scheduler, database backups and careful application permissions.
Final checklist
- ☐ DNS resolves to the server
- ☐ Supported PHP/runtime is installed
- ☐ Database and dedicated user created
- ☐ Application installer completed
- ☐ Correct file permissions applied
- ☐ HTTPS works
- ☐ Cron/worker jobs execute
- ☐ Sending service connected
- ☐ SPF/DKIM/DMARC verified
- ☐ Bounce/complaint processing tested
- ☐ Unsubscribe tested
- ☐ Backup created and restore plan documented
- ☐ Small end-to-end test campaign completed
Related installation guides
- How to Install Acelle Mail on Ubuntu VPS
- How to Install Acelle Mail on cPanel
- How to Install Acelle Mail on Docker
- Browse all self-hosted email software installation guides
- About Abhishek Sharma
Sources & references
This guide uses the following vendor or platform documentation. Where a deployment method is an adaptation rather than vendor documentation, that distinction is stated in the article.
- AcelleMail official Ubuntu installation guide
- AcelleMail official installation/API guidance
- Caddy official PHP-FPM documentation
- Caddy official HTTPS quick start