Tools

Sul mio computer funziona

Frase che almeno una volta abbiamo detto o sentito dire. E se il codice è lo stesso, i dati pure, rimane solo un colpevole: l’ambiente su cui gira il nostro magento escludendo

almeno per ora l’immancabile errore umano. Chi usa nginx, chi usa apache, chi usa una versione, chi un’altra, per non parlare delle differenze tra il nostro ambiente in locale, in staging e produzione perché le persone coinvolte hanno competenze diverse e compiti diversi. Ovviamente non consideriamo il caso in cui…

E arriva nel tuo team un nuovo membro che non conosce le tecnologie che vengono abitualmente usate e dev’essere in grado velocemente di poter sviluppare e dare il suo contributo. E vogliamo parlare di quel progetto di cui non sei l’artefice e che hai ereditato come punizione divina che gira ancora su una versione di Magento che non è mai stata aggiornata in produzione?

Tutti questi esempi pongono il seguente problema: come replicare un progetto senza dover per forza avere una macchina dedicata per ogni istanza del progetto e possibilmente con il minimo dello sforzo per tutti i membri del team?

Una risposta abbastanza semplice la fornisce <a href="https://www.vagrantup.com/" target="_blank">Vagrant</a> mettendo a disposizione gli strumenti necessari per gestire con pochi semplici comandi le ormai famose macchine virtuali. Basta pensare che, una volta installato Vagrant sulla propria macchina, è possibile per chiunque con un solo commando accendere una qualsiasi macchina fornita e quindi usarla per il proprio progetto. Non solo: la stessa macchina può essere condivisa tra tutti i membri del team che lavorano sullo stesso progetto evitando cosi il famoso “ma sulla mia macchina funziona”.

Un altro punto importante è la facilità di creare/distruggere una macchina gestita con Vagrant permettendo cosi di creare tanti ambienti diversi, sperimentare con tecnologie nuove, il tutto senza contaminare il proprio ambiente locale.

Su Vagrant troviamo disponibili i file di installazione sia per sistemi <strong>Mac, Windows, Debian e CentOS</strong>  https://www.vagrantup.com/downloads.html

Spesso per i progetti più comuni troviamo disponibili delle <strong>macchine già configurate</strong> con tutto il necessario, un esempio è http://www.magestead.com/  ma si possono trovare tantissime altre Vagrant Box. E quando vogliamo anche solo fare un giro di prova delle varie tecnologie senza investire troppo tempo sono una buona soluzione.

Quindi per iniziare a sfruttare Vagrant dobbiamo ricercare la <strong>macchina virtuale</strong> che ci serve per il nostro famoso progetto ereditato come punizione divina e ipotizziamo sia una <strong>macchina virtuale Ubuntu 14.0 LTS 32-bit</strong>. Per ottenere una macchina virtuale abbiamo a disposizione vari provider ma quello che andremo ad utilizzare nel nostro esempio è VirtualBox quindi assicurarsi di aver installato l’ultima versione e per avere una migliore integrazione Virtualbox Guest Additions.

A questo punto, dentro la cartella dove vogliamo posizionare la nostra macchina virtuale, eseguire il seguente comando:

In risposta dovreste ricevere il seguente messaggio:

e all’interno della cartella in cui avete lanciato il comando troverete un file nominato Vagrantfile, scritto usando la sintassi di <strong>ruby</strong> con essenzialmente 2 istruzioni:

Vagrant.configure(2) do |config| -> indica a vagrant la version di Vagrant con cui stiamo lavorando

config.vm.box = "ubuntu/trusty"; -> indica la macchina virtuale che andremo usare.

A questo punto manca l’ultimo comando e avremo una macchina virtuale operativa:

Per accedere tramite un terminale alla vostra macchina virtuale basta eseguire:

Quindi, come anticipato, con 2 comandi abbiamo la nostra macchina virtuale su cui montare il nostro progetto. La macchina virtuale viene anche chiamata <strong>macchina guest</strong> in relazione alla nostra macchina chiamata <strong>host</strong>. A questo punto dentro la macchina guest è disponibile la cartella vagrant all’interno della quale è possibile condividere i file tra host e guest e vedrete presente appunto il file Vagrantfile. Tutti i file contenuti nella cartella dove avete eseguito il comando <strong>vagrant up</strong> saranno visibili all’interno della macchina virtuale e anche dopo averla distrutta rimarranno intatti sulla vostra <strong>macchina locale</strong>.

