De zéro au déploiement : web app Docker
Session du 21 septembre 2023 à 20h00
Pratique & Live Coding
Développement Web & Frameworks
DevOps & Environnement
Deviens membre Premium
Cette session de mentorat est réservée aux membres Premium. Rejoignez-nous pour accéder à toutes les rediffusions des sessions de mentorat !
Premium
- +100h de formations
- +180 exercices de code
- +100h de mentorats en rediffusion
- 20 projets
- Mentorats groupés hebdomadaires
- Support individuel avec nos mentors
De zéro au déploiement : web app Docker
Un exemple en live de développement d'une web app et mise en production:
-
création de l'app
-
création du container Docker
-
création d'une instance sur VPS
-
création du DNS
-
création du host derrière un proxy
-
déploiement du container docker su rue vps
-
protection de l'app via cloudflare
00:00:00 :Ok c'est parti, salut, je vais attendre un petit peu que les gens arrivent, je sais pas s'il y aura du monde ce soir.j'ai vu que Gabriel ne sera pas là, il l'a mis sur discord.
00:00:25 :du coup on sera peut-être pas beaucoup, on va attendre encore un tout petit peu, maisje pense qu'on va commencer, du coup on n'est pas beaucoup, on va y aller,vous travaillez sur quoi en ce moment, vous étudiez quoi en ce moment,vous pouvez soit prendre la parole ou écrire un message. Moi j'ai commencé la formation Django,
00:01:38 :le week-end, pas celui-là, celui d'avant, ça fera deux semaines ce week-end. Ok alors ça va,tu t'en sors ? Non je n'entends pas la musique là, ça va. J'en suis au modèle, j'ai repris les
00:02:04 :deux premières parties en faisant des fiches, parce que du coup je me suis aperçu au momentd'arriver à l'exercice sur les modèles que je me souvenais de pas grand chose, donc je suis entrain de me faire des petites fiches, je suis en train de faire ça bien du coup, en html,
00:02:21 :pour pouvoir avoir mes petits cheat Django. C'est bien, c'est bien ça, je les partageraiaprès quand ce sera fait. C'est toujours une bonne idée de se servir de ce qu'on sait faire,
00:02:41 :pour récupérer. Bonsoir à tous, la lecture du livre TDD, c'est intéressant, franchement j'enentends beaucoup parler du TDD, je suis hyper loin de ça, je sais pas du tout ce que c'est,je sais pas de quoi ça parle. Je vois un petit peu le truc, c'est TDD, je crois c'est
00:03:12 :Ludovic, peut-être qu'il peut nous en dire plus, mais en gros, moi je n'en sais pas beaucoup plus.Je sais pas si Ludovic parle, j'ai vu que ton micro s'est désactivé, mais on t'entend pas.
00:03:29 :Quelqu'un entend Ludovic? Je sais pas Seb, si tu l'entends? Non, ok. Bon c'est pas grave Ludo,si tu veux juste écrire en quelque chose, parce que j'imagine que c'est un gros morceau,si tu peux écrire un petit message pour nous dire en quoi ça consiste, vraiment dans lesgrandes grandes lignes, de faire un explosé. Tu peux commencer, si t'as envie, si t'es d'accord,
00:04:14 :tu t'écris un truc, et puis comme ça. Un test d'abord, ok, ouais c'est un peu ce que le nomveut dire. C'est la seule chose que je sais, un test de développement, c'est que tu orientes tout
00:04:28 :ton code en fonction du test. Bon bah à voir. Bienvenue à ceux qui nous rejoignent. N'hésitezpas à intervenir si vous voulez présenter un truc que vous êtes en train de faire ou quoi.
00:04:47 :Sinon on va commencer. Vous avez vu le programme? Est-ce que ça vous va comme programme?Ok, je vais enlever ma caméra. C'est la cheminée, il fait trop chaud. Ouais voilà,
00:05:19 :c'est ça, on a rallumé le feu. Ok, ne soyez pas surpris, de temps en temps j'afficherai pas,parce que comme on va faire du déploiement etc sur mon serveur, et puis j'ai des DNS qui sontconfigurés, c'est juste pour ne pas afficher les adresses IP de mes serveurs. En tout cas si
00:05:51 :jamais vous en voyez apparaître une, merci de me prévenir. Donc en gros l'idée c'est de se dire,on va partir de zéro et on va faire une application, une application web en l'occurrence,parce qu'il faut qu'elle soit accessible via internet, et on va se dire qu'on aimerait bienla déployer. Vraiment comme si on partait de zéro, on est en local, on développe l'application,
00:06:15 :on crée le container docker, après on crée une instance sur une plateforme type Linode,Hostinger ou DigitalOcean pour avoir un serveur en fait qui tourne H24 qui est disponible. On va
00:06:32 :déployer notre application qu'on aura containerisée au préalable, parce que pour déployer uneapplication c'est toujours mieux d'utiliser des containers, parce que comme ça on peut mieux lesgérer, on peut mieux gérer les shutdowns, on peut mieux gérer l'installation des packages etc. Donc
00:06:48 :on va déployer ce container sur l'instance qu'on aura créée au préalable, et puis on vaconfigurer les DNS, parce que voilà pour atteindre une application il faut configurer un DNS, je vousmontrerai après ce que c'est pour ceux qui ne savent pas. Et en dernier point, on va protéger
00:07:08 :l'application via email et mot de passe envoyé par email. Vous savez des fois quand on se connecte,on a votre adresse mail, vous entrez votre adresse mail et vous recevez un code sur votre adressemail, et via ce code vous pouvez vous connecter à l'application. Donc on va essayer de faire tout
00:07:27 :ça. Ici le but ce n'est pas de se faire une application intéressante, c'est juste pourvous montrer ce qu'on peut faire. Donc du coup on va se créer un nouveau repository, on va dire
00:07:50 :que ça va être une application web test, ok, et puis on va même le publier directement.Ok donc là on se retrouve dans bscode, donc la première étape c'est forcément de créernotre application en local. Donc moi vous me connaissez pour une application web de
00:08:28 :prédilection, je vais prendre Street. Donc ça va être notre application web locale. Pour ça je vaisd'abord créer un environnement virtuel pour pouvoir travailler dedans. Bonsoir à ceux qui
00:08:49 :nous rejoignent. Donc je crée mon environnement virtuel comme d'habitude. Je l'active. Donc làje suis. Là c'est bon vous voyez bien. Et puis n'hésitez pas comme d'habitude à m'arrêter si
00:09:14 :vous ne comprenez pas ce qu'il se passe ou si vous voulez plus de détails. Ok merci. Donc on vacommencer par installer Streamlit. Pas de soucis Pierre, bienvenue. Ne vous inquiétez pas pour le
00:09:27 :retard, on est à la couille ici. Donc j'installe la bibliothèque Streamlit pour créer monapplication locale. Ok.Qu'est-ce que c'est que ce truc ? Ah il n'y a pas de gitignore moi. Pourquoi il ne l'a pas créé ?
00:10:07 :Attendez excusez-moi je vais supprimer le repo parce que quand il ne crée pas de gitignoreaprès c'est un peu la merde. En fait le gitignore. Ah salut Thibault merci. Ouais le gitignore c'est
00:10:36 :important parce que... et puis prenez un gitignore qui a déjà un template parce qu'en fait sinonc'est vraiment la galère. Vous allez publier, vous voyez là ici il publie dans mon repo tout
00:10:49 :ce qu'il trouve dans l'environnement virtuel etc. Donc je vais d'abord supprimer ce qu'on vientde faire. Donc je l'ai supprimé, on va le recréer. Donc là cochez bien ici gitignore, on va faire un
00:11:15 :gitignore python. Ok et puis on va mettre une séance comme ça. Ça marche, on crée le repo, on lepublie. Voilà donc là comme ça c'est mieux. On ouvre. Ok donc là on est mieux. Je vais refaire ce que j'ai fait tout à
00:11:36 :l'heure. Ok on l'active. Et on installe la librairie pour faire notre petit application locale.Ok donc on crée notre fichier principal import librairie. Tu vois Thibault j'ai changé mon code couleur comme tu
00:12:22 :m'avais dit. Je sais pas si tu vois si t'es encore là. Donc on va dire hello world et puis qu'est-ce qu'on vamettre, on va dire oui on va faire comme si on faisait une petite application mais elle fera rien.
00:12:38 :Donc on va dire, on va dire username et on va dire et avec chat message. Je crois qu'on peut mettrechat message. Attendez je vais regarder dans chat message. C'est un widget de Streamlit, chat element et c'est juste pour
00:13:23 :avoir un petit affichage sympa. Si on veut mettre chat message, là oui c'était ça, c'était avatar. Donc name, moi je vaismettre Ali comme ça on aura le petit robot. Et puis on va lui dire username et
00:13:58 :Merci Thibault. Ok donc là c'est notre application, on va voir ce que ça donne. Streamlit run main.Voilà donc on a notre petite application, je ne sais pas pourquoi il m'a mis ça, settings.
00:14:28 :Ok voilà donc what's your name, et l'OPA. On n'a pas fait grand chose, je vais peut-être mettredeux colonnes si ça sera plus beau. Voilà donc là on a notre application, est-ce que c'est assez gros comme ça ?
00:15:07 :On a une application web qui tourne uniquement en local. Donc nous ce qu'on voudrait maintenant c'est que cetteapplication, on voudrait la déployer justement sur un VPS. Donc moi je vais utiliser Linode. Mais avant ça en fait ce qu'on va faire
00:15:23 :c'est qu'on va containeriser l'application. Donc on va le faire en live. Donc là on a juste une application qui tourne avec leserveur mis en place par Streamlit. Donc en fait moi pour containeriser, je vais vous montrer pourquoi c'est intéressant.
00:15:47 :En fait si vous voulez passer cette application à quelqu'un, un collègue ou quoi que ce soit, vous ne pouvez pas uniquement luipasser l'application ici. Vous devez créer un requirement. Un requirement c'est en gros une liste de tous les paquets utilisés pour que
00:16:01 :votre application fonctionne bien. Donc vous êtes obligé de le faire. Donc moi on fait un pip with requirements. En gros il va me balancerdans ce fichier là toutes les bibliothèques qu'il faut pour faire fonctionner l'application. Et sans ça vous ne pouvez pas faire fonctionner
00:16:25 :l'application. Donc vous devez d'abord, vous créez votre fichier, votre application py, vous faites un freeze de vos requirements et vous devezenvoyer à votre collègue le fichier .py, les requirements et en plus vous devez lui dire il faut qu'il fasse un pip install R requirements .txt.
00:18:25 :Donc en fait dans un container vous avez le propre système d'exploitation de l'application dont elle a besoin pour tourner. Donc c'est vraiment intéressant.Et donc pour faire ça il suffit de créer, il y a plusieurs manières de le faire, mais moi ce que je fais c'est qu'au sein de mon application je crée un fichier qui s'appelle
00:18:47 :Dockerfile sans extension. Et donc là ce qu'on fait c'est que je vais créer le Dockerfile avec vous. Mais bon n'essayez pas d'apprendre par cœur.De toute façon même moi je ne connais pas les commandes, ça se retrouve facilement sur internet. Mais l'idée c'est de comprendre un peu ce qui se passe.
00:19:15 :Donc en fait ça va être un container Ubuntu dans lequel il y a Python qui est déjà installé. Donc c'est plus simple.Ça m'intéresse.Ouais en gros c'est ça, il faut le voir comme un environnement virtuel Python mais encore un peu plus évolué. C'est les tables d'eau dessus, tu as ton environnement virtuel,
00:20:20 :Ok. Attendez je vais juste vérifier dans un que j'ai déjà fait.En fait ça automatise. Le Docker c'est pas fait pour automatiser les tâches, c'est fait pour automatiser le déploiement. C'est un peu différent.
00:20:43 :Attendez je vérifie juste.Je vérifie quelque chose.Désolé.Je vérifie juste que ma syntaxe est correcte.Donc en fait ici ce qu'on dit c'est qu'on va copier tout ce qu'il y a dans notre dossier actuel, on va le mettre dans le dossier application de notre container.
00:21:41 :Ok.Ouais c'est un peu ça. C'est plutôt une image. Il faut voir ça comme une image. C'est un peu plus proche de ça.C'est un peu comme si quand vous travaillez avec les images virtuelles, les virtual blocks etc.
00:22:03 :En fait vous créez un environnement Ubuntu isolé de votre propre système d'exploitation avec toutes les librairies installées.Donc là c'est un peu ça. Après les puristes des containers sauteraient au plafond.
00:22:13 :Mais c'est vraiment environnement et c'est ce qu'on appelle pour des microservices.C'est vraiment un Docker container fait une chose.Là où une image de Ubuntu par exemple de virtual blocks vous auriez plein de logiciels installés dessus etc.
00:22:32 :Là c'est vraiment du microservice donc notre container il fait uniquement une chose, il sert notre application.Et donc là vous voyez qu'on va commencer à rentrer dans le process un petit peu d'automatisation d'installation.
00:22:44 :On peut lui dire que dès que tu vas te créer, tu vas faire un type R requirement.Et pourquoi ça, ça marche ? Parce qu'en fait le requirement qu'il y a ici, je l'ai copié dans le dossier du container app.
00:23:00 :Donc sinon ça ne marcherait pas.Ensuite ce qu'on fait c'est qu'on va dire expose le port, on est sur 85.01 pour du Streamlit.Donc en gros ça c'est important parce que si vous ne dites pas à votre container ouvre moi le port et expose le 85.01,
00:23:22 :par défaut lui il a tout fermé votre container. Donc ça ne fonctionnera pas si vous ne le faites pas.Et pour terminer, vous savez ici quand on lance une application Streamlit et qu'on fait Streamlit run machin,on le fait ici en définissant la commande.
00:23:38 :Et en fait si vous voulez, mon intelligence artificielle elle le met déjà.Mais en gros ici quand vous écrivez Streamlit run app, c'est exactement ici.
00:23:51 :Il faut savoir que dans un docker container, quand vous créez un docker file, vous pouvez avoir plusieurs runs.Donc j'aurais très bien pu dire par exemple run pipe update ou des choses comme ça.
00:24:04 :Par contre vous n'avez qu'une seule commande.Et la commande en fait c'est ce que vous voulez, c'est un peu le cœur de votre application, de votre container.
00:24:12 :Vous voulez que lui fasse ça et qu'il vous serve ça.Donc voilà.Donc ça c'est pour l'aspect container.Donc si on avait ça, on peut avoir notre container.
00:24:26 :Et moi ce que je fais souvent, c'est que docker-compose.yml, c'est que je me crée un docker-compose même si j'ai qu'un seul container.En fait le docker-compose ça sert à orchestrer plusieurs containers.
00:24:41 :Donc si par exemple vous avez une application Django, vous auriez potentiellement un docker file avec votre application back-end Django.Et vous auriez un autre docker file avec un container qui ne contiendrait que la base de données.
00:24:56 :Donc vous auriez deux containers et le docker-compose lui permet de faire discuter entre eux les deux containers que vous avez créés.Donc voilà, vous imaginez que c'est quand même, on rentre un peu là dans le cœur du DevOps.
00:25:09 :Si par exemple vous voulez déployer une application Django, ça fonctionne avec une base de données.Imaginons que vous ne travaillez pas avec SQLite mais avec MySQL, ça peut être parfois le bordel de mettre en place un serveur SQL,créer une base de données et ensuite il faut que Django communique avec votre base de données.
00:25:30 :Là avec les dockers c'est super parce que vous pouvez avoir un docker Django, un autre docker base de données,et avec votre docker-compose vous allez pouvoir les faire communiquer entre eux.
00:25:40 :Et quand vous allez déployer votre application Django, vous n'allez pas devoir faire setup de votre base de données et de votre back-end Django.Vous pourrez déployer d'un coup vos deux containers.
00:25:52 :En fait je les appellerais, ils auraient le même nom, ils auraient le docker-file.C'est juste qu'ici j'aurai un dossier, je ne sais pas, je l'aurai appelé back-end et après j'aurai un autre dossier.
00:26:08 :En fait je n'aurai même pas besoin de créer le container MySQL parce qu'il existe déjà dans les librairies de Docker Hub.Il y a les développeurs officiels de MySQL qui développent en container.
00:26:37 :Donc ici c'est un petit peu différent.Et donc là on va voir nos services.Comme je vous le disais tout à l'heure, on parle de microservices.
00:26:50 :Donc là on va dire qu'on a notre application web, build, et tout ça je vais vous expliquer à quoi ça sert.L'idée ici ce n'est pas de vous faire un cours sur le docker-container etc.
00:27:16 :C'est juste que là je vous montre comment vous voyez le process.Donc en gros le docker-compose il marche comme ça.Vous définissez plusieurs services.Là en l'occurrence on n'en a qu'un seul.
00:27:31 :Ici je définis un service web qui va s'appeler web.Et je lui dis build.Parce qu'en gros je lui dis que tu vas me construire ce container-là issu de cette image.
00:27:44 :Et ici pourquoi je lui dis ça ?Parce que je lui dis que je voudrais que le port 8501 qui est le port ici que j'avais exposé dans mon docker-container.
00:27:57 :Je veux en fait que tu me le map avec le port 8501 de mon ordinateur, de mon host.Donc ici retenez que c'est le port du container.
00:28:11 :Et ici c'est le port sur lequel vous voulez accéder depuis votre interface.C'est un petit peu compliqué si vous n'avez jamais vu les dockers etc.
00:28:21 :Mais c'est juste pour voir le principe.Et donc maintenant si je fais juste docker compose app.Je vais juste le mettre en app comme ça vous allez voir ce qu'il se passe.
00:28:35 :Donc en gros ici ce qu'il fait c'est qu'il va voir le premier service.Il va construire build.Il va construire ce qu'il trouve là dedans.
00:28:43 :Donc il va faire tout ça.Donc là en fait il est en train de construire mon image.Donc là vous voyez il est en train de faire ce que je lui ai dit.
00:28:52 :Donc là il me copie ce qu'il y a sur mon local dans le dossier app de mon container.Et il me run l'installation.Donc ça veut dire que je vais avoir un environnement tout prêtavec tout qui est déjà prêt pour l'utilisation.
00:29:06 :Donc là vous voyez il est en train de faire le pip install requirements.J'ai un petit problème.Qu'est-ce qu'il n'aime pas ?Streamlit.Ah oui je me suis trompé.
00:29:19 :C'est bien ici.Mon image je me suis trompé.Il faut que je la reconstruise.Donc là il est en train de faire le pip install requirements.
00:29:35 :Hum.Attends mais qu'est-ce qu'il n'aime pas ?Value A.PYJ'ai jamais demandé de copier A.PY.Il y a quel endroit il dit ça ?Je vais supprimer.
00:30:21 :L'image LS.Ça c'est pour afficher toutes les images qui existent sur votre machine.Hum.Ça c'est pour supprimer l'image blockeur.L'image CRM.Ça c'est pour limiter tous les containers.
00:30:47 :Il faut juste que je les taime.Pourquoi il n'aime pas ?Ok c'est lui.Je l'efface pardon.Excusez-moi c'est juste un petit bug.Hum.Ok.
00:31:39 :Voilà.Et donc maintenant on peut recommencer.Donc ça pour dire en fait quand je dis Docker Compose.Attends mais je n'ai pas vu les messages.
00:31:52 :Et il installe ça dans.Bah en fait il installe le container.Mais c'est pas vraiment.C'est ça qui est beau avec les containers.C'est qu'il n'installe pas un container.
00:32:05 :Enfin.Le container c'est une image.Donc moi il n'a rien installé sur mon PC.J'ai juste un Docker Engine qui tourne.Et qui permet de lancer les containers.
00:32:14 :Mais il n'y a rien installé.Et en fait moi j'accède à ce que expose ici.Quand je fais un port 8501, 8501.Ça veut dire que je dis.
00:32:26 :Que je veux que mon ordinateur local.Il communique avec mon container.Via cette passerelle ici.Mais ce qui est bien c'est que rien n'est installé.
00:32:36 :C'est juste une image.Donc attendez.Si je le relance ici.Ou je rebuild.Salut Gab.Voilà c'est ça.Et après ce qui est bien c'est que par exemple.
00:32:53 :Dans la plupart des cas.Si tu développes une application.Sur macOS ou sur Windows.Et que tu la containerise.Bah en fait le container.Il sera capable de.
00:33:05 :Un peu de chose près.Ça dépend de l'architecture quand même de ton processeur.Mais.Tu pourras utiliser une image Windows.Qui était développée via Windows.
00:33:16 :Sur Linux et vice versa.Donc ça permet vraiment de partager.Et déployer facilement des applications.Donc là vous voyez que maintenant.J'ai mon application qui tourne.
00:33:27 :Ici on n'en a plus besoin.On n'en a plus besoin.Je vais vous montrer via Portainer.En fait Portainer.C'est un truc que j'utilise.Pour administrer tous mes containers.
00:33:41 :Dans différents environnements.Je l'avais déjà montré je crois.Donc là c'est mes containers sur mon local.Et là c'est mes containers sur mon DPS Linux.
00:33:49 :Donc là si je vais voir mes containers.Vous voyez que j'ai un container.Qui s'appelle demo-at-web.Ici vous voyez que les ports.De liaison c'est les ports 8501.
00:33:59 :Pour communiquer avec le port 8501.Du container.Je peux même grâce à Portainer.Si je fais console.Connect.Là vous voyez je suis dans mon container.
00:34:10 :Donc j'ai bien les requirements.Donc en gros il a copié tout.Tout ce que j'avais ici dans mon local.Je l'ai dans mon container.Donc ça c'est un environnement Linux.
00:34:21 :Je peux faire ce que je veux dedans.Vous êtes dans un environnement Linux.Parce que ici quand j'ai créé mon image.J'ai fait.From Python.
00:34:33 :Et From Python c'était lui-même.Issue de Ubuntu.Donc voilà là j'ai mon image.Et si je me connecte.En local.Host.Au port.8501.Vous voyez que mon application elle fonctionne très bien.
00:34:51 :Et sachant que j'ai en aucun cas.J'ai fait un.String neat.Bonne machin.Ensuite.C'est une image à part qui tourne sur mon PC.Donc là en l'occurrence.
00:35:05 :Vous voyez que.Si je liste les containers.Il y a plusieurs containers qui tournent.Et voilà elle tourne.Et c'est un environnement Linux.Et je peux y accéder via la communication.
00:35:17 :Ici via ce point.Est-ce que pour l'instant.C'est à peu près clair.Ce qu'on a fait.Maintenant je vais vous montrer le déploiement.Sur.Sur un VPS.
00:35:31 :Donc un VPS.Qu'est-ce que c'est ?VPS c'est pour Virtual Private.Non c'est.VPS.C'est.Serveur privé virtuel.Oui merci.Donc ce que je vous propose.
00:36:01 :C'est que moi mon.Ma plateforme de prédilection pour avoir des VPS.C'est Linode.Je vais.Qu'est-ce qu'on va faire.Au pire si vous avez vu.
00:36:17 :C'est pas grave.On va créer une nouvelle instance.Linode.Donc ici en fait vous allez dans Linode.Vous allez arriver sur votre dashboard.Et puis vous pouvez aller.
00:36:29 :Choisir ce que vous voulez.Donc moi je vais dire.Je veux.Je veux du Ubuntu ou du Debian.Moi je veux du Ubuntu.Voilà donc moi je veux une instance Ubuntu.
00:36:45 :La région.À Paris.Et ici vous allez.Après ça dépend du fournisseur.Si vous avez dans Dedicated CPU.Vous allez avoir des gros.Des grosses instances.
00:36:59 :Qui sont à 36$ par mois.Moi je vais dans shared CPU.Pour CPU partagé.Et là la plus petite instance de Linode que vous pouvez avoir.
00:37:07 :C'est Nanode.À un maximum 5$ par mois.Donc je dis que je veux ça.Vous avez déjà 25Go de stockage.Et 1TB de transfert.Donc voilà.
00:37:21 :Je vais utiliser ça.On va dire ici.Que c'est.Instance.Test.Démo.On va entrer un.Oula qu'est-ce qu'il se passe.On va entrer un passeport.
00:37:43 :Donc là qu'est-ce qu'il met. Non je vais plutôt le choisir moi-même.Choisir mon propre.Ce sera pas lui qu'on.Après je vais la supprimer l'instance.
00:37:53 :Donc c'est pas grave.Et on va dire que je pense.Qu'on est bon pour l'instant.Donc je vais faire créer Linode.Je vais le faire ici.
00:38:11 :Je vais juste le remettre là.Pour pas afficher des infos.Mais normalement c'est bon.Voilà.On est sur.Une instance.Sur le cloud.Donc là elle est en train d'être créée.
00:38:27 :Je pense.Et donc ça vous avez l'adresse IP.Ici de votre instance.Donc là je vais la copier.Je vais même peut-être pas la copier.
00:38:37 :Je vais me connecter en SSH dessus.Donc le SSH.Pour ceux qui connaissent pas.En fait c'est un moyen de.De se connecter.A distance.
00:38:53 :A un serveur.Donc là je vais le faire.Donc là vous voyez qu'il est en booting.Il est en train de se connecter.Je vais attendre un peu.
00:39:03 :Ok c'est bon. Donc là elle tourne.Et donc maintenant je vais me connecter dessus.Donc je vais dire SSH.Mon adresse IP.Et route dessus.
00:39:15 :Route.Ok donc là je dis yes.Et là je vais mettre mon password.Que j'ai défini.Ok donc là je suis sur mon instance.Donc il n'y a rien du tout.
00:39:33 :Ce qui est pas mal c'est que vous avez ici.Un environnement Linux.Que vous pouvez accéder à distance.Depuis n'importe quel terminal.L'IP de votre instance.
00:39:43 :Et si par exemple vous êtes sur Windows.Vous pouvez de cette manière.Accéder à.Un environnement Ubuntu.De cette manière.Donc là maintenant nous ce qu'on va faire.
00:39:55 :C'est que notre application.Je l'avais mise sur GitHub.Je vais.Je vais l'envoyer sur GitHub.Et ici je vais aller la chercher.Je vais créer.
00:40:11 :Mkdircdapps.Ok.Je vais faire un bit.Je vais aller sur GitHub.Je suis là.Je vais faire un clone.Je vais venir.Chercher tout ce qui se passe.
00:40:35 :Je vais surtout aller chercher mon image.De Docker.On pourrait la mettre sur Docker Hub.Pour venir faire un pool directement de l'image.Un pool tiré.
00:40:45 :Mais là je vais faire un peu le même.Ce que j'ai fait sur mon local.Je vais le faire sur mon.Sur le Linux.Donc on va faire.
00:40:55 :Git clone.Ok.Donc là c'est mon machin.Ici.Hum.Comment je peux faire pour le faire apparaître.Je vais arrêter le partage d'écran.Juste pour.
00:41:11 :Juste pour récupérer un mot de passe.Je vais le mettre ici.Comme ça je ne les apparaîtra plus.J'ai mis mon mot de passe.Parce qu'en fait c'est un.
00:41:29 :Un token.Du coup je le copie.Ce n'est pas que je n'ai pas confiance en vous.Mais c'est parce qu'on ne sait jamais.Si jamais la vidéo elle disparaît.
00:41:39 :Elle se retrouve sur Youtube.Je ne sais quoi.Je repartage.Voilà.Donc là en fait vous voyez que.Sur mon Linode j'ai ma.Démo.Donc là je retrouve bien tout ce que j'ai fait.
00:41:57 :Et on va reconstruire ici.On a juste à faire Docker.Compose.Update.Qu'est-ce qu'il ne veut pas.Ah oui parce qu'en fait c'est une nouvelle instance.
00:42:09 :Donc il faut que j'installe.Suite Glory.On va installer.Docker.App.Installe.Docker.Ouais j'imagine.Ok.Donc là maintenant on peut faire.Le déploiement.Facilité.
00:42:49 :Docker Compose.Update.Il faut que j'installe aussi.Je pensais qu'il venait avec Docker.Ok. On y retourne.Donc là vous voyez je suis en train de déployer.
00:43:11 :Mon image directement.J'ai juste fait.J'ai juste eu à mettre mon Docker Compose.Et donc là vous voyez.J'ai pas eu à m'embêter.A faire installer les requirements.
00:43:23 :Pour mon Python.J'ai pas eu à lancer.Les commandes pour mon Streamlit.En fait il fait tout tout seul.Donc là il est en train de le faire dans mon container.
00:43:33 :J'attends un petit peu.Le temps qui se passe.Ok.Donc là c'est lancé.Et donc maintenant ça veut dire.Que si je vais sur.L'adresse IP.
00:43:57 :Donc on a dit que c'était combien.Je vais la copier ici.Hop.Et que je vais voir.Mon port.8501.Voilà.J'ai mon application qui tourne.
00:44:13 :J'ai déployé assez facilement.Et on peut dire.Je m'occuperai de ce genre.Donc vous voyez l'application elle fonctionne très bien.Il n'y a pas de.
00:44:23 :Il n'y a pas de soucis.Maintenant vous allez me dire.Ok mais c'est un peu.C'est peut être un peu chiant.De devoir taper l'adresse IP là dessus.
00:44:35 :Moi ce que j'aimerais.C'est pouvoir dire.Taper dans un URL.Par exemple quand vous faites.DocStream.frJe zoom un peu.Vous faites DocStream.fr.Il fait une résolution.
00:44:53 :DNS ça veut dire Dynamic Name Server.Parce que.Il fait le lien entre l'adresse IP.Et le nom de votre serveur.C'est une espèce de bibliothèque de correspondance.
00:45:03 :Les DNS.Tout simplement parce que vous n'avez pas envie.Et vous ne pouvez pas humainement.Vous imaginez.Si tous les sites que vous visitez.Vous deviez vous souvenir des adresses IP.
00:45:17 :Par exemple celle de Google.Celle de DocStream.Celle de ChatGPT.ChatGPT vous vous en souvenez.DocStream vous vous en souvenez.Mais vous ne vous souvenez pas d'adresse IP.
00:45:29 :Par contre les serveurs.Eux ils ont des adresses IP.Ils fonctionnent.Ils communiquent entre eux.Grâce au protocole IP.Et du coup ce qu'il faut.
00:45:41 :C'est qu'il faut faire une correspondance.Entre l'adresse IP.Et un nom de domaine.Donc là moi j'ai déjà un nom de domaine qui existe.Qui est packdev.net.
00:45:51 :Et moi ce que j'aimerais bien faire.C'est que lier mon application.A ce domaine.Donc je vais aller dans mon.Moi j'utilise Cloudflare.Attendez je le mets là sur le côté.
00:46:07 :Juste pour cacher un petit peu.Une partie.Qu'est ce que je peux montrer.Voilà je vais le faire ici.Bon c'est pas grave.De toute façon ça ne changera pas grand chose.
00:46:35 :Donc en gros ce qu'on fait.C'est qu'on va dire que.On voudrait lier.L'adresse IP de notre.L'adresse IP de notre.De notre serveur.A un nom de domaine.
00:46:57 :Un petit peu plus sympa.Donc là on va dire.Comment on va dire.Le mot.Webapp.Et on va dire tu me lis.Je crée une nouvelle entrée.
00:47:13 :Dans ma correspondance DNS.Donc si par exemple vous avez Cloudflare.Ou je ne sais pas.GoDaddy.Ou Namechip.Pour tout ce qui est.Nom de domaine.
00:47:27 :Parce qu'en fait quand vous.Ça coûte de l'argent.Ça coûte de l'argent d'avoir un nom de domaine.Donc vous avez des fournisseurs de nom de domaine.
00:47:35 :Qui vous permettent d'avoir les noms de domaine que vous voulez.Et en fait.Là on crée un sous-domaine.C'est une adresse par laquelle.On va pouvoir atteindre notre application.
00:47:45 :Je vais zoomer.Je ne sais pas si je vous dis bien.Donc ici je crée un sous-domaine.Qui s'appelle DemoWebapp.Et je le lis.A mon adresse IP.
00:47:57 :Je l'enregistre.Donc là ce n'est pas terminé.Parce qu'en fait on a juste.On n'a pas dit.Il faudrait que tu ailles sur ce port là.
00:48:07 :Pour atteindre mon application.Donc il y a deux solutions de le faire.Soit on utilise un serveur.Un NGX proxy manager.C'est un reverse proxy.
00:48:17 :Ou en fait.Ça va être une application un peu spéciale.Qui va recevoir toutes les requêtes.Et qui va les redistribuer.Sur votre instance.On ne va pas faire ça ici.
00:48:29 :Ça va être un peu compliqué.Ce que je vous propose.C'est qu'on fasse ce qu'on appelle un tunnel.On ne va pas rentrer dans le détail du tunnel.
00:48:39 :Mais en gros le tunnel.Il va permettre de lier une application.Facilement.A un IP défini.Donc on va le définir ici.Je l'avais déjà fait une fois.
00:48:51 :Je ne sais pas si vous vous souvenez.On va dire que c'est.Demo.Hop.Tunnel.Et tout ça.Je vais le faire rapidement.Si un jour vous avez à le faire.
00:49:15 :Vous pouvez me dire.Et puis je vous montrerai.Comment ça constitue le tunnel.Mais ici on ne va pas rentrer dans le détail.Là en fait.
00:49:25 :Je suis en train de créer un tunnel.Entre mon serveur.Et mon serveur de DNS.Et ici on crée le tunnel.Donc là.En fait j'ai fait une bêtise tout à l'heure.
00:49:39 :Je l'ai créé.En fait le tunnel.Il va créer automatiquement.Il va créer automatiquement le DNS.Je n'ai pas besoin de le créer à la main.
00:49:53 :Donc celui-là je vais le virer.Il va nous le créer automatiquement.Le tunnel.Donc là je retourne là-dessus.Donc là on crée notre sous-domaine.Un peu comme on a fait tout à l'heure avec le DNS.
00:50:07 :Donc là on a dit.Demo.Webapp.Le domaine.Moi c'est mon domaine.Et ici on va dire que c'est du HTTP.Et donc l'URL qu'on va prendre.
00:50:21 :C'est ici notre URL.C'est notre IP.De serveur.Où est-ce qu'elle est ?C'était celle-là ?Je ne sais plus.Ok on est là.Et on sait que ça tourne sur le port5.0.1
00:50:49 :Donc là on va créer notre tunnel.Ok.On va aller voir si ça fonctionne.Public hostname.Demo.Voilà. Donc là maintenant si vousvous allez voir, je vous mets ça ici.
00:51:07 :Si vous allez le voir.Normalement ça... Allez-y et dites-moi si ça fonctionne.Ok.Donc là on a déployé une application.Juste pour récapituler.On a créé une application en local.
00:51:29 :Sur notre...En local du coup.On l'a développé.Ensuite on l'a containerisé.Pour pouvoir installertoutes les requirements, etc.Tout ce qu'il faut, l'endurement, pour que tout fonctionne bien.
00:51:43 :Ce container,on l'a mis sur une instanceLinode en l'occurrence.Donc c'est un serveur qui tourne.Notre image,on l'a lancée sur ce serveuret elle sert une applicationsur une adresse IP.
00:51:59 :Pour éviter d'avoir à se souvenir de l'adresse IPqui en plus parfois peut changer.Et bien on a juste...On a lié l'adresse IPavec un nom de domaine pour s'en souvenir plus facilement.
00:52:13 :Ouais, exactement Pierre.Les tunnels en fait c'estun des moyens assez safede déployer une applicationsur ton local.Sur ton ordinateur.Sans ouvrir de port.
00:52:30 :Parce que là tu vois,en l'occurrence sur les instancestoutes les instances Linodebeaucoup de ports sont ouverts.Et en faitj'ai pas de problèmede port non ouvert, etc.
00:52:44 :Donc quand t'avais une applicationsur ton PC que tu voulaisl'ouvrir à internet,il faudrait que tu ouvres des ports.Parfois on n'a pas envie.
00:52:54 :Et donc en faitt'as pas enviede faire ça.Donc tu passes par des tunnels.Donc je te conseille de regarder tunnels Cloudflare.C'est un moyen assez simple et efficace.
00:53:08 :Après t'as lesNGX Proxy Manager qui permettent de faire ça.En gros le NGX Proxy Managert'as un seul port ouvert sur ton PC.Notamment le 81par exemple.
00:53:20 :Et tu n'ouvres que ce port là.Et tu peux distribuer les requêtes.Mais les tunnelsça fonctionne bien.Moi j'ai utilisé au début,un NGX Proxy Managermais c'est assez simple de mettre en placeun tunnel comme ça.
00:53:36 :Donc là tu vois par exemple dans mon tunnelj'ai mis l'adresseet le portde mon inode.Mais tu aurais très bien pu mettre ton adresse publiqueici de ta box.
00:53:48 :Alors le requirementqui est dans le Gitignore.Non le requirement s'il n'est pas dans le Gitignore.Parce que justementsi tu le mets dans le Gitignoreça veut dire qu'il ne sera jamais envoyédans le GitHub.
00:54:08 :Et s'il n'est pas envoyé dans le GitHubtu ne peux pas faire le...En fait tu vois ici quand j'ai faitun poolde monde mon repo GitHub.
00:54:20 :Si je n'avais pas le requirementje n'aurais pas pule faire.Mais en fait ce que j'ai montré làc'est un petit peu dommageparce que le containeron a dû le reconstruiredepuis le inode.
00:54:36 :Le truc ultime normalementc'est de créer icivotre containeravec tout ce qu'il faut dedans.Tout ce qui marcheetc. Et après vousc'est un peu la même chose que GitHubvous publiez votreimage surDocker HubEn fait Docker Hubc'est un peu comme GitHubc'est un endroit où sont hébergées toutes les images.
00:55:02 :Et après sur leinode vous faites juste un poolde lade votre container.Et comme ça il n'y a même pas besoin icide faire tout ce que j'ai fait de le reconstruire.
00:55:14 :Mais voilà.Et si jamaistu veux ne pasafficher desle fichier .env donc çac'est un peutu peux le faire avecsimplement ici tu fais environnementet tu metsje ne sais plus exactementje crois que tu mets le nom du fichierenvironnementtu le mets ici
00:55:48 :soit tu mets tes variablesd'environnement directement icien disant par exempleDjango c'est secret keytu le mets ici dans tonDocker Compose. Mais c'est un petit peu embêtant
00:56:00 :parce que ton Docker Compose parfois il se retrouve dans leGitHub. Donc sinon tu faistu mets tontu mets le lien vers tonfichier .env et ton fichier .env il faudra que tu le mets
00:56:10 :sur ton serveur.Est-ce que c'est clairpour toi Yannick là ce que je viens de dire ?En faitje crois que tu peux avoir un .env
00:56:20 :et là tu metset donc ici tu aurais par exempleton .env avec tes variablesd'environnementet il faudrapar contreton .env lui il sera dans ton gitignore
00:56:34 :forcément parce que tu ne veux pasqu'il apparaisseet il faudra juste que dans tonsur ton serveurque tu mettes le .envsinon il ne le trouvera pas.
00:56:46 :C'est comme ça qu'on gère le secretOups ! Où est-ce que j'en étais ?J'étais en train de récapituler un peuce qu'on avait fait. Donc on avait fait le tunnel et oui
00:56:58 :ce que je te disais Pierre c'est que ici tu peux mettreton adresse IP à toipour exposer l'application qui est en trainde tourner. Donc
00:57:06 :là on est content on a une application qui tourneon peut faire une dernière étapede customisation. Imaginezpar exemple que moi je m'en sers souventquand je fais des démonstrations à des clientsoù l'application n'est pas encore opérationnelleet en productionet que c'est juste une démovous pouvez dire j'aimerais bien
00:57:26 :doncon peut créer une applicationdisponible dans Cloudflareje vais vite mais ici c'est justedémorestrictionvoilà on peut diremodulation expire. Et donc là en fait
00:57:46 :vous allez lier une application Cloudflaredonc en fait ce que je fais c'est que je crée une applicationCloudflare qui va me permettre de restreindrel'accès à mon applicationet il suffit juste en gros de lui diresur quel domaine vous voulezque cette application agissedonc là nous c'était quoi notre petit domaine
00:58:02 :c'était domaine web appok donc j'y vaisdonc c'était démowebapple domaine c'était pack devoket donc ce qu'on veut c'estvous allez comprendrece que je suis en train de raconterrestrictiondémoweb apphelloet donc là vous voulez faire uneinclusion par mail donc ça veut dire que
00:58:36 :est-ce quequelqu'un veut bien me donner son adresseemail dansle chat ou sinon moi je mets juste lamienne c'est pas gravemais c'est juste pourl'exemple pack devatgmail.com
00:58:54 :donc là je mets cet email làsi je reçois une autre email ok mercivous êtes sympa donc je vais pastoutes les mettre je vais juste on vadire que par exempleon va donner l'autorisationà Yannickon vamettre aussithequoeton va mettre aussi celle de Pierre et pour
00:59:22 :faire le test on va pas mettrecelle de Sebet du coup vous allez voir ce queça fait donc aussila machin nextapplicationvoilà donc maintenant normalementsi vous retournezsur l'application sur le lienque je vous ai envoyé là surrobodemo.packdev.net
00:59:50 :allez-y tous et dites moi ce que vous aveznormalement vous allez avoir la même chose que moivous allez avoirune espèce de porte crééepar Cloudflaredites moi si ça fonctionneok donc vous avez bien ça et donc maintenantsi vous rentrez tous votre applicationchacunvotre adresse mail que vous m'avez donné
01:00:10 :que j'ai renseignénormalement vous allez avoiril va vous envoyerje vérifie attendezest-ce que j'ai mis la mienne aussi pour testerouais j'ai mis la miennevous rentrez votre adresse mailvous rentrez votre adresse mailvous allez recevoirun code sur votre adresse mail normalementdites moi si ça a marché
01:00:52 :ouais donc vous avez reçu un codemoi je ne sais pas pourquoi pour l'instant je ne le reçois pasj'ai du mal à configurer le trucj'ai du me planterc'est pas graveet du coup ça devrait marcher pour tout le monde sauf pour Seble malheureux parce qu'en fait je n'ai pas
01:01:12 :rentré son adresse à luiet donc en fait il a reconnu une adressemail qu'il a, Sebdis moi si ça a marché chez toimais du coup je ne pense pasen fait tu as pas reçu de codemais ça vous permet en fait justementde restreindre l'accès
01:01:28 :aux personnes que vous voulez par e-maildonc par exemple vous avez l'e-mail de votre clientvous le renseignezet comme ça vous pouvez restreindrel'accès aux gens que vous autorisezet il y a un trucah oui regardez ce que j'ai mispour mon adresse mailc'est normal que ça ne marche pas
01:01:46 :voilàje metsun jourje vais juste le fairebon bref vous avez capté le trucet ce qu'il y a d'assez puissantc'est que vous pouvezaller plus loin dans les restrictionslà j'ai juste mis e-mailmais imaginez quevous ne voulez pas je ne sais pasque
01:02:32 :donc là on a juste mis les e-mailsmais vous pouvez en avoir d'autresvous pouvez dire add includeau lieu de mettre e-mail vous pouvez direcountry par exempleet en gros vous allezvous pouvez interdireou autoriser uniquementles requêtes qui vont venirje ne sais pas de France
01:03:02 :d'Afriqueet deon va dire de Géorgiemais vous allez pouvoir direadd excludeet donc là vous allez pouvoir exclure en revanchetoutes les requêtes qui vont venirje ne sais pas d'Albanie, d'Argentineça peut être un moyenpar exemple d'évitersi jamais vous savez queen Inde il y a beaucoup de
01:03:26 :gens qui développent des botsvous pouvez interdire toutes les requêtes qui vont venir d'Indesur votresur votre applicationdonc voilà c'est un moyenassez efficace de protéger votre applicationquand vous êtes en démo ou mêmeen production si vous voulez protéger au maximumvotre application vous pouvez dire
01:03:44 :je stop toutet après j'autorisegranularement ce que je veuxbon bah voilà c'était tout justeje suis allé un peuvite mais c'était pour vous montrer un peu le principedufranchement on a vu à peine un dixièmede ce que peut offrir Dockeret on a vu un dixième
01:04:08 :de ce que peut offrirCloudflare etc mais bonon voit petit à petit des chosesah oui bien sûrça se trouve sur la docla documentation officielleil y a une communauté extraordinaireaussi de Dockerdonc vous aurez de l'aideok bah merci Pierrec'est sympaet oui donc comme je dis à chaque fois
01:04:34 :l'idée c'est de vous montrer les chosesqui existent ouais voilàen gros je vous montre des trucset puis après vous creusezde toute façon l'idée c'est pas de vous montreraprès vous creusez de toute façon l'idéec'est pas qu'à la fin du mentorat vous sachiez le fairec'est impossible
01:04:50 :je veux pas m'avancer sur ce que vous savez fairemais si vous connaissez pas avant le mentoratet que vous découvrez c'est impossible de savoir le fairel'idée c'est de savoir que ça existeet puis après d'aller creuser soi-même ou même de poser des questionsj'arrête la présentationpour pas faire de bêtises
01:05:08 :bah voilàc'est un peu ce que je voulais vous montrerdonc on a vu un peu le cheminementc'est cool si vous avez vu des nouveaux trucsok bahdites moi si vous avez des questionssur ce qu'on a vuavec plaisirouais j'imaginemais en faitfranchement c'est en faisant
01:06:06 :c'est en forgeantqu'on devient forgeronc'est vraiment en faisantessayer de déployersoi-même ses applications etcqu'on comprend un peufaut pratiqueret je pense qu'il fautpar contre avoir été confrontéau problèmeavant de comprendrel'intérêtparce que si vous avez jamais été confrontéàdes difficultés de déploiement d'une application
01:06:36 :parce qu'il y avait des dépendances etcbah vous allez vous diremais en faitpar contre si vous avez déjàété confronté à un genre de problèmedes mises à jour etcou même quelqu'un qui travaillesous Windows qui développe une applicationqui veut la faire tourner sur Linux
01:06:56 :bah voilà typiquement Docker peut vous aiderdans ce genre de problèmeet voilàdonc c'est beaucoup plus simpleet ensuiteouais c'est normalaprès quand tu manipulesbah tuça devientc'est comme une languecomme quand t'apprends l'anglaisou l'espagnoltu comprends rien à l'égliseet après ça te paraît naturel
01:07:24 :donc c'est comme toutetouais bah voilàdonc en fait le Dockerje trouve que c'est vraiment très pratiquevous avez l'environnement qui est déjà toutencapsuléil n'y a plus qu'à lanceretet à maintenirc'est beaucoup plus simplemerci, bonne soirée Yannicklà justesi je vous montre sur le portenaire
01:07:54 :par exempleici je peux direpar exemple quand vous avezun shutdown de votreserveur vous pouvez direalways restartpar exemple restart policydonc ça c'est des trucs que vous ne pouvez pas gérerah oui pardonici je vais vous montrer en faitdans la gestiondes containers
01:08:22 :vous pouvez définir une restart policy par exempleoù vous dites bah je veux restartmon container à chaque fois qu'il y a euun bug ou tout le temps ou seulementsi je l'ai stoppé manuellementet ça en fait c'est un truc que vous ne pouvez pasfaire facilement avec une application
Aucune occurrence trouvée pour « ».
Bravo, tu es prêt à passer à la suite