paint-brush
Comment Dockeriser et déployer des applications Djangopar@abrahamdahunsi
9,834 lectures
9,834 lectures

Comment Dockeriser et déployer des applications Django

par Abraham Dahunsi 15m2023/10/14
Read on Terminal Reader

Trop long; Pour lire

Dans ce didacticiel, vous avez appris à dockeriser et déployer des applications Django à l'aide de Docker, Django et Heroku. Vous avez vu comment Docker peut vous aider à créer des environnements isolés et reproductibles pour vos applications, et comment Heroku peut simplifier le processus de déploiement. Vous avez également appris à utiliser Docker Compose pour gérer plusieurs conteneurs et services, et à configurer vos paramètres Django pour différents environnements.
featured image - Comment Dockeriser et déployer des applications Django
Abraham Dahunsi  HackerNoon profile picture
0-item
1-item

Docker est une plate-forme permettant de créer, d'exécuter et de distribuer des applications. Il vous permet de regrouper votre application et toutes ses dépendances dans un seul conteneur, qui peut ensuite être exécuté sur n'importe quelle machine sur laquelle Docker est installé.


Cela rend Docker idéal pour déployer des applications Web, car il facilite le déplacement de votre application d'un environnement à un autre sans avoir à se soucier des problèmes de compatibilité.


Django, quant à lui, est un framework Web Python qui facilite la création d'applications Web puissantes et évolutives. Django fournit un certain nombre de fonctionnalités prêtes à l'emploi, telles qu'un système d'authentification des utilisateurs, une couche d'abstraction de base de données et un moteur de modèles.


Cela facilite la prise en main de Django et la création d'applications Web complexes rapidement et facilement.


Dockeriser et déployer une application Django est un processus relativement simple. Les principales étapes impliquées sont :


1. Créez un Dockerfile pour votre application Django.

2. Créez une image Docker à partir de votre fichier Docker.

3. Déployez l'image Docker dans un environnement de production.


Dans cet article, je vais vous guider en détail à travers les étapes impliquées dans la dockerisation et le déploiement d'une application Django. Je fournirai également quelques conseils et bonnes pratiques pour déployer des applications Django en production.

Conditions préalables

Pour suivre ce tutoriel, vous aurez besoin des prérequis suivants :


  • Python 3.9 ou supérieur
  • Pépin
  • Docker
  • Docker Composer
  • Git


Vous aurez également besoin d'un fournisseur d'hébergement cloud tel qu'AWS, Azure ou Google Cloud Platform si vous souhaitez déployer votre application Django en production. Mais pour ce tutoriel, j'utiliserai Heroku.


Une fois tous les prérequis installés, vous êtes prêt à commencer à Dockeriser et à déployer votre application Django !

Créer un projet Django

Pour démarrer un nouveau projet Django, vous devez utiliser la commande django-admin . Cette commande vous permet de créer un répertoire de projet et quelques fichiers de base pour votre application Django. Par exemple, si vous souhaitez créer un projet appelé my_project , vous pouvez exécuter cette commande dans votre terminal :


django-admin startproject my_project


Cela créera un répertoire appelé « mon_projet » avec la structure suivante :



mon projet/


├── gérer.py


└── projet/


├── initialisation .py


├── settings.py


└── urls.py


Le fichier manage.py est un script qui vous permet d'effectuer diverses tâches pour votre projet, telles que l'exécution du serveur de développement, la création de migrations de bases de données et le test de votre code. Le répertoire project/ contient les paramètres et les fichiers de configuration de votre projet.


Le fichier settings.py définit les principaux paramètres de votre projet, tels que la connexion à la base de données, les applications installées et le middleware. Le fichier urls.py mappe les URL de votre projet aux vues de vos applications.


Après avoir créé un nouveau projet Django, vous pouvez le tester localement en exécutant le serveur de développement. Le serveur de développement est un simple serveur Web qui s'exécute sur votre machine et sert vos fichiers de projet. Pour démarrer le serveur de développement, exécutez cette commande dans votre terminal :


python manage.py runserver


Cela démarrera le serveur sur le port 8000 par défaut. Vous pouvez ensuite ouvrir votre navigateur et accéder à http://localhost:8000/ pour voir la page d'accueil par défaut de Django.

