Archives Wild Code School
PHP Avancé

🚀 DĂ©ployer sur Heroku

QuĂȘte 7 sur 19 · 1 image archivĂ©e

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 :

shell
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 :
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 :

shell
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