Però una macchina del genere è praticamente inutile per il nostro progetto Magento, ci manca tutto l’ambiente <strong>AMP</strong> quindi come faccio a creare la macchina che desidero? Ma sopratutto vogliamo sicuramente avere l’accesso via browser alla macchina quindi come si fa ad ottenerlo?

Se andiamo a leggere le parti commentate del nostro Vagrantfile troviamo diverse spunti su come procedere oltre che ovviamente nell’ampia documentazione a riguardo.

Se andiamo a togliere il commento sulla riga config.vm.network "forwarded_port", guest: 80, host: 8080 e ricarichiamo la configurazione di vagrant con il commando vagrant reload attiviamo quello che viene chiamato port forwading e si traduce nell’accesso alla <strong>porta 80</strong> della macchina virtuale sulla <strong>porta 8080</strong> del host. E se per caso tale porta è occupata sulla nostra macchina con l’opzione auto_correct: true vagrant gestirà per noi l’assegnazione automatica ad una porta libera. Per controllare che tutto funziona correttamente basta il seguente comando:

E se tutto funziona ci risponderà cosi:

Ok, abbiamo visto come avere file condivisi, abbiamo visto come comunicare con il guest ma ci manca ancora la parte più importante e cioè l’ambiente necessario per far girare il nostro progetto magento che ipotizziamo sia un semplice ambiente LAMP. E qui ci viene in aiuto un’altra parte del nostro file di configurazione :

Di per se è abbastanza intuitivo, e cioè esegue in <strong>shell</strong> i comandi necessari per installare Apache con un’opzione importante e cioè -y per evitare la richiesta di conferma da parte dell’utente senza la quale rimarrebbe bloccato in attesa di input. Chiaramente la nostra installazione richiede più comandi quindi l’opzione migliore è usare uno script. Vagrant offre varie modalità per quello che viene chiamato provisioning e cioè uno script o serie di comandi che verranno eseguiti al momento della creazione della nostra macchina. Potrebbe venire la domanda: perché non farlo direttamente da dentro la macchina virtuale? La risposta è che possiamo farlo ma verrebbe a mancare un fattore cruciale e cioè la possibilità di riprodurre la macchina anche per gli altri membri del team o su altri server. Infatti una volta configurato lo script che va a creare la macchina desiderata, basta condividere il <strong>Vagrantfile</strong> e lo <strong>script di provisioning</strong> affinché anche il nostro collega abbia la stessa <strong>identica macchina</strong>.

Quindi prima di tutto aggiungiamo config.vm.provision "shell", path: "script.sh" al nostro Vagrantfile e andiamo a scrivere dentro il nostro script.sh tutti i comandi necessari il nostro ambiente LAMP.

In questo modo abbiamo creato la nostra macchina LAMP e se visitiamo localhost:8080 dal nostro browser vedremo la root del webserver appena installato sulla macchina virtuale. Possiamo fare molto di più e cioè integrare completamente il nostro progetto Magento aggiungendo l’import del database e il dominio da usare. Per fare l’import basta passare il nome del file come parametro del nostro script e lasciare il dump del database sulla root che sappiamo essere visibile; analogo discorso vale per il dominio. A questo dentro il nostro Vagrantfile aggiungiamo :

e nel nostro script.sh aggiungiamo l’import del db

E per finire ci manca solo l’aggiunta del dominio a cui rispondere. Per quest’operazione arriviamo alla nostra versione finale:

Come vediamo è stato sostituito al port forwarding l’assegnazione di un IP privato alla macchina virtuale. Se aggiungiamo al nostro <strong>etc/hosts</strong> con 10.11.11.13 vagrant.local e modifichiamo il virtualhost col il dominio passato la macchina virtuale ci risponderà secondo la nostra configurazione.
Le possibilità di manipolare le macchine virtuali con Vagrant sono molto ampie e una volta trovata la giusta soluzione, abbiamo una processo di sviluppo più stabile e omogeneo all’interno del team per i singoli progetti migliorando cosi la qualità del nostro lavoro.
Chiaramente non è la soluzione ultima e perfetta e ha come contro l’uso cospicuo delle risorse del proprio pc tale da rendere possibile l’esecuzione in parallelo solo di un numero limitato di macchine.
In tale direzione va un altro sistema di virtualizzazione che andremo ad approfondire in un prossimo articolo: Docker.
Presenta dei vantaggi che sino ad oggi non potevano essere sfruttati a pieno su piattaforme Mac e Windows. Ma è recente la notizia dell’uscita della versione beta della soluzione dedicata proprio a tali piattaforme.

Stay tuned!

Articolo scritto da

Back-end dev | Firenze

☝ Ti piace quello che facciamo?  Unisciti a noi!