đ DĂ©ployer sur Heroku
Aujourdâhui, tu es capable de rĂ©aliser entiĂšrement une application web. Tu utilises le design pattern MVC, tu sais dĂ©velopper la partie back-end, la partie front-end et accĂ©der aux donnĂ©es dâune base MySQL !

Cependant, quel intĂ©rĂȘt de savoir faire tout cela si tes applications restent uniquement accessible en local, sur ton propre pc ?

Objectifs
- Créer un compte et configurer Heroku en distant
- Préparer son repository pour Heroku
- Mettre en place le déploiement automatique via github
Le déploiement
Les terme dĂ©ployer ou mise en production sont utilisĂ©s pour dĂ©signer le fait quâune application va ĂȘtre accessible par dâautres utilisateurs que toi. Il existe plusieurs façons de dĂ©ployer une application web. Câest souvent un choix de lâentreprise dans laquelle tu travailleras en tant que dĂ©veloppeur et mĂȘme si ces tĂąches sont parfois dĂ©diĂ©es aux DevOps, câest important dâĂȘtre capable de dĂ©ployer toi-mĂȘme tes applications.
Lorsque tu mets en production, tu ne fais que copier ton application sur un serveur, qui est en rĂ©alitĂ© une machine physique guĂšre diffĂ©rente de ton ordinateur de dĂ©veloppement. Sur ce serveur, il faut installer les mĂȘmes outils (PHP, un serveur HTTP, MySQL, composer, git, etc.). Il existe plusieurs catĂ©gories de serveurs. Tu peux gĂ©rer toi mĂȘme une machine qui servira de serveur, mais la plupart du temps ce serveurs sont âlouĂ©sâ chez des hĂ©bergeurs (OVH, online.net,...) qui assurent un maximum de sĂ©curitĂ©, disponibilitĂ© et dĂ©bit.
Cette quĂȘte va permettre de dĂ©ployer ton application sur la plateforme Heroku. La quĂȘte que tu vas suivre va te permettre dâutiliser un moyen de dĂ©ploiement pour tes applications : Heroku.
Heroku est ce que l'on appelle une PAAS (Platform As A Service). Câest un type d'hĂ©bergement dit de "cloud computing". Il qui permet de donner accĂšs Ă un serveur configurable simplement pour y installer des applications. Le PAAS sâoccupe de la maintenance des outils liĂ©s au serveur et lâutilisateur (toi dans ce cas) sâoccupe de la maintenance de son application.

Heroku est rapide et simple Ă mettre en place pour une application dĂ©veloppĂ©es dans un grand nombre de langages, dont PHP. Tu nâauras pas besoin dâinstaller manuellement PHP, mySQL, PDO, Composer, etc. !
Tu uUtiliseras la version gratuite de HerokudâHeroku. Tu le devineras, elle comporte moins dâavantages que la version payante mais elle fait lâaffaire pour tester une application en ligne. Les inconvĂ©nients sont les suivants :
-
Si aucun utilisateur ne vient sur lâapplication pendant 30 mns, lâapplication sera reconstruite. Le temps de chargement de la page pourrait alors prendre environ 15 secondes pour le nouvel utilisateur.
-
Si besoin de donnĂ©es persistantes (par exemple un systĂšme dâupload dâimages), il faudra utiliser en parallĂšle un autre service tel que AWS S3 (ce nâest pas abordĂ© dans cette quĂȘte) pour gĂ©rer ces donnĂ©es persistantes
Avant de dĂ©marrer cette quĂȘte, note que si tu as lâintention de connecter ton projet Ă une base de donnĂ©es mySQL, tu devras utiliser le module "ClearDB" de ClearDB,' Heroku qui te demandera un numĂ©ro de carte bleue (qui ne sera pas prĂ©levĂ©e si tu conserves la version gratuite).
Heroku peut ĂȘtre configurĂ© via son interface graphique en ligne ou via la ligne de commandes en installant Heroku en local. Pour cette quĂȘte, tu utiliseras lâinterface graphique.
Objectifs
-
Créer un compte et configurer Heroku en distant
-
Préparer son repository pour Heroku
-
Mettre en place le déploiement automatique via github
Etapes
Prépare ton repository pour Heroku
Le but de cette quĂȘte est de dĂ©ployer une application web rĂ©alisĂ©e Ă partir du simple-mvc sur Heroku. Lorsque tu souhaiteras dĂ©ployer un autre type de projet (Symfony par exemple), le processus sera en grande partie le mĂȘme.
Pour cette premiÚre étape, tu peux utiliser un projet réalisé à partir du simple-mvc que tu aurais déjà versionné sur Github. Sinon, créé un nouveau projet à partir du simple-mvc.
Pour quâil fonctionne avec Heroku, créé un fichier Procfile Ă la racine de ton projet dans lequel il faut Ă©crire uniquement cette ligne :
web: vendor/bin/heroku-php-apache2 public/
Ceci va permettre dâindiquer oĂč se trouve lâindex de ton application.
Push ensuite tes modifications sur ton repository distant.
CréeCréé ton compte sur Heroku
Pour commencer, rends toi sur https://www.heroku.com/ et créé un compte utilisateur.
Une fois sur le dashboard, clique sur âcreate a new appâ
Nâajoute pas de pipeline dans cet exemple. Note simplement que la pipeline pourra ĂȘtre ajoutĂ©e si tu souhaites mettre en place des outils dâintĂ©gration continue.
Une fois lâapplication créée, tu arrives directement sur lâonglet âDeployâ. SĂ©lectionne âGithubâ.

