Tutoriel - Comment déployer une API REST sur Heroku

Déployer gratuitement votre projet Laravel 5.5 sur Heroku

L’objectif de cette suite de tutoriels sur Laravel 5.5 est de permettre au développeur Web de déployer une API REST de qualité sur le Net.

Ce tutoriel vous permettra de déployer votre application Laravel sur Heroku. Heroku est un hébergeur PASS (Platform As A Serice) qui facilite le déploiement de votre application par l’utilisation de git. Le forfait gratuit est parfait pour le prototypage rapide (HTTPS, BD et nom de sous-domaine gratuit).

Après avoir configuré le projet, vous pourrez déployer avec une simple commande :

$ git push heroku master

Récit utilisateur proposé

  • En tant que développeur, j’aimerais déployer mon application Laravel PHP sur le Web afin de présenter l’avancement au client.

Plan de match pour ce tutoriel

  1. Se créer un compte gratuit Heroku.
  2. Installer l’outil de ligne de commande Heroku.
  3. Configurer le fichier Procfile et nginx.conf.
  4. Configurer une base de données.
  5. Faire un push sur le serveur de Heroku.
  6. Vérifier le bon fonctionnement de l’application déployée.

N’oubliez pas qu’il me fera plaisir de répondre à vos questions en bas de page. Bon succès!

Créer un compte Heroku

Suivre la procédure proposée à l’adresse suivante :

Installer la ligne de commande heroku

Télécharger et installer l’application à partir de l’adresse suivante :

Sur Ubuntu, c’est plus simple :

$ wget -qO- https://cli-assets.heroku.com/install-ubuntu.sh | sh

Vérifier le bon fonctionnement de Heroku-cli

$ heroku –version

Configurer le projet avec Heroku

$ cd mon_projet_laravel
$ heroku login
$ heroku create

ou

$ heroku create nom_de_votre_app

Définir la clé de l’application (App Key) en variable d’environnement

La clé doit demeurer privée et est nécessaire afin de favoriser la sécurité de votre application.

$ heroku config:set APP_KEY=$(php artisan –no-ansi key:generate –show)

Ou en deux étapes avec un copier-coller :

$ php artisan key:generate –show
$ heroku config:set APP_KEY=…

Configuration serveur (dyno) – Le fichier Procfile

Ajouter deux fichiers à la racine du dossier de projet :

  • Procfile : Configuration Heroku pour le lancement du serveur Web
  • nginx.conf : Configuration du serveur Web Nginx

Les deux sections suivantes présentent le contenu des fichiers à créer à la racine de votre projet Laravel.

Procfile
web: $(composer config bin-dir)/heroku-php-nginx -C nginx.conf public/

nginx.conf
# prevent HTTPoxy vulnerability
fastcgi_param HTTP_PROXY «  »;

location / {
# try to serve file directly, fallback to rewrite
try_files $uri @rewriteapp;
}

location @rewriteapp {
# rewrite all to index.php
rewrite ^(.*)$ /index.php$1 last;
}

Pousser sur Heroku à l’aide de git

$ git add .
$ git commit -m « Procfile and nginx.conf added »
$ git push heroku master

Notez que l’URL est en HTTPS, donc sécurisée.

Une erreur Heroku?

Si l’app ne fonctionne pas, vous pouvez vérifier les logs.

Comment afficher les logs – Débogage

$ heroku logs –remote heroku

Plus fort avec –tail

$ heroku logs –remote heroku –tail

Si rien n’est affiché, actualiser l’URL de votre application :

  • https://monapp.herokuapp.com/api/stations/

Afin d’augmenter la quantité d’information dans les logs, voici une proposition (pas idéal pour une application en production);

$ heroku config:set APP_DEBUG=true
$ heroku config:set APP_LOG_LEVEL=debug

Créer la base de données Pgsql

Il faut maintenant configurer la BD pour la persistance des données. Afin de prouver que notre ORM (Eloquent) fonctionne aussi bien avec MySQL qu’avec Postgres, nous allons utiliser PostgreSQL sur Heroku.

Heroku offre une BD PostgreSQL gratuitement. Cette BD est limitée à 10 000 enregistrements, parfait pour une application en développement. Nous allons donc profiter de cette offre.

$ heroku addons:create heroku-postgresql:hobby-dev

Creating heroku-postgresql:hobby-dev on ⬢ pacific-fjord-80605… free
! data from another database with pg:copy
Created postgresql-globular-75424 as DATABASE_URL

L’application doit être configurée en utilisant des variables d’environnement .

Cela permet d’éviter de conserver des informations confidentielles dans le code source. Cette bonne pratique de programmation facilite aussi le déploiement en masse.

Afficher les variables d’environnement sur Heroku

$ heroku config

Rechercher la variable d’environnement DATABASE_URL.

Connexion à la base de données

