Advertisement
  1. Code
  2. DevOps
Code

Introduzione a Vagrant

by
Difficulty:IntermediateLength:MediumLanguages:

Italian (Italiano) translation by Luca Menozzi (you can also view the original English article)

Panoramica

Vagrant permette di gestire e controllare facilmente macchine virtuali multiple. E' costruito su VirtualBox e VMWare, e fornisce molte appassionanti funzionalità. Puoi creare ambienti di sviluppo isolati, fare esperimenti con nuovi prodotti e tecnologie, installare nuove versioni di pacchetti esistenti, creare il tuo data center privato sul laptop ed eseguire differenti sistemi operativi. Tutto questo è disponibile in un contenitore facile da gestire e completamente sicuro che non interferisce con le tue principali attività o col sistema operativo.

In questo tutorial, ti mostrerò come fare il setup di Vagrant e iniziare a esplorare le molteplici possibilità che offre.

Recentemente Vagrant ha aggiunto il supporto anche per i container Docker, ma questo è un argomento che non tratterò in questo tutorial.

Installazione

  1. Scarica VirtualBox per il tuo sistema operativo dal relativo sito;
  2. Dopo averlo scaricato, eseguilo e installa il software;
  3. Scarica Vagrant;
  4. Di nuovo, eseguilo e installalo.

Inizializzare Vagrant

Vagrant è un tool basato su linea di comando. Quando l'installazione è completa, apri una finestra della console e crea una nuova directory con nome 'vagrant_intro'.

Questa sarà la tua directory di lavoro d'ora in avanti. Dentro la directory vagrant_intro, scrivi:

vagrant init ubuntu/trusty64

Dovresti vedere il seguente testo:

Il file 'Vagrantfile' generato è un file Ruby che controlla la tua, o le tue se più di una, macchina virtuale. E' un file abbastanza grosso, con un sacco di opzioni commentate. Mi soffermerò su quelle più importanti più avanti, ma prima facciamo una prova. Scrivi: vagrant up.

Questo fa sì che Vagrant scarichi una virtual box già pronta con la release Ubuntu 14.04 (trusty) a 64 bit. Dovrebbe richiedere un po' di tempo (diversi minuti) e apparirà parecchio testo sul tuo schermo. Mentre Vagrant lavora, possiamo vedere cos'è una VM in pratica.

Un impiego (quello che applico di solito) è la simulazione della VM di un server remoto. Dovresti comunicare con esso soltanto attraverso la sua interfaccia di rete. Questo è particolarmente utile per testare sistemi distribuiti dove non è possibile sfruttare nessuna interfaccia VM-host perché non sono disponibili sul tuo sistema di produzione. Quando operi in questo scenario, dovresti comunicare con la tua VM attraverso SSH (possibilmente con un tool come Ansible).

Un altro impiego, altrettanto valido e corretto, è di pensare alla VM come un altro OS che gira nella tua macchina locale. Questo approccio è utile se vuoi sviluppare direttamente nel tuo OS di destinazione.

Ad esempio, una situazione abbastanza comune è quella di avere sviluppatori che scrivono il loro codice su Mac con Mac OS X, ma che fanno il deploy su un ambiente di produzione Linux. Se vuoi essere certo che il codice che sviluppi sul Mac giri senza problemi su Linux senza caricare i file su un server remoto, puoi sfruttare le synced folders dove puoi leggere e scrivere file dell'OS host (tipicamente Mac OS X) e ritrovarli immediatamente disponibili nella macchina OS guest (tipicamente Linux).

Questo elimina lo step del "deploy" nel ciclo edit-deploy-test quando si lavora con sistemi remoti. Ed elimina anche la necessità di un ambiente di staging ampio che, essendo una risorsa condivisa, ha bisogno di essere manutenuta con attenzione da tutti gli sviluppatori. Con una VM locale, nessuno rischia di far crashare il tuo ambiente, così puoi fare quanti esperimenti vuoi senza preoccuparti di creare problemi al codice di qualcun altro.

Puoi, naturalmente, usare sia le synced folders, sia l'SSH nella tua VM. Ci sono altre opzioni che stanno nel mezzo, come il port mapping.

Il Vagrantfile

Qui c'è una versione ridotta del Vagrantfile con le opzioni più importanti.

