Richiedi Informazioni

Il deploy automatizzato via GIT su server dedicato

Ogni tanto, i miei clienti mi chiedono di aiutarli ad effettuare deploy di codice via git su server dedicato.

Siccome una buona parte del web gira ancora sullo stack LAMP, il deploy tipo prevede  il download dei loro dati, se va bene via SSH/SCP altrimenti via FTP (sigh!) ed infine il re-upload del tutto sul server destinazione.

Una noia infinita, perchè FTP non è certo granchè veloce, talvolta inaffidabile, e poi vuoi mettere quando qualcuno cancella un file e si dimentica di averlo fatto? Apriti cielo.

Non sarebbe bello poter migliorare la vita dei propri clienti con un sistema che, oltre all’upload dei dati, consenta loro di tenere traccia di chi ha uploadato cosa e, magare, di effettuare dei deploy automatici come si fa per le applicazioni Rails, magari su heroku?

Beh, Il deploy heroku-style via GIT su server dedicato si può fare! E ora ti spiego come.

Innanzitutto hai bisogno di un server dedicato e di un accesso SSH e se il tuo hosting provider non dovesse fornire questa funzionlità, sarò ben felice di poterti aiutare.

Dopodichè hai bisogno di poterti loggare sul tuo server senza dover inserire ogni volta username e password. In gergo hai bisogno di poterti loggare in SSH attraverso lo scambio di una chiave.

Fatto questo devi creare un repository GIT sia sul tuo server che sul computer dove sviluppi il tuo codice. Non ti descrivo dettagliatamente come si fà perchè questo processo è ben documentato (ad esempio) su questo simpatico sito.

deploy git su server dedicato

Una volta che hai impostato le repository GIT sia sul tuo PC che sul server remoto, e quando hai configurato il tuo computer per spedire i dati verso il server remoto attraverso un comando del tipo “git push origin master”, allora sei quasi pronto per i deploy automatizzati.

Quello che manca è uno script che ti consenta di copiare l’ultima versione del codice – quella appena caricata su “origin master” – dal repository GIT che hai sul tuo server remoto alla cartella servita da Apache dello stesso server.

In particolare devi creare uno script BASH all’interno della cartella “hooks/post-receive” del tuo repository sul server. Lo script potrebbe somigliare a qualcosa di questo tipo:

#!/bin/bash
 #CONFIGURAZIONE
 DESTINAZIONE="/home/ilmiositoweb/www"
read oldrev newrev refname
 if [ $refname = "refs/heads/master" ]; then
 echo "===== deploy del nuovo sito in corso ====="
 unset GIT_DIR
 cd $DESTINAZIONE
 git pull origin master
 echo "===== tutto fatto ====="
 fi

Una volta che hai fatto questa configurazione, tutte le volte che effettuerai il push sul tuo server remoto, questo provvederà automaticamente a deployare le modifiche nella cartella servita da apache.

Puoi anche decidere di effettuare un deploy in staging, ovvero su di una cartella servita da apache ma non come sito web “principale” e decidere dopo se deployare in produzione, magari con un secondo script e dopo l’esecuzione di una suite di test (perchè tu effettui test-driven design, vero?).

Se quello che ti ho appena descritto ti piace, se hai bisogno di un servizio di hosting non convenzionale ed in grado di proporti soluzioni su misura come questa, perchè non provi a contattarci? Sapremo sorprenderti.

E se invece preferisci fare da solo… buon deploy 😉