Vediamo come è possibile fare il restart di php-fpm con capistrano dopo un deploy.
Alcuni si saranno certamente trovati nella necessità di fare il restart di php-fpm dopo aver completato il deploy della propria applicazione con Capistrano.
Infatti, a deploy completato, le nuove modificate non risultano completamemte recepite da php (non parliamo qui delle cause), rendendo necessario un riavvio di php-fpm.
Questo riavvio può essere fatto riavviando, appunto, il servizio direttamente nel server (/etc/init.d/php7.X-fpm restart), ma è necessario effettuare il login via ssh sul server a deploy completato.
L’utilità sarebbe automatizzare, insieme al deploy, anche il riavvio di php-fpm, così da demandare alla procedura di deploy stessa questa attività ed avere, a processo completato, certamente il sito funzionante con le nuove modifiche.
Vediamo quindi come sia possibile demandare a Capistrano il restart di php-fpm, in modo che lo esegua al termine della procedura di deploy.
Passo 1
Dobbiamo creare un task che si occupi del restart di php-fpm.
In lib/capistrano/tasks creiamo in file .rake, io l’ho chiamato restart_php_fpm.rake, e al suo interno scriviamo le istruzioni
namespace :deploy do desc "Restart php-fpm service" task :restart_php_fpm do on roles(:web) do execute :sudo, "/usr/bin/systemctl restart php7.X-fpm.service" puts "fatto" end end end
dove execute definisce il comando e, se volete, puts stampa a video un messaggio.
Passo 2
Dobbiamo inserire il task nella procedura di deploy.
Aggiungiamo in config/deploy/production.rb la chiamata al nostro task
after :deploy, 'deploy:restart_php_fpm'
Nell’esempio sopra a Capistrano viene detto di eseguire il task dopo il deploy con l’istruzione “after :deploy”.
Passo 3
Affinchè Capistrano possa fare il restart di php-fpm è necessario che l’utente che si collega al server abbia i permessi per effettuare il restart perchè è questo utente che, alla prova dei fatti, si occupa di fare il restart del servizio.
Dato che sicuramente non stiamo parlando dell’utente root, dovremo abilitare l’utente che fa il deploy come sudoers, aggiungendolo in /etc/sudoers.d
Supponendo che il nostro utente sia web1, creiamo il file /etc/sudoers.d/web1 con il seguente contenuto
web1 ALL=(ALL) NOPASSWD:/usr/bin/systemctl restart php7.X-fpm.service
Imp. php7.X-fpm va sostituito con la versione corretta di php-fpm.