La sintassi è quella di Ruby, che ti consente molta flessibilità se vuoi aggiungere blocchi condizionali e cicli. Questo è particolarmente d'aiuto se usi il Vagrantfile per gestire un cluster di macchine virtuali.

Connessione alla Tua VM

Puoi connetterti alla tua Virtual Machine scrivendo: vagrant ssh.

Questo lancerà una sessione SSH e ti consentirà di interagire con la VM in maniera interattiva.

Una volta all'interno della VM, puoi praticamente fare quello che vuoi: eseguire comandi, creare utenti, creare file e directory, e così via. Sei loggato con l'utente 'vagrant', che possiede privilegi sudo, e quindi hai il pieno controllo della VM.

Scambiare i Dati con la Tua VM

Vagrant mappa automaticamente la cartella sulla macchina host che contiene il Vagrantfile con la directory /Vagrant nella macchina guest. Questo ti consente di editare i files nel tuo editor preferito nella macchina host e averli disponibili in quella guest, o, in alternativa, avere il guest che scrive qualche file di output nella directory /vagrant e navigare la cartella sincronizzata nell'host.

Mappare le Porte nel Sistema Guest

Spesso ti troverai ad eseguire qualche applicazione che comunica attraverso una porta. La situazione più comune è quella del web server. Vagrant consente di fare il forward delle porte della macchina guest alla macchina host.

Per esempio, nella situazione precedente, la porta 80 del guest è mappata sulla porta 8080 dell'host. Ciò significa che all'indirizzo localhost:8080 nella macchina host si può accedere a qualsiasi servizio in esecuzione sulla porta 80 del guest.

Vediamo un caso pratico. Prima creo un semplice file index.html nella directory ~/vagrant_intro nell'host che viene sincronizzato con la directory /vagrant_data nel guest.

Poi, dopo aver avuto accesso alla macchina guest via SSH, lancio un piccolo web server nella directory /vagrant_data:

Questo semplice server HTTP in Python, di una riga soltanto, serve qualsiasi file statico presente nella sua working directory. A questo punto, dato che la porta 80 è mappata sulla porta 8080 dell'host, puoi andare su localhost:8080 e vedere il risultato del server.

Connettersi alla VM Attraverso la Rete

Puoi connetterti alla VM anche attraverso il suo indirizzo IP come se fosse un server realmente a sè stante. Io aggiungo sempre un hostname in /etc/hosts così da non usare il semplice indirizzo IP e anche perchè il codice che testo è già configurato con l'hostname del sistema di produzione. Questo è ciò che devi inserire nel file /etc/hosts:

A questo punto, qualsiasi accesso via rete a "production.server.com" sulla tua macchina, sarà inviata alla tua VM.

In questo caso i programmi che di solito si connettono al server remoto sono configurati con l'indirizzo IP o l'hostname della VM. Precedentemente, in Vagrant 1.7, c'era una singola chiave privata che poteva essere utilizzata per tutte le macchine. Questo costituiva un serio problema di sicurezza quando la virtual machine veniva aperta verso reti pubbliche e chiunque poteva accedervi via SSH con accesso root. A partire dalla versione 1.7, Vagrant genera una nuova coppia di chiavi per ogni macchina. Per capire dove si trova la chiave privata per la tua macchina, esegui il comando: vagrant ssh-config.

Ecco come puoi accedere via SSH direttamente alla tua VM:

Gestire le Tue Virtual Boxes

Vagrant fornisce molteplici comandi per gestire le boxes. Vediamo quali. Per vedere una lista di comandi, scrivi: vagrant.

Ho accennato ad alcuni dei comandi più comuni in precedenza. l comandi box ti permettono di gestire direttamente le tue boxes. Ad esempio, per vedere tutte le VM presenti sulla tua macchina, digita vagrant box list. Puoi aggiornare le boxes all'ultima versione con update. Il comando reload è molto utile se fai dei cambiamenti al Vagrantfile. Infine, provision ti permette di fornire, configurare e installare software sulla tua macchina virtuale utilizzando diversi provisioners come Chef, Puppet, Salt, il mio favorito Ansible, e anche Docker.

Conclusioni

Vagrant ti consente di avere facilmente un computer dentro il computer. Puoi gestire un parco di macchine virtuali per scopi differenti, e il Vagrantfile è la tua interfaccia per definire il comportamento della VM. Buon divertimento con Vagrant. Sta a te approfondire, ora.

Advertisement
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.