Skip to content

Instantly share code, notes, and snippets.

@adityadees
Forked from ankurk91/laravel_horizon.md
Created May 9, 2024 14:05
Show Gist options
  • Save adityadees/1d7ad92cf998adf47a804693d855e12b to your computer and use it in GitHub Desktop.
Save adityadees/1d7ad92cf998adf47a804693d855e12b to your computer and use it in GitHub Desktop.
Laravel Horizon, redis-server, supervisord on Ubuntu server

Laravel Horizon, redis-server, supervisord on Ubuntu 20/22 server

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 recieve PONG 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 from no to systemd

  • 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 by www-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 as active 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

Resources

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment