Laravel 12 on the LEMP stack
Acelle 4.1.5 LTS runs on Laravel 12 (released February
2025), which requires PHP 8.2 minimum. Our deployments
standardise on PHP 8.3 for the performance improvements
and stability of that version. Laravel 12 changes the
framework's directory structure compared to earlier
versions and adopts new conventions for service
providers and middleware; our reference deployment
handles these migrations cleanly so you receive a
modern, well-organised codebase.
PHP-FPM tuning for Laravel applications differs from
general PHP application tuning. Laravel's request
lifecycle includes service container resolution,
middleware pipeline execution, and route resolution
through compiled route caches. Our deployment configures
Laravel-specific opcache preloading (the preload script
that loads framework classes into shared memory at
PHP-FPM startup) which materially improves request
latency. opcache.preload, opcache.preload_user, and
memory_consumption all set appropriately.
MySQL configuration follows Laravel ORM patterns:
innodb_buffer_pool_size sized for the working set,
query log enabled for slow query analysis during
tuning, binary logging for point-in-time recovery if
backup is enabled. Laravel's Eloquent ORM generates
predictable query patterns that benefit from standard
MySQL tuning; no exotic configuration required.
Redis as queue backend
Acelle 4.x uses Redis as the default queue backend
rather than database-backed queues. Redis-backed queues
are materially faster (sub-millisecond enqueue/dequeue
versus tens of milliseconds for database queues) and
handle concurrent worker access without contention.
Our deployment configures Redis with persistence
(AOF mode for queue durability across restarts), memory
limits sized to expected queue depth, and connection
pooling between PHP-FPM and Redis.
Acelle's queue jobs include campaign sending dispatch,
bounce processing, FBL parsing, automation flow
execution, and tracking event aggregation. Each job
runs in a worker process; the worker count tunes the
parallelism. Standard configuration: 4 workers on
VPS-2, 8 workers on VPS-3, 16 workers on Iron-E5.
Higher worker counts increase throughput up to the
point where database or delivery layer becomes the
bottleneck.
Supervisor managing worker processes
PHP worker processes need restart on memory pressure,
on application updates, on certain types of errors.
Supervisor manages the worker lifecycle: starts workers
on boot, restarts crashed workers, gracefully restarts
on application code changes, sends signals for clean
shutdown. Without Supervisor, workers must be managed
via systemd or custom scripts; Supervisor is the
Acelle community's preferred pattern.
Our deployment configures Supervisor with one
configuration file per worker pool, autostart enabled
for production deployments, autorestart with
configurable backoff to avoid restart storms on
persistent failures, log rotation for worker output
to prevent disk exhaustion, and signal handling for
clean termination during deploys. The Supervisor
dashboard available via supervisorctl for operational
inspection of running processes.
Distributed deployment patterns
Single-instance Acelle scales to several million
subscribers and 100+ concurrent customer workspaces
on Iron-E5 hardware. Beyond that, distributed
deployment becomes the architecture. Acelle 4.x added
official documentation and tooling for the distributed
pattern: web nodes serving customer dashboards behind
a load balancer, dedicated worker nodes processing
queues, shared Redis cluster as message broker, shared
MySQL or MySQL-compatible cluster (Galera, Vitess) as
data layer.
The distributed deployment is a custom engagement; we
quote separately based on architecture. Common
configurations: 2 web nodes + 4 worker nodes + Redis
cluster + MySQL primary-replica setup, sustained
throughput of 10M+ daily messages and 500+ concurrent
customer workspaces. Pricing for the full deployment
starts at €1,500/month for the infrastructure plus
one-time setup engagement of €2,500-4,000 depending
on architecture complexity.
Backup and version management
Acelle ships with an Upgrade Manager dashboard that
handles version updates: download the new version,
backup the current installation, run database
migrations, switch to new code, verify functionality,
rollback if needed. The official upgrade path is
well-tested across versions; our deployments use it
for routine updates with the Managed addon.
Database backup follows the standard MySQL pattern:
mysqldump for logical backups, Percona XtraBackup for
hot physical backups when database size becomes large.
Application-level backup includes Acelle files,
customer-uploaded assets in storage/app, and Redis
persistence files. Encrypted backups to second
jurisdiction with 30-day retention available via the
Managed addon.