Laravel Horizon on one VPS: queue discipline for a CMS that sends mail and images

Short answer: aviwebsquad.in runs Horizon on the same VPS as nginx because queue volume is modest—media conversions, mail, and occasional imports—not millions of jobs/hour.

Queues on this stack

Job type Queue Notes
Spatie image conversions default CPU-heavy; timeout > longest conversion
Contact form mail mail isolated so bulk work does not delay
Future: newsletter sends newsletter rate-limited

Supervisor settings (pragmatic)

'production' => [
    'supervisor-1' => [
        'connection' => 'redis',
        'queue' => ['default', 'mail'],
        'balance' => 'auto',
        'maxProcesses' => 3,
        'tries' => 3,
    ],
],

On a 2 vCPU box, maxProcesses: 3 is already aggressive when Vite builds run on deploy.

Horizon auth

Gate viewHorizon restricts dashboard to admin users—never public /horizon.

Monitoring hooks

When I would split workers

Traffic 10× or dedicated newsletter bursts—until then, CI/CD deploy script restarts Horizon after release.

FAQ

Redis on aaPanel?

Installed via panel app store; bind localhost only.

Failed jobs pile up?

horizon:purge after fixing bug; do not silence LongWaitDetected without investigation.

Related: scheduling posts

Published_at scheduling does not use queues—DB time comparison only.

Maintenance note (Sep 2026)

Re-validated internal links and examples against the live aviwebsquad.in CMS after the Hostinger migration; guidance in this article still matches production.