Structure de base et fichiers d'un projet Django

Un projet Django est composé de plusieurs fichiers et répertoires qui définissent les fonctionnalités et l'apparence de votre application Web. Les principaux composants d'un projet Django sont :


manage.py : Un script qui fournit diverses commandes pour gérer votre projet, telles que la création d'applications, la migration de la base de données et le test de votre code.


project/ : Un répertoire qui contient les paramètres et les fichiers de configuration de votre projet. Les principaux fichiers de ce répertoire sont :

 `settings.py`: A file that defines the main settings for your project, such as the database connection, the installed apps, and the middleware. You can customize this file to suit your needs and preferences. `urls.py`: A file that maps the URLs of your project to the views of your apps. You can define different URL patterns for different parts of your web application.


apps/ : Un répertoire qui contient toutes les applications Django qui composent votre projet. Chaque application Django est un package Python distinct qui fournit une fonctionnalité ou une fonctionnalité spécifique pour votre application Web. Vous pouvez créer vos propres applications ou utiliser celles existantes provenant de sources tierces.

Tester le projet localement

Pour tester le projet localement, vous pouvez utiliser le serveur de développement ou le framework de test fourni par Django. Le serveur de développement est un simple serveur Web qui s'exécute sur votre machine et sert vos fichiers de projet. Le framework de test est un outil qui vous permet d'écrire et d'exécuter des tests unitaires pour votre code.


Pour utiliser le serveur de développement, vous pouvez exécuter cette commande dans votre terminal :


python manage.py runserver


Cela démarrera le serveur sur le port 8000 par défaut. Vous pouvez ensuite ouvrir votre navigateur et accéder à `http://localhost:8000/` pour voir la page d'accueil par défaut de Django.


Pour utiliser le framework de test, vous pouvez exécuter cette commande dans votre terminal :


python manage.py test


Cela exécutera tous les tests unitaires de votre projet. Si tous les tests réussissent, vous verrez un message comme celui-ci :



 Ran 1 test in 0.001s Ok


Si l'un des tests échoue, vous verrez un message d'erreur avec des détails sur l'échec. Vous pouvez utiliser ces informations pour déboguer et corriger votre code.


Une fois que vous avez testé le projet localement et que vous êtes satisfait des résultats, vous pouvez le déployer dans un environnement de production.

Dockeriser le projet Django

Qu'est-ce qu'un fichier Docker ?

Un Dockerfile est un fichier texte qui contient des instructions sur la façon de créer une image Docker. Une image Docker est un package exécutable autonome qui comprend tout ce dont vous avez besoin pour exécuter une application : code, runtime, outils système, bibliothèques système et paramètres.


Pour créer un Dockerfile, vous devez spécifier l'image de base, les commandes à exécuter pour installer les packages requis et les commandes à exécuter pour démarrer l'application.

Exemple de fichier Docker pour un projet Django

Voici un exemple de Dockerfile pour un projet Django :


 FROM python:3.9 #Install Django and other required packages RUN pip install django # Copy the Django project files into the image COPY ./app # Set the working directory WORKDIR /app # Start the Django development server CMD ["python", "manage.py", "runserver", "0.0.0.0:8000"]



Ce Dockerfile créera une image Docker contenant Python 3.9, Django et les fichiers de projet Django. L'image sera configurée pour démarrer le serveur de développement Django sur le port 8000.

Qu'est-ce qu'un fichier docker-compose.yml ?

Un fichier docker-compose.yml est un fichier YAML qui définit les services qui composent une application Dockerisée. Un service peut être un seul conteneur Docker ou un groupe de conteneurs Docker.


Pour créer un fichier docker-compose.yml pour un projet Django, vous devez définir le service Web et le service de base de données. Le service Web exécutera l'application Django et le service de base de données exécutera la base de données utilisée par l'application Django.

Exemple de fichier docker-compose.yml pour un projet Django

Voici un exemple de fichier docker-compose.yml pour un projet Django :


 version: "3.9" services: web: build: ports: -"8000:8000" volumes -./:/app db: image: postgres:14.0-alpine volumes: -./postgres:/var/lib/postgresql/data



