Technologies

DEV@CLOUD – n°2 : Déploiement d’une application Play! au travers du PAAS « Heroku »

Publié le : Auteur: ybarrault Laisser un commentaire
heroku

Dans ce deuxième article, l’objectif est désormais de déployer votre première application Play! sur la plateforme PaaS d’Heroku. Nous prendrons comme exemple l’application du tutorial Play! que vous pouvez développer en suivant le tutorial ou bien en la récupérant ici. A vous de jouer…

Quelques prérequis sont nécessaires pour le déploiement de votre application :

  1. Git : logiciel de gestion de versions du code source (remplaçant de SVN ou encore CVS)
    • Si vous n’avez pas encore installé Git, c’est par ici. Cette installation est composée d’un bash et d’un client GUI (nous n’utiliserons pas dans notre cas ce dernier).Git --version
    • Attention à bien veillez à configurer votre nom et votre adresse email qui seront utilisés lorsque vous propagerez vos modifications (à chaque commit)git--globals
  2. Ssh : pour sécuriser les échanges avec le fournisseur PaaS, vous aurez besoin d’une clé publique SSH personnelle. Pour cela, vous pouvez utiliser :
    • la commande ssh-keygen ou bien le célèbre puttygen. Voici un exemple de marche à suivre. Stockez votre clé publique dans votre répertoire « home » Ex pour ma part : C:Usersybarrault.sshid_dsa.pub
    • l’IDE Eclipse : Preferences – General – Network Connections – SSH2 – Key Management -> Generate DSA ou RSA Key puis Save Private Key sous C:Users<nom-user>.ssh
  3. Créez votre propre compte sur Heroku et installez le client de la plateforme : Heroku Toolbelt 
    • Créer votre compte à l’aide de votre adresse email et confirmez la création depuis l’email envoyé par Heroku que vous recevrez dans la foulée.
    • Télécharger et installer le client Heroku : « Heroku Toolbelt ».

Une fois les prérequis respectés, nous pouvons maintenant déployer l’application :

  • Initialiser votre dépôt Git et ajoutez votre code en gestion de configuration si n’est pas déjà fait avec les commandes (sans oublier de renseigner au besoin votre fichier .gitignore au préalable) :

git-init-add-commit

  •  Connectez vous à Heroku via la commande heroku login :

heroku-login

  • Déclarez votre clé SSH publique à Heroku (en particulier, chaque personne qui souhaite publier sur le même compte heroku devra déclarer sa propre clé publique) avec la commande heroku keys:add

heroku-addkeys

  • Créer une nouvelle application sur heroku via la commande heroku create :

heroku-create

La commande a créé une nouvelle application sur heroku ainsi qu’un référentiel git distant qui devra être utilisé pour déployer l’application. NB: pour donner un nom à votre application, et éviter le nom aléatoire attribué d’office par heroku, utilisez l’option (–app)

  • Le référentiel git distant d’heroku doit également être connu de votre configuration git locale. Vous pouvez l’ajouter via la commande git remote add <nom> <url> et vérifier via la commande git remote -v :

git-remote-add

  • Vous remarquerez que la commande a ajouté dans le fichier .git/config à la racine de votre projet :

git-remote-v

  • Déployez l’application, c’est à dire effectuez un « push » git de votre référentiel local vers le référentiel distant sur Heroku avec la commande :

git push <remote_name> master

NB : Si vous voulez pousser une branche locale, utilisez la commande :

git push <remote_name>  <nom_branche_locale>:master

git-push-heroku-master

 

Heroku va exécuter la commande sbt clean compile stage afin de préparer l’application puis la déployer. La première fois, cette commande va automatiquement télécharger les dépendances qui seront par la suite mises dans un cache propre à Heroku.

  • Vérifier que l’application est correctement déployée avec la commande $ heroku open –app <nom_application> qui va ouvrir dans votre navigateur par défaut l’application à partir de son url :

heroku-open
play-todolist

  • Vous pouvez vous assurer des processus exécutés par Heroku avec la commande heroku ps
  • En développement, nous utilisons une base de données en mémoire pour des raisons simples de performance et de souplesse. Heroku par défaut propose une base de données PostgreSQL. Afin de l’utiliser, sans modifier notre fichier de configuration, nous allons informer Heroku de certains paramètres qu’il devra prendre en compte lors du déploiement et du démarrage de l’application. Pour cela, Heroku propose de passer ces informations à l’aide d’un simple fichier à la racine du projet nommé « Procfile » (ce fichier étant spécifique à Heroku, Play! n’y est pour rien sur ce point). Voici un exemple de Procfile qui permet d’utiliser la BDD PostgreSQL d’Heroku.
web: target/start -Dhttp.port=${PORT} ${JAVA_OPTS} -DapplyEvolutions.default=true -Ddb.default.driver=org.postgresql.Driver -Ddb.default.url=${DATABASE_URL}
  • On remarque que le Procfile permet en autres choses de redéfinir les variables d’environnement concernant le driver et l’URL de la base de données.

Heroku fidèle à sa réputation nous prouve qu’il est aisé de déployer une application dans le Cloud via sa solution PaaS. En effet, nous n’avons eu nul besoin de préciser qu’il s’agissait d’une application Play!, Heroku l’a détecté par lui-même ! On observe également que la plateforme PaaS d’Heroku est proche du RUN@CLOUD mais qu’elle peut aussi néanmoins être considérée comme appartenant aux offres DEV@CLOUD, dans le sens où il est extrêmement aisé de déployer une application sur ce PaaS. Nous verrons toutefois dans les prochain articles que d’autres acteurs du marché vont beaucoup plus loin sur la partie DEV@CLOUD.

L’objet de cet article n’étant pas d’évaluer l’ensemble des fonctionnalités proposées par Heroku mais nous aurons bientôt l’occasion d’approfondir cette plateforme : son architecture, ses possibilités en matière de scalabilité, ses add-ons, la gestion des logs, le monitoring…. dans un prochain billet.

En ce qui concerne le prochain article de cette série, nous aurons l’occasion de déployer la même application sur une autre plateforme PaaS. En effet, nous irons à la découverte d’une alternative à Heroku connue sous le nom de CloudBees.