Deploy di un Microservice con Lumen su Forge

Mai provato Laravel Forge? In questo articolo, Francesco spiega come usarlo per effettuare il deploy, in pochissimo tempo, di un piccolo microservice creato con Lumen!
francesco
Francesco Malatesta
21/04/2016 in Tutorial

Se vogliamo sperimentare qualcosa di nuovo e vogliamo farlo in poco tempo, un tool per il deploy semplice da usare e soprattutto molto, molto veloce, può rivelarsi un boost non indifferente.

Qualche giorno fa mi sono ritrovato a sperimentare un po' con i nuovi Bot Facebook (ne parlerò tra qualche tempo) e mi sono divertito un sacco a lavorare con Laravel Forge, un servizio ufficiale di Laravel che facilita il deploy su svariate piattaforme.

Forge?

Come già accennato un paio di righe più su, Forge è un prodotto di Laravel. Non è altro che un comodissimo tool che consente di gestire i propri server, anche su più provider diversi, molto facilmente.

I provider a cui Forge si aggancia li dovremmo conoscere già:

  • Amazon AWS;
  • DigitalOcean;
  • Linode;

Forge quindi non è altro che un layer di semplificazione per tutte quelle operazioni, a volte noiose, che riguardano il deploy dei nostri progetti. Soprattutto quando si tratta di side project, che magari vogliamo portare online velocemente e senza intoppi di ogni tipo.

Ad oggi, Forge offre due possibili iscrizioni:

  • Individual, da $10 al mese;
  • Team, da $20 al mese che permette di condividere i nostri server con altri utenti;

Una volta iscritti, è possibile effettuare l'accesso con uno o più provider in modo molto semplice.

Come la schermata mostra, tutto quello che si deve fare è scegliere il provider ed inserire le credenziali di accesso. Niente di più!

Una volta configurato il proprio account ed il proprio provider, ecco come si presenta la schermata per la creazione di un nuovo server.

Una sola, semplice schermata. Tutto quello che dobbiamo fare è scegliere nome, potenza, regione geografica ed eventuali opzioni per l'operazione di creazione del nuovo server. Dopodiché, un bel click su "Create Server" ed inizia la magia.

Non dobbiamo fare più nulla, se non aspettare e magari prenderci un caffè. Al resto ci penserà lui!

Ad ogni modo, Forge non è solo questo. Ci sono tanti altri benefici, tra cui la possibilità di:

  • definire, per ogni server, uno o più siti su cui montare le proprie applicazioni;
  • definire, per ogni account, una chiave SSH da usare per accedere velocemente ai propri server;
  • collegare uno specifico repository GitHub o BitBucket ad un sito, ed automatizzare il deploy ad ogni push su uno specifico branch;
  • abilitare le notifiche, ad ogni deploy, su HipChat e Slack;
  • modificare per ogni sito lo script di deploy, per personalizzarlo in base alle sue esigenze;
  • lavorare con i certificati SSL per rendere il proprio sito più sicuro (e c'è anche un tool per abilitare tutto al volo tramite letsencrypt;

ed altro ancora. Per cui, se ce lo stiamo chiedendo ancora... si, vale sicuramente i $10 mensili.

Forge!

Ok, adesso che sappiamo di cosa stiamo parlando, possiamo mettere subito le mani su un progetto di prova e farne un deploy.

Visto che non tocca a questo articolo spiegare come creare un progetto con Lumen, useremo un repository già pronto allo scopo: questo qui, creato ad hoc per lo scopo.

Chiaramente non si tratta di qualcosa di effettivamente utile: non è che un semplice esempio di repository con cui ci potremmo trovare a lavorare.

Creazione del Server

Innanzitutto, dopo aver effettuato l'accesso su Forge, creiamo il nostro server.

Non avremo bisogno di chissà cosa, ovviamente. Ricordiamoci il nome del database scelto (in questo caso, bookovery), perché ci servirà dopo.

Possiamo procedere: clicchiamo su "Create Server" ed attendiamo che la procedura vada a buon fine.

Si, questo è il momento del caffè.

Finita la procedura del deploy, riceveremo le credenziali di accesso del server via mail.

Colleghiamo il Repository

Adesso dobbiamo collegare il nostro repository ad un site. Apriamo la pagina di gestione del server che abbiamo appena creato (raggiungibile cliccando sulla matita al di sotto di "Manage", nella schermata principale).

Di default, ogni server ha già un "Active Site" associato. Apriamone la pagina di gestione, e dopo aver scelto GitHub come fonte, possiamo specificare il repository da agganciare al nostro "site".

Clicchiamo su "Install Repository" per procedere.

Prima del Deploy

Anche se abbiamo "installato" il repository, in realtà, non abbiamo ancora completato il deploy al 100%. Il codice c'è, le dipendenze anche, ma prima di poter dire di aver finito, infatti, dobbiamo ancora fare un paio di cose.

Clicchiamo su Environment e poi su Edit Environment. Creiamo il file di configurazione per il nostro server come segue:

APP_ENV=production
APP_DEBUG=false
APP_KEY=SomeRandomKey!!!

DB_CONNECTION=mysql
DB_HOST=localhost
DB_PORT=3306
DB_DATABASE=bookovery
DB_USERNAME=forge
DB_PASSWORD=secret_password

CACHE_DRIVER=memcached
QUEUE_DRIVER=sync

Ovviamente, non scordiamo di inserire la vera password del database, ricevuta per email, al posto di secret_password.

Fatto questo salviamo il file e torniamo alla schermata principale della gestione del site, e clicchiamo su "Edit Deploy Script".

Ecco cosa metterci:

cd /home/forge/default
git pull origin master
composer install --no-interaction --no-dev --prefer-dist
composer dumpautoload
php artisan migrate --seed --force

Cambia poco dallo script di default, ma è stato necessario aggiungere un --seed per fornire all'applicazione i dati di test messi nella classe BooksTableSeeder, e composer dumpautoload per evitare di perdere qualche classe nella procedura di autoload.

Deploy!

Bene, è arrivato il momento di premere il grilletto! Clicchiamo su "Deploy Now" e aspettiamo qualche secondo!

Controlliamo ora che sia andato tutto bene.

Nel nostro caso l'ip del server è 46.101.114.104. Facciamo puntare il nostro browser su http://46.101.114.104/books e...

[
    {
        id: 1,
        title: "Five Weeks in a Balloon",
        author: "Jules Verne",
        genre: "Adventure",
        created_at: "2016-04-21 12:29:58",
        updated_at: "2016-04-21 12:29:58"
    },
    {
        id: 2,
        title: "The Mysterious Island",
        author: "Jules Verne",
        genre: "Adventure",
        created_at: "2016-04-21 12:29:58",
        updated_at: "2016-04-21 12:29:58"
    },

...

Nota: in caso di errore, Forge ci mostrerà automaticamente l'output dell'operazione di deploy. Basterà cliccare su "View Latest Deployment Log".

Et voilà! Davvero semplice, non è vero?

Buon lavoro!