Laravel 8+, Horizon 5.x, Redis 6+
Parepare application
- Install and configure Laravel Horizon as instructed in docs
- Make sure you can access the Horizon dashboard like -
http://yourapp.com/horizon
- For now; it should show status as
inactive
on horizon dashbaord
Install redis-server
- Using PPA for latest version
sudo add-apt-repository -y ppa:redislabs/redis
sudo apt-get update
sudo apt-get install -y redis-server
- Test if
redis-server
is working, run
redis-cli
-
Type
ping
and you will recievePONG
in response -
Type
exit
to exit the CLI -
Update your Laravel application
.env
file like this -
QUEUE_CONNECTION=redis
-
Note: you no need to touch other redis configurations, the default host and port should work fine.
-
Configure redis server
-
To make redis-server autostart upon reboot,
-
Edit a file with
sudo nano /etc/redis/redis.conf
-
Find
supervised
section and update its value fromno
tosystemd
-
Save and exit the conf file.
-
Enable the service with this command
sudo systemctl enable --now redis-server
- We are good now.
Install supervisor
sudo apt install supervisor
sudo service supervisor restart
sudo systemctl enable supervisor
Create supervisor config for Horizon
- Supervisor keeps its programs' individual files in
/etc/supervisor/conf.d
- Create a fresh config file for your Laravel application
sudo nano /etc/supervisor/conf.d/laravel-app.conf
- and paste these lines into nano editor
[program:laravel_horizon]
process_name=%(program_name)s_%(process_num)02d
command=php /home/ubuntu/your-project-folder/artisan horizon
autostart=true
autorestart=true
redirect_stderr=true
user=www-data
stdout_logfile=/home/ubuntu/your-project-folder/storage/horizon.log
stdout_logfile_maxbytes=10MB
logfile_backups=14
stopwaitsecs=3600
- You need to update
your-project-folder
path in file above - Make sure your project's
storage
folder is writable bywww-data
(apache) user (same as your web server user) - Save the config file and exit
nano
- Now run these commands one by one -
sudo supervisorctl reread
sudo supervisorctl update
- Check if our horizon process is running
sudo supervisorctl
-
You will see process name with status
RUNNING
, if not; it means you have misconfigured something. -
Access your horizon dashboard at
http://yourapp.com/horizon
, you can see status asactive
on dashboard. -
You can also check horizon status with command
php artisan horizon:status
-
Make sure to run these commands after each new deployment
php artisan horizon:terminate
php artisan horizon:purge
php artisan queue:restart
- If you face any issue, you can restart supervisor service
sudo service supervisor restart
- OR -You can restart specific program
sudo supervisorctl restart laravel_horizon