Puis clique sur âConnect to Githubâ.
Tu pourras ensuite directement rechercher le repository que tu souhaites déployer :

Clique ensuite sur âConnectâ Heroku te proposera automatiquement de mettre en place le dĂ©ploiement automatique. Choisis la branche que tu souhaites dĂ©ployer et clique sur âEnable Automatic Deploysâ
Maintenant que ceci est fait, ton application sera déployée automatiquement à chaque fois que tu réaliseras un push sur la branche sélectionnée !
Tu peux vérifier que le déploiement automatique fonctionne de la façon suivante :
- Modifie index.php en ajoutant ceci juste aprĂšs
<?php:
die('Hello world');
-
Commit et push ces modifications sur github.
-
Au mĂȘme moment, observe lâonglet âActivityâ sur ton compte Heroku. Tu constateras que le dĂ©ploiement se fait. Tu peux aussi cliquer sur âBuild progressâ et tu te rendras compte que Heroku comprend par lui mĂȘme, par exemple, quâil faut jouer la commande
composer install!

Tu peux Ă©galement forcer un dĂ©ploiement manuel en cliquant simplement sur âDeploy branchâ en bas de lâonglet âdeployâ.
Une fois dĂ©ployĂ©, rends toi sur lâURL distante de ton application. Sâil est Ă©crit âHello worldâ, câest que le dĂ©ploiement a bien fonctionnĂ© ! Il te reste une Ă©tape : connecter une base de donnĂ©es Ă ton projet !
Connecter une base de données à un projet Heroku
PLa mĂ©thode Ă utiliser pour installer une base de donnĂ©es MySQL, tu vas est dâajouter un add-on Heroku gratuit. Tu pourrais bien sur Ă la place utiliser une base de donnĂ©es distante qui seraitest configurĂ©e pour accepter dâĂȘtre utilisĂ©e par un autre serveur.
Sur Heroku, rends toi dans lâonglet âResourcesâ Sous Add-ons, recherche âmysqlâ puis sĂ©lectionne ClearDB MySQLMySQLl. Pour la version gratuite, sĂ©lectionne âIgnite - Freeâ. Si tu ne lâas pas dĂ©jĂ fait, il te sera demandĂ© un numĂ©ro de carte bleue.
Une fois lâaddon installĂ©, tu asavons besoin des identifiants pour sâyte connecter. Tu peux les rĂ©cupĂ©rer en te rendant dans lâonglet âSettingsâ puis en cliquant sur âReveal Config Varsâ. Ceci affichera les variables dâenvironnement
RécupÚre la valeur de CLEARDB_DATABASE_URL qui est construite de la maniÚre suivante :
mysql://user:password@host/dbname?reconnect=true
Maintenant que tu disposes de ces informations, tu vas les ajouter Ă la suite comme dans lâexemple suivant :

Il sâagit tout simplement de configurer les variables dâenvironnement comme tu avais lâhabitude de le faire dans config/db.php de simple-mvc. La seule diffĂ©rence est que tu as ajoutĂ© une autre variable dâenvironnement qui correspond Ă lâenvironnement.
Si tu utilise le simple-mvc vierge et que tu retires le die(âhello worldâ), tu peux constater que maintenant, ton application fonctionne et lâindex affiche âHello wildersâ car il nâa pas rencontrĂ© dâerreur (et a donc rĂ©ussi Ă se connecter Ă la base de donnĂ©es). Il te reste maintenant Ă importer ta base de donnĂ©es. Pour cela, tu peux utiliser mysql-workbench en indiquant les donnĂ©es de connexions comme dans cet exemple :

Puis si tu utilises le simple-mvc, importer les tables grĂące au fichier sql fourni
Si tu test lâajout dâun nouvel item, ne soit pas Ă©tonnĂ© par les ids insĂ©rĂ©s dans ta base, ils sâincrĂ©mentent ici de 10 en 10 au lieu de 1 en 1 comme tu en as lâhabitude
Challenge
Déplois ton premier projet sur heroku !
En suivant cette quĂȘte, dĂ©plois ton propre projet. Tu peux partir dâun simple-mvc vierge ou dâun projet existant (ton hackathon, un projet 2, un projet perso etc)
Poste ensuite lâadresse de ton projet pour valider ce challenge !
CritĂšres de validation
- Le lien vers le projet fonctionne
- Lâurl est construite de la façon suivante : https://nom-du-projet.herokuapp.com
- Si le simple-mvc a Ă©tĂ© utilisĂ©, la route /item/index affiche bien une liste dâitems