Quando si crea un nuovo progetto in Laravel la fase di sviluppo viene effettuata in locale, cioè sul proprio computer. Poi possono esserci più fasi prima di arrivare alla pubblicazione finale. Ogni fase corrisponde ad un determinato ambiente di sviluppo.

L’ambiente di sviluppo come abbiamo accennato, risiede nella nostra macchina locale, ricordiamo che è comunque possibile definire un ambiente di sviluppo su un server remoto per condividere il software in questa fase con altri sviluppatori.

Un’ulteriore fase è quella di staging, nella quale viene instanziata l’applicazione su un server remoto condiviso con chi dovrà verificarne la qualità e il corretto funzionamento. L’ambiente in questo caso viene impostato nel modo più simile possibile all’ambiente definitivo di pubblicazione, cioè l’ambiente di produzione.

L’istallazione di una nuova versione dell’applicazione è detta deployment.

Esistono altre fasi intermedie come il testing o la QA (Quality Assurance) ma per adesso limitiamoci a uno scenario semplificato.

Laravel: installazione di Homstead e ambiente di sviluppo in locale

Torniamo all’ambiente di sviluppo e vediamo come configurarlo in locale.

Di cosa abbiamo bisogno

Per installare Laravel localmente e farlo funzionare correttamente abbiamo bisogno di:

  • un web server come nginx o Apache
  • PHP
  • un database come MySql o PostgreSQL
  • composer per l’installazione dei package

Potremmo installare tutte queste cose direttamente sul nostro sistema operativo. Ma che succederebbe poi se avessimo bisogno di lavorare su un altro progetto con una versione di PHP diversa ad esempio?

La best practice in questo caso è di utilizzare una macchina virtuale, con un proprio sistema operativo e un ambiente configurato precisamente per l’applicazione che stiamo sviluppando.

Vagrant e VirtualBox

VirtualBox è un software che permette di gestire una o più macchine virtuali su un computer fisico. Vagrant è un software che utilizza VirtualBox (o in alternativa altri software simili) e permette di configurare facilmente ambienti virtuali di sviluppo definendone le caratteristiche con un semplice file di configurazione.

Homestead, cosa contiene

Homestead è un ambiente preconfigurato con tutto l’occorrente necessario per eseguire un’applicazione Laravel senza dover installare tutte le componenti necessarie manualmente. Homestead facilita drasticamente la configurazione di un ambiente locale e permette, una volta installato, di configurare l’esecuzione di un’applicazione Laravel in pochi minuti.

La versione corrente di Homestead, alla data di stesura di questo post contiene:

  • Ubuntu 16.04
  • Git
  • PHP 7.1
  • Nginx
  • MySQL
  • MariaDB
  • Sqlite3
  • Postgres
  • Composer
  • Node (With Yarn, Bower, Grunt, and Gulp)
  • Redis
  • Memcached
  • Beanstalkd
  • Mailhog
  • ngrok

In parole povere, tutto ciò di cui abbiamo bisogno per installare Laravel in locale.

Ok, iniziamo

Per prima cosa come prima accennato è necessario installare Virtualbox e Vagrant. Scegli il tuo sistema operativo e segui le istruzioni di installazione.

Una volta completata questa fase seguiamo la guida di installazione di Homestead.

Andiamo sul terminale e digitiamo:

vagrant box add laravel/homestead

Questo aggiungerà l’immagine di homestead a Vagrant e ci permetterà di eseguirla con configurazioni differenti. Una volta finito il processo di installazione del vagrant box dobbiamo effettuare una copia della cartella di configurazione di homestead facendo semplicemente il clone del repository Github. Dal terminale andiamo sulla cartella home del nostro computer e digitiamo:

git clone https://github.com/laravel/homestead.git Homestead

Questo creerà una cartella /Homestead contenente un file chiamato Homestead.yaml. Questo è di fatto il file di configurazione che dovremo editare per comunicare a Homestead dove si trova la cartella del nostro progetto, quali db vogliamo creare ecc…

Aprendo il file Homestead.yaml con un file di testo assicuriamoci che il valore del campo provider sia virtualbox. Poi concentriamoci sulle aree folders sites.

In folders dobbiamo dichiarare la mappatura delle cartelle tra la nostra macchina e la macchina virtuale. Supponiamo di avere un progetto nella cartella ~/my-projects/my-blog del nostro computer:

folders:
    - map: ~/my-projects/my-blog
      to: /home/vagrant/my-blog

Quindi se accedessimo al terminale della virtual machine adesso non troveremmo la cartella my-projects, ma solo la cartella descritta nel campo to.

Adesso dentro sites dobbiamo associare un dominio alla cartella di Homestead. Questa associazione istruirà Nginx in modo da reindirizzare le chiamate http sulla applicazione contenuta nella cartella definita.

sites:
    - map: my-blog.app
      to:  /home/vagrant/my-blog/public

Nginx vuole che venga dichiarata la cartella pubblica del progetto, la cartella in cui è contenuto il file index.php dell’applicazione Laravel.

Nella sezione databases invece possiamo definire il nome del database che vogliamo creare e utilizzare dalla nostra applicazione:

databases:
    - blog_db

Ultimo step per completare la configurazione: il dominio definito su Homestead.yaml  per nginx deve essere riconosciuto dalla nostra macchina locale, quindi è necessario modificare il file hosts che si trova per i sistemi unix all’indirizzo /etc/hosts e per i sistemi windows all’indirizzo C:\Windows\System32\drivers\etc\hosts

192.168.10.10  my-blog.app

Avviamo ora homestead da terminale (da terminale bisogna posizionarsi nella cartella homestead e dare il comando “init.bat” per windows), accediamo alla cartella in cui si trova il file Homestead.yaml e digitiamo vagrant up per avviare la macchina virtuale. Il primo avvio sarà sicuramente più lento degli avvii successivi. Una volta avviato l’applicazione è raggiungibile da browser all’indirizzo http://my-blog.app

Se si vuole accedere al terminale della macchina virtuale è possibile farlo semplicemente digitando “vagrant ssh”. Per terminarne l’esecuzione invece dobbiamo digitare “vagrant halt”. Qualora modificassimo il file yaml con nuove impostazioni dovremmo poi riavviare la virtual machine specificando di fare un nuovo provision con il comando vagrant up –provision.

Dai un’occhiata ai nostri corsi Laravel, ti aspettiamo in aula!