Ce fichier docker-compose.yml définit deux services : web et db . Le service web construira l'image Docker à partir du fichier Docker que nous avons créé dans la section précédente. Le service web exposera également le port 8000 sur la machine hôte afin que nous puissions accéder au serveur de développement Django.


Le service db utilisera l'image Docker officielle de PostgreSQL. Le service db montera également le répertoire postgres sur la machine hôte dans le répertoire /var/lib/postgresql/data à l'intérieur du conteneur. Cela garantira que les fichiers de base de données sont conservés entre les redémarrages du conteneur.

Créer et exécuter les conteneurs Docker

Pour créer et exécuter les conteneurs Docker, nous pouvons utiliser la commande suivante :


docker-compose up -d


Cette commande construira les images Docker pour les services « web » et « db » si elles n'existent pas déjà. La commande démarrera ensuite les conteneurs Docker pour les services « web » et « db ».

Tester localement le projet Django Dockerisé

Une fois les conteneurs Docker exécutés, nous pouvons tester le projet Dockerized Django localement à l'aide d'un navigateur Web. Ouvrez un navigateur Web et accédez à « http://localhost:8000 ». Vous devriez maintenant pouvoir voir la page de développement de Django.


Vous pouvez également vous connecter à la page d'administration de Django à l' http://localhost:8000/admin/ . Le nom d'utilisateur et le mot de passe sont admin et admin par défaut.

Déploiement du projet Django

Il est maintenant temps de déployer votre projet Django sur une plateforme cloud à l'aide de Git, GitHub et Heroku. Vous testerez également votre application Web déployée à l’aide d’un navigateur Web.

Qu’est-ce que Git et pourquoi en avons-nous besoin ?

Git est un outil logiciel qui peut vous aider à gérer le code source de votre projet. Il vous permet de suivre les modifications apportées à votre code, de collaborer avec d'autres développeurs et de revenir aux versions précédentes en cas de problème.


Git peut également vous permettre de transmettre votre code vers des référentiels distants, tels que GitHub, où vous pouvez stocker et partager votre code avec d'autres.

Comment créer un référentiel GitHub et transférer notre code vers GitHub ?

Veuillez ignorer ce qui suit si vous avez déjà créé un référentiel GitHub.


Pour créer un référentiel GitHub pour votre projet Django, vous devez suivre ces étapes :


- Créez un compte gratuit sur GitHub


- Accédez à votre page de profil et cliquez sur le bouton Nouveau à côté de Dépôts .


- Donnez un nom à votre référentiel, tel que django-docker-app , et ajoutez éventuellement une description.


- Cliquez sur le bouton Créer un référentiel .


Maintenant que vous avez créé un référentiel vide sur GitHub. Pour pousser votre code vers ce référentiel, vous devez utiliser la commande `git` dans votre terminal. Je suppose que vous avez déjà installé Git sur votre machine locale et initialisé un référentiel Git dans votre dossier de projet Django. Sinon, suivez la documentation officielle pour le faire.


Pour transmettre votre code vers GitHub, vous devez suivre ces étapes :


- Accédez au dossier de votre projet Django dans le terminal et tapez git status pour voir l'état actuel de votre référentiel. Vous devriez voir quelque chose comme ceci :


 On branch main Your branch is up to date with 'origin/main'. Changes not staged for commit: (use "git add <file>..." to update what will be committed) (use "git restore <file>..." to discard changes in working directory) modified: Dockerfile modified: docker-compose.yml modified: requirements.txt no changes added to commit (use "git add" and/or "git commit -a")


Cela signifie que certains fichiers modifiés ne sont pas préparés pour la validation. Pour les préparer à la validation, vous devez utiliser la commande git add .


- Tapez git add . pour préparer tous les fichiers modifiés à valider. Vous pouvez également spécifier les noms de fichiers que nous souhaitons mettre en scène, tels que git add Dockerfile docker-compose.yml requirements.txt .


- Tapez à nouveau git status pour voir l'état mis à jour de notre référentiel. Vous devriez voir quelque chose comme ceci :


 On branch main Your branch is up to date with 'origin/main'. Changes to be committed: (use "git restore --staged <file>..." to unstage) modified: Dockerfile modified: docker-compose.yml modified: requirements.txt


Cela signifie que certaines modifications sont prêtes à être validées. Pour les valider, vous devez utiliser la commande git commit .


