Qu’est-ce qu’Heroku ?

Heroku est un service de cloud computing de type Paas (Platform as a Service : environnement d’exécution dans le cloud)Créé en 2007 puis racheté par Salesforce.com, ce service permet le déploiement rapide d’applications web dans le cloud, avec une gestion très souple du scaling horizontal. Heroku utilise une infrastructure qui repose suAWS, notamment EC2 pour l’exécution des machines virtuelles et S3 pour le stockage.

Gestion des ressources et scalabilité

L’architecture Heroku est centrée sur les processus, et non sur des instances virtuelles ou des serveurs. Le code déployé est analysé pour détecter le type d’application à faire tourner, ainsi que les processus nécessaires afin de mettre en place l’environnement dédié. Cet environnement repose sur une ou plusieurs unités d’exécution appelées dynos dont l’ensemble formé est appelé un slug qui fait tourner l’application.

Ainsi, on ne gère pas un ensemble de serveur mais simplement une application, Heroku s’occupe du reste. La scalabilité est elle aussi intégralement gérée par Heroku et maîtrisée par l’utilisateur grâce à l’allocation de ressources (« dynos » et « workers ») via la console d’administration.

Heroku et PHP

À l’origine dédié aux applications web en Ruby, l’offre s’est étendue à d’autres runtimes comme node.js, Java, Clojure, Python, Scala ainsi que récemment PHP en version bêta (https://blog.heroku.com/archives/2014/4/29/introducing_the_new_php_on_heroku).

Comme nous utilisons Laravel au quotidien, il nous fallait essayer ça !

Déployer son projet Laravel sur Heroku

Le déploiement sur Heroku est basé sur git, pour envoyer son projet sur Heroku il suffit donc de créer un projet git et d’envoyer les versions à déployer sur le serveur git Heroku à l’aide d’un simple git push.

Heroku détecte les projets PHP grâce à la présence d’un fichier composer.json (en créer un vide si nécessaire) et paramètre l’environnement d’exécution et sa mise à jour à partir de ce fichier (runtime, dépendances, etc.).

→ Pré-requis

Pour suivre les étapes suivantes, il est nécessaire de posséder un compte sur Heroku et d’avoir installé le client dédié (https://devcenter.heroku.com/articles/getting-started-with-php#local-workstation-setup). Pour l’exécution des commandes, il faut vous placer dans le répertoire de votre projet PHP géré avec git.

→ Créer une application Heroku

Comme pour la plupart des actions sur Heroku il est possible soit de passer par l’API (accessible en ligne de commande) soit d’aller directement sur le site d’Heroku dans la console d’administration.

$ Heroku create app-name --region eu --buildpack https://github.com/heroku/heroku-buildpack-php

Pour que les applications tournent au mieux sur Heroku, il est conseillé d’utiliser des kits de départ (nommés buildpack). Pour les applications PHP, le build pack conseillé est le suivant : https://github.com/heroku/heroku-buildpack-php.

Il est également possible de redéfinir le buildpack dans les paramètres de l’application.

→ Lier mon projet à mon application Heroku

La première possibilité est d’utiliser la commande dédiée de Heroku Toolbelt :

$ heroku git:remote -–app app-name -r heroku

La deuxième simplement via la commande git :

$ git remote add heroku git@heroku.com:app-name.git

Remarque

Le lien git de l’application se trouve sur le site Heroku, dans les paramètres de l’application en question ou directement à la création de l’application via la ligne de commande Heroku.

→ Envoyer son projet sur Heroku

Il suffit de taper les mêmes commandes que pour un push git en sélectionnant le remote créée précédemment :

git add .
git commit -m "message du commit"
git push heroku master

→ Gestion de la base de données

Heroku propose, directement ou via des partenaires sur son market place, plusieurs « BDD as a Service » qui peuvent être facilement ajoutée à votre application. Dans notre cas, nous avons sélectionné le service Heroku Postgres. Pensez donc à ajouter l’add-on de votre choix à votre application dans la console d’administration de votre application.

Du point de vue de la configuration, les constantes de connexion (host, login, mdp, etc…) sont visibles sur le site Heroku dans la rubrique bases de données et vous permettront de mettre à jour la configuration de Laravel. Pensez aussi à ajouter les dépendances PHP via composer (ext-mongo par exemple) si besoin. Dans notre cas, tout est déjà installé sur l’environnement d’exécution.

Pour gérer les mises à jour de la base de données, nous utilisons la fonctionnalité de migrations de Laravel, reste à les exécuter sur Heroku.

1ère Solution :

Fonctionner comme en local sauf qu’il faut exécuter ces commandes sur l’environnement d’exécution de notre application sur Heroku :

$ heroku run app/php/bin/php app/www/artisan migrate --app app-name

2ème solution :

Automatiser la migration de la BD en ajoutant les lignes suivantes à la partie « post-install-cmd » de la partie « script » dans le fichier composer.json :

"post-install-cmd": [
    "php artisan clear-compiled",
    "php artisan optimize",
"php artisan migrate"
],

→ Visualiser le résultat

Vous pouvez accéder à votre application sur nom_application.herokuapp.com ou tout simplement en tapant :

$ heroku open --app app-name

 

Bilan Heroku

Comme nous avons pu le voir, Heroku propose un service qui comprend de nombreux avantages :

  • Simple : compatible avec git et gérant les dépendances avec composer, Heroku est très facile et très rapide à prendre en main. De plus, la documentation officielle est très complète et utile : https://devcenter.heroku.com/articles/quickstart
  • Economique : la partie gratuite est suffisante pour déployer des sites de petite envergure tout en autorisant une scalabilité ultérieure.
  • Scalable : en quelques clics, une application hébergée sur Heroku pourra supporter une montée en charge théoriquement infinie. Le système d’add-on permet d’ajouter de nouveaux services au fur et à mesure de la vie du projet.
  • Maintenable : Les applications déployées sur Heroku sont facile à maintenir, les mise à jour sont automatique, ainsi l’environnement d’exécution reste opérationnel. Les paramètres par défaut permettent une gestion basique de l’organisation des ressources en fonction de la charge et cela reste facile à modifier.

Il existe des points négatifs non négligeable à prendre en compte avant toute décision :

  • Maîtrise des données compliquées : il n’y a pas d’interface graphique pour gérer l’arborescence du projet ni la base de données sur les serveurs d’Heroku.
  • Heroku ne fait pas partie du programme Safe-Harbor : la sécurité des données est donc discutable
  • Rentable selon le type de projet : si l’application demande beaucoup de ressources CPU ou d’add-ons, les coûts peuvent monter très vite et la rentabilité coût/rapidité pourrait être inférieure à celle d’un serveur dédié.

 

Bilan Heroku et PHP

Même si le support de PHP n’est qu’en version bêta pour le moment, Heroku nous semble déjà mature pour le déploiement d’applications Laravel. L’émergence de Composer ces dernières années a permis d’industrialiser la gestion des dépendances et donc de faciliter les déploiements. Heroku exploite ces possibilités pour proposer un PaaS PHP aussi simple et performant que pour les autres langages.

Nous avons été étonné par la simplicité  de cette mise en place, la documentation officielle nous a permis d’héberger une de nos applications en cours de développement en un temps record et ainsi de proposer un serveur d’intégration à notre client rapidement et à moindre coût.