Pour utiliser cette variable d’environnement, 2 choix s’offrent à nous :

  1. Modifier le fichier config/database.php ou
  2. Créer plusieurs variables pour séparer l’information de cette URL de connexion à la BD.

Il faut se conformer à ce que nous trouvons dans le fichier .env :

DB_CONNECTION=mysql

DB_PASSWORD=secret

À priori, la solution #1 semble la meilleure, mais il faut modifier le code du fichier database.php.

J’ai utilisé la deuxième.

Solution #1 – Modifier le fichier database.php

Cette solution demande du peaufinement afin de bien fonctionner.

⬢ database.php

// config/database.php
if ($url = env( ‘DATABASE_URL’ , false))
{
$parts = parse_url($url);
$host = $parts[« host »];
$username = $parts[« user »];
$password = $parts[« pass »];
$database = substr($parts[« path »], 1);
}

Ensuite, modifier le bloc pgsql afin d’utiliser les nouvelles variables.

Faire un push sur Heroku afin de vérifier que la connexion est établie.

Solution 2 : Créer plusieurs variables d’environnement manuellement

Il faut donc décomposer l’URL suivante :

DATABASE_URL=postgres://zkndayikjoiugmv:88412bb2b23…2e2244f57225d19@ec2-54-82-203-198.compute-1.amazonaws.com:5432/d38ef2…v3k3p

En plusieurs variables :

$ heroku config:set DB_CONNECTION= »pgsql »
$ heroku config:set DB_HOST= »ec2-54-82-203-198.compute-1.amazonaws.com »
$ heroku config:set DB_PORT= »5432″
$ heroku config:set DB_DATABASE= »d38ef2…v3k3p  »
$ heroku config:set DB_USERNAME= »zkndayikjoiugmv »
$ heroku config:set DB_PASSWORD= »88412bb2b23…2e2244f57225d19″

Note :
Le nom du driver pour une BD Postgresql est pgsql.
On peut aussi constater que la BD est entreposée sur un serveur Amazon AWS.

Lancer les migrations et les seed

Une fois la BD bien configurée, vous pouvez lancer les migrations :

$ heroku run php artisan migrate:fresh –seed

Avez-vous fait face à des problèmes lors de la configuration de la BD ?

Expliquer le problème en une phrase bien construite avec un bon français.

Prendre une pause santé

Il est important de bien s’hydrater durant la journée. Le café, le thé et les boissons n’hydratent pas bien. Il faut donc penser à boire beaucoup d’eau. Idéalement, une eau de qualité.

Il faut absolument éviter l’eau embouteillée qui pollue énormément et qui coûte excessivement cher. Elle sera peut-être bonne pour vous, mais très mauvaise pour l’humanité … donc mauvaise pour vous. De plus, des analyses récentes démontrent que l’eau embouteillée comporte des traces de plastique.

Finalement, des compagnies comme Nestlé volent l’eau de plusieurs villages à travers le monde. Par exemple, Netslé se permet de siphonner l’eau d’une nappe phréatique centenaire qui fournissait l’eau à un village complet. Une fois le puits vide, cela oblige les pauvres citoyens à acheter l’eau à un prix incroyablement élevé ou à marcher plusieurs kilomètres avec une charge importante. Pause commandité par Nestlé Pure Life.

Prêt pour les tests?

Déployer

Afin de déployer votre application Laravel, vous n’avez qu’à lancer la commande suivante.

$ git push heroku master

Lancer les tests

Afin de vérifier le bon fonctionnement de l’APP, il serait intéressant de lancer les tests.

Sur Heroku

$ heroku run vendor/phpunit/phpunit/phpunit

En local

$ vendor/phpunit/phpunit/phpunit

Est-ce que la commande fonctionne? Pourquoi?

Indice : analyser le contenu du fichier composer.json

Modifier le nom (donc l’URL) de votre serveur Heroku (facultatif)

Afin de modifier l’URL de votre serveur, il faut se connecter à l’interface Web Heroku et afficher les settings du serveur.

Une fois le nom vérifié, votre lien git ne sera plus fonctionnel, il faut donc le mettre à jour de cette façon :

$ git remote -v

$ git remote rm heroku

$ git add remote heroku https://git.heroku.com/nom-surper-projet.git

$ git remote -v

1. https://stackoverflow.com/questions/6226846/how-to-change-a-git-remote-on-heroku#23795355

Configuration Heroku pour changer le nom de domaine

Bravo!

Bravo, votre environnement de développement avec Homestead, Vagrant, PHP, MySQL est fonctionnel.

Configurons une application qui utilise le cadriciel Laravel.

Références et lectures

  • https://www.getpostman.com/
  • https://github.com/symfony/symfony/
  • https://vagrantup.com/downloads.html

Configuration d’une application Laravel 5.5

Maintenant que votre environnement de développement est fonctionnel, la prochaine étape consiste à installer et configurer le cadriciel Laravel 5.5.

Pour terminer en beauté, merci de partager!


Comments

comments