- Tapez git commit -m "Add Docker configuration files" pour valider les modifications par étapes avec un message décrivant ce que nous avons fait. Alternativement, vous pouvez omettre l'indicateur -m et saisir un message plus long dans un éditeur qui s'ouvrira après avoir tapé git commit .


- Tapez à nouveau git status pour voir l'état final de notre référentiel. Vous devriez voir quelque chose comme ceci :


 On branch main Your branch is ahead of 'origin/main' by 1 commit. (use "git push" to publish your local commits) nothing to commit, working tree clean


Cela signifie que vous avez un commit qui n'est pas encore poussé vers le référentiel distant. Pour le pousser, vous devez utiliser la commande git push .


- Tapez git push origin main pour pousser votre commit local vers le référentiel distant sur GitHub.


Vous pouvez également spécifier le nom distant et le nom de la branche que vous souhaitez transmettre, par exemple git push origin main .


Il peut vous être demandé de saisir votre nom d'utilisateur et votre mot de passe GitHub ou d'utiliser un jeton d'accès personnel pour vous authentifier.


- Accédez à la page de votre référentiel GitHub et actualisez-la. Vous devriez voir votre code et votre message de validation sur la page.


Vous avez réussi à transmettre votre code vers GitHub. Vous pouvez maintenant passer à l'étape suivante, qui consiste à déployer votre projet Django sur Heroku.

Qu’est-ce que Heroku et pourquoi en avez-vous besoin ?

Heroku est une plateforme cloud qui vous permet de déployer, gérer et faire évoluer des applications Web. Il prend en charge divers langages de programmation, frameworks et bases de données, tels que Python, Django et PostgreSQL.


Il fournit également diverses fonctionnalités et modules complémentaires qui améliorent notre expérience de développement Web, tels que la journalisation, la surveillance, la mise en cache, la sécurité, etc.


Vous avez besoin d'Heroku car il rend votre processus de déploiement plus facile et plus rapide. Vous pouvez utiliser Heroku pour déployer votre projet Django sans vous soucier de l'infrastructure sous-jacente, telle que les serveurs, les réseaux ou les systèmes d'exploitation.


Vous pouvez également utiliser Heroku pour faire évoluer votre application Web en fonction du trafic et de la demande. Heroku gère pour vous toutes les complexités et défis du déploiement Web.

Comment créer un compte Heroku et installer l'outil Heroku CLI ?

Pour créer un compte Heroku, vous devez suivre ces étapes :


- Allez sur Heroku et cliquez sur le bouton Inscription .

- Remplissez les informations requises, telles que le nom, l'e-mail, le mot de passe, etc.

- Choisissez un langage de développement principal, tel que Python.

- Cliquez sur le bouton Créer un compte gratuit .

- Consultez notre e-mail et cliquez sur le lien pour vérifier notre compte.


Maintenant, vous avez créé un compte Heroku gratuit. Pour installer l'outil Heroku CLI, vous devez suivre ces étapes :


- Accédez à [ Heroku CLI et choisissez le programme d'installation approprié pour notre système d'exploitation, tel que Windows, Mac OS X ou Linux.


- Téléchargez et exécutez le programme d'installation et suivez les instructions à l'écran.


- Ouvrez un terminal et tapez heroku --version pour vérifier que l'installation a réussi. Vous devriez voir quelque chose comme ceci :


heroku/7.59.0 win32-x64 node-v12.21.0


Maintenant, vous avez installé l'outil Heroku CLI sur votre ordinateur local. Vous pouvez utiliser cet outil pour interagir avec Heroku depuis le terminal.

Comment créer une application Heroku et configurer les paramètres requis ?

Pour créer une application Heroku pour notre projet Django, nous devons suivre ces étapes :


- Accédez au dossier de votre projet Django dans le terminal et tapez heroku login pour vous connecter à votre compte Heroku à l'aide de l'outil Heroku CLI. Il vous sera peut-être demandé de saisir votre adresse e-mail et votre mot de passe ou d'utiliser un navigateur Web pour vous authentifier.


- Tapez heroku create django-docker-app pour créer une nouvelle application Heroku avec le nom django-docker-app . Alternativement, vous pouvez omettre le nom et laisser Heroku générer un nom aléatoire pour vous. Vous devriez voir quelque chose comme ceci :


 Creating ⬢ django-docker-app... done https://django-docker-app.herokuapp.com/ | https://git.heroku.com/django-docker-app.git


Cela signifie que vous avez créé une nouvelle application Heroku avec une URL Web et une URL Git. L'URL Web est l'endroit où vous pouvez accéder à votre application Web déployée, et l'URL Git est l'endroit où vous pouvez transmettre votre code à Heroku.


- Tapez heroku config:set SECRET_KEY=<your_secret_key> pour définir une variable d'environnement pour le paramètre SECRET_KEY de notre projet Django. Vous devez remplacer <your_secret_key> par une chaîne aléatoire que vous pouvez générer à l'aide d'un outil comme Django Secret Key Generator .


Vous pouvez également utiliser la clé secrète existante que vous avez dans votre fichier settings.py , mais cela n'est pas recommandé pour des raisons de sécurité.


- Tapez heroku addons:create heroku-postgresql:hobby-dev pour ajouter un module complémentaire de base de données PostgreSQL gratuit à votre application Heroku. Cela créera une nouvelle base de données pour votre projet Django et définira une variable d'environnement pour le paramètre DATABASE_URL de votre projet Django. Vous devriez voir quelque chose comme ceci :

 Creating heroku-postgresql:hobby-dev on ⬢ django-docker-app... free Database has been created and is available ! This database is empty. If upgrading, you can transfer ! data from another database with pg:copy Created postgresql-curved-12345 as DATABASE_URL Use heroku addons:docs heroku-postgresql to view documentation


Cela signifie que vous avez ajouté un module complémentaire de base de données PostgreSQL portant le nom PostgreSQL-curved-12345 et l'URL DATABASE_URL .


- Tapez heroku config pour voir la liste des variables d'environnement que vous avez définies pour votre application Heroku. Vous devriez voir quelque chose comme ceci :


 === django-docker-app Config Vars DATABASE_URL: postgres://<username>: <password>@<host>:<port>/<database> SECRET_KEY: <your_secret_key>


Cela signifie que vous disposez de deux variables d'environnement, DATABASE_URL et SECRET_KEY , que vous pouvez utiliser dans les paramètres de votre projet Django.


Maintenant que vous avez créé une application Heroku et configuré les paramètres requis pour notre projet Django, vous pouvez passer à l'étape suivante, qui consiste à déployer votre projet Django sur Heroku.


Comment déployer votre projet Django sur Heroku à l'aide de la commande ` heroku ` ?


Pour déployer notre projet Django sur Heroku à l'aide de la commande heroku , vous devez suivre ces étapes :


- Accédez au dossier de votre projet Django dans le terminal et tapez heroku container:login pour vous connecter au Heroku Container Registry à l'aide de l'outil Heroku CLI. Cela vous permettra de pousser notre image Docker vers Heroku.


- Tapez heroku container:push web -a django-docker-app pour créer et transférer votre image Docker vers Heroku. Vous devez spécifier le nom de votre application Heroku, qui est django-docker-app dans ce cas. Vous devriez voir quelque chose comme ceci :


 === Building web (Dockerfile) Sending build context to Docker daemon 1.024kB Step 1/9 : FROM python:3.9-slim ---> 7f5b6ccd03e9 Step 2/9 : ENV PYTHONUNBUFFERED 1 ---> Using cache ---> 64b5d0e40a22 Step 3/9 : RUN mkdir /code ---> Using cache ---> 4d8c638f2b6c Step 4/9 : WORKDIR /code ---> Using cache ---> e69c02a028cd Step 5/9 : COPY requirements.txt /code/ ---> Using cache ---> 8f0f3e0f2d8c Step 6/9 : RUN pip install -r requirements.txt ---> Using cache ---> 0f7b497d81ed Step 7/9 : COPY . /code/ ---> Using cache ---> c0a8e9a32b16 Step 8/9 : EXPOSE 8000 ---> Using cache ---> a1d36a4a2da4 Step 9/9 : CMD ["gunicorn", "django_docker.wsgi", "--bind", "0.0.0.0:8000"] ---> Using cache ---> f7f3c0418a1d Successfully built f7f3c0418a1d Successfully tagged registry.heroku.com/django-docker-app/web:latest === Pushing web (Dockerfile) The push refers to repository [registry.heroku.com/django-docker-app/web] f7f3c0418a1d: Pushed latest: digest: sha256:6cbbf22cf6aa60e0343e6d8e7c4c2eeb2e cb8fd5e82a42dfe5f4aeeb15af89ec size: 528 Your image has been successfully pushed. You can now release it with the 'container:release' command.


Cela signifie que vous avez créé et poussé votre image Docker vers Heroku.


- Tapez heroku container:release web -a django-docker-app pour publier notre image Docker sur notre application Heroku. Vous devriez voir quelque chose comme ceci :


 Releasing images web to django-docker-app... done


Cela signifie que vous avez publié votre image Docker sur votre application Heroku.


- Tapez heroku run python manage.py migrate -a django-docker-app pour exécuter les migrations de bases de données sur votre application Heroku. Cela créera les tables et index nécessaires pour votre projet Django sur la base de données PostgreSQL. Vous devriez voir quelque chose comme ceci :


 Running python manage.py migrate on ⬢ django-docker-app... up, run.1234 (Free) Operations to perform: Apply all migrations: admin, auth, contenttypes, sessions, polls Running migrations: Applying contenttypes.0001_initial... OK Applying auth.0001_initial... OK Applying admin.0001_initial... OK Applying admin.0002_logentry_remove_auto_add... OK Applying admin.0003_logentry_add_action_flag_choices... OK Applying contenttypes.0002_remove_content_type_name... OK Applying auth.0002_alter_permission_name_max_length... OK Applying auth.0003_alter_user_email_max_length... OK Applying auth.0004_alter_user_username_opts... OK Applying auth.0005_alter_user_last_login_null... OK Applying auth.0006_require_contenttypes_0002... OK Applying auth.0007_alter_validators_add_error_messages... OK Applying auth.0008_alter_user_username_max_length... OK Applying auth.0009_alter_user_last_name_max_length... OK Applying auth.0010_alter_group_name_max_length... OK Applying auth.0011_update_proxy_permissions... OK Applying auth.0012_alter_user_first_name_max_length... OK Applying polls.0001_initial... OK Applying sessions.0001_initial... OK


Cela signifie que vous avez exécuté les migrations de bases de données sur votre application Heroku.


- Tapez heroku open -a django-docker-app pour ouvrir notre application Web déployée dans un navigateur Web. Vous devriez voir notre projet Django s'exécuter sur Heroku.


Vous avez déployé avec succès votre projet Django sur Heroku à l'aide de la commande heroku . Vous pouvez désormais profiter de votre application Web et la partager avec d'autres.

Conclusion

Dans ce didacticiel, vous avez appris à dockeriser et déployer des applications Django à l'aide de Docker, Django et Heroku. Vous avez vu comment Docker peut vous aider à créer des environnements isolés et reproductibles pour vos applications, et comment Heroku peut simplifier le processus de déploiement.


Vous avez également appris à utiliser Docker Compose pour gérer plusieurs conteneurs et services, et à configurer vos paramètres Django pour différents environnements.


Dockeriser et déployer des applications Django peut présenter de nombreux avantages, tels que :


- Cycles de développement et de test plus rapides

- Collaboration et partage de code plus faciles

- Performances cohérentes et fiables sur toutes les plateformes

- Évolutivité et flexibilité des ressources

- Sécurité et isolement des dépendances


Lire ensuite : CI/CD est essentiel pour une livraison de logiciels rapide et fiable. Pour optimiser votre pipeline CI/CD pour une efficacité maximale, choisissez les bons outils, rationalisez votre flux de travail, utilisez des tests et un contrôle qualité automatisés, parallélisez les builds, utilisez des boucles de surveillance et de rétroaction, effectuez des contrôles de sécurité et améliorez continuellement votre pipeline. En savoir plus

Lire aussi : Tout ce que nous avons appris à la DockerCon 2023 Lire la suite

Ressources additionnelles

- Documentation Docker : La documentation officielle de Docker, où vous pouvez trouver des guides, des didacticiels, des documents de référence et bien plus encore.


- Documentation Django : La documentation officielle de Django, où vous pouvez trouver des sujets, des guides pratiques, des documents de référence, et bien plus encore.