Déploiement de l’application Django sur AWS EC2

Déploiement de l’application Django sur AWS EC2

Introduction

Ce tutoriel rédigé par notre collaborateur Ruslan ARKHYRYEYEV surMedium, vous guidera à travers l’ensemble du processus de déploiement, le rendant simple et accessible. Même si vous êtes déjà familiarisé avec les bases, vous trouverez ce guide utile pour apprendre de nouveaux conseils et avoir une référence complète à portée de main.
 
L’objectif principal de ce guide est de se concentrer sur les étapes de déploiement, afin que vous puissiez mettre votre application Django en ligne facilement.
 

Qu’est-ce qu’AWS ?

Amazon Web Services (AWS) est une plateforme de cloud computing qui offre une large gamme de services incluant la puissance de calcul, le stockage et le réseautage. AWS vous permet de déployer et de gérer des applications rapidement et efficacement.
 

Qu’est-ce qu’une instance EC2 ?

Amazon Elastic Compute Cloud (EC2) est un service qui vous permet de faire fonctionner des serveurs virtuels (instances) dans le cloud. EC2 offre une capacité de calcul évolutive, ce qui le rend idéal pour exécuter des applications.
 

Pourquoi utiliser EC2 ?

  • Contrôle et flexibilité : EC2 offre un contrôle total sur vos ressources informatiques, vous permettant de configurer et gérer les instances selon vos besoins.
  • Élasticité : Redimensionnez facilement vos instances en fonction de la demande, assurant que vous disposez toujours de la bonne quantité de ressources.
  • Intégration avec d’autres services AWS : EC2 s’intègre parfaitement avec d’autres services AWS comme S3, RDS et VPC, améliorant les capacités de vos applications.
  • Variété de types d’instances : EC2 propose une large gamme de types d’instances optimisés pour différents cas d’utilisation.
 

Une brève explication du projet

L’objectif de ce tutoriel est de démontrer le déploiement d’une application Django, plutôt que d’enseigner Django lui-même. Par conséquent, le projet est maintenu aussi simple que possible.
 
Ce tutoriel suppose que vous avez déjà Python 3.12 et Django 5.0.6 installés.
 
Le projet est une application Django basique pour la gestion d’une bibliothèque. La bibliothèque a deux modèles principaux : Auteurs et Livres. Chaque auteur peut avoir plusieurs livres, et chaque livre est associé à un seul auteur.
 
Vous pouvez consulter le projet dans mon dépôt GitHub : library-backend.
 

Inscription AWS — utilisateurs root et IAM, permissions, sécurité

Dans cette section, nous vous guiderons à travers le processus d’inscription à un compte AWS, la configuration des utilisateurs root et IAM, et la compréhension de l’importance de la sécurité dans la gestion des comptes AWS.
 

Étape 1 : Inscription à un compte AWS

1. Accédez à la page d’inscription AWS pour commencer le processus d’inscription.
 
2. Fournissez votre adresse email, votre mot de passe et le nom de votre compte AWS. Ce nom de compte sera utilisé pour identifier votre compte au sein d’AWS.
 
3. Remplissez vos coordonnées, y compris votre numéro de téléphone et votre adresse. Choisissez si le compte sera utilisé à des fins personnelles ou professionnelles.
 
4. Vérifiez votre identité. Fournissez votre numéro de téléphone et entrez le code de vérification envoyé par AWS.
 
5. Saisissez les informations de facturation. Fournissez vos coordonnées de paiement (note : AWS exige cela même pour le niveau gratuit).
 
6. Choisissez un plan de support. AWS propose plusieurs plans de support. Pour la plupart des utilisateurs, le plan de support basique gratuit sera suffisant pour commencer. Vous pourrez le mettre à niveau plus tard si nécessaire.
 

7. Finalisez l’inscription. Suivez les instructions pour terminer la configuration de votre compte. Vous recevrez un email de confirmation une fois que votre compte sera actif.

Étape 2 : Comprendre les utilisateurs root et IAM

 

  • L’utilisateur root : créé lors de l’inscription et dispose d’un accès complet à tous les services et ressources AWS. Utilisez-le uniquement pour les tâches de gestion de compte et de service.
  • Utilisateurs IAM : AWS Identity and Access Management (IAM) vous permet de créer des utilisateurs avec des permissions spécifiques. Cela améliore la sécurité en respectant le principe du moindre privilège. Gardez une trace des comptes utilisateurs IAM et supprimez-les toujours s’ils ne sont pas utilisés.
 

Importance de la sécurité :

  • Activez l’authentification multi-facteurs (MFA) pour les utilisateurs root et IAM.
  • Créez des utilisateurs IAM individuels pour chaque personne accédant au compte.
  • Utilisez des mots de passe forts et uniques, et changez-les régulièrement.
  • Révisez régulièrement les politiques et permissions IAM.

 

Étape 3 : Création d’un utilisateur IAM

  1. 1. Allez sur la console de gestion AWS et trouvez le service IAM. Il peut apparaître dans les services récemment visités, sinon, cherchez-le dans la « recherche 
 

2. Ensuite, dans IAM, choisissez « Utilisateurs » dans le panneau de gauche et cliquez sur « Créer un utilisateur ».

3. Suivez les étapes de création d’utilisateur. Spécifiez votre nom d’utilisateur :

4. Définissez les permissions. Sélectionnez « Attacher des politiques directement ». Vous verrez qu’il y a de nombreuses politiques de permissions parmi lesquelles choisir, vous pouvez même créer votre propre politique.

 

Pour nos besoins et pour des raisons de simplicité, nous choisirons la politique « AdministratorAccess » pour notre utilisateur. Cette politique fournit un accès complet aux services et ressources AWS. Cependant, essayez de ne pas utiliser cette politique pour vos utilisateurs dans des applications de production.

Pour être plus restrictif, vous pouvez rechercher spécifiquement des politiques d’instance EC2. Par exemple, vous pouvez assigner la politique « AmazonEC2FullAccess », ce qui permettra à votre compte IAM de tout faire avec le service EC2, mais rien d’autre avec les autres services.

 

 

5. Terminez le processus de création de l’utilisateur avec les étapes restantes, puis cliquez sur « Créer un utilisateur ».

 

Après la création de l’utilisateur, vous ne pouvez pas y accéder immédiatement. La première chose à faire est d’activer l’accès à la console pour l’utilisateur.

1. Sélectionnez le nouvel utilisateur créé, allez dans « Informations d’identification de sécurité » et cliquez sur « Activer l’accès à la console ».

2. Téléchargez le fichier .csv et gardez-le aussi sécurisé que possible. La recommandation générale est de ne même pas le conserver sur votre machine.

Le format du fichier est le suivant : Nom d’utilisateur, Mot de passe, URL de connexion à la console.

3. Déconnectez-vous de votre compte root en le choisissant en haut à droite et en cliquant sur « Se déconnecter ».

4. Retournez à la console de connexion et cette fois, choisissez l’utilisateur IAM.

 

L’ID du compte est le numéro à 12 chiffres de la troisième colonne du fichier de données d’identification enregistré précédemment.

5. À l’étape suivante, entrez votre nom d’utilisateur IAM et votre mot de passe, qui se trouvent également dans le fichier de données d’identification.

6. Après avoir saisi toutes ces informations, vous devriez pouvoir accéder à la console de votre compte IAM. Vous remarquerez que l’accès est limité à certains endroits.

Création d’une instance EC2

Dans cette section, nous allons passer en revue le processus de création d’une instance EC2, qui est un serveur virtuel dans Amazon Elastic Compute Cloud (EC2) utilisé pour exécuter des applications sur l’infrastructure AWS. EC2 offre une capacité de calcul évolutive, vous permettant de rapidement ajuster la taille de votre serveur en fonction de vos besoins.
 

Introduction à EC2 et au niveau gratuit

Amazon EC2 (Elastic Compute Cloud) est un service web qui fournit une capacité de calcul redimensionnable dans le cloud. Il permet aux développeurs de lancer des serveurs virtuels, de configurer la sécurité et le réseau, ainsi que de gérer le stockage. Cette flexibilité facilite le déploiement rapide des applications.
 
Niveau gratuit AWS : AWS propose un niveau gratuit pour aider les nouveaux utilisateurs à démarrer avec le cloud. À ce jour, le niveau gratuit pour la première année comprend :
 
  • 750 heures d’utilisation d’instances t2.micro (ou t3.micro dans les régions où t2.micro n’est pas disponible) sur des AMI du niveau gratuit par mois ;
  • 750 heures d’utilisation d’adresse IPv4 publique par mois ;
  • 30 GiB de stockage EBS ;
  • 2 millions d’E/S ;
  • 1 Go de snapshots ;
  • 100 Go de bande passante vers Internet.
 
Le niveau gratuit est idéal pour explorer les services AWS et développer de petites applications sans se soucier des coûts.

 

Création d’une instance EC2

Pour créer une instance EC2, suivez ces étapes :
 
1. Depuis la console utilisateur IAM, recherchez et sélectionnez « EC2 ». Cela vous mènera au tableau de bord EC2 :

 

2. Sélectionnez « Lancer une instance » et vous verrez un formulaire avec de nombreux paramètres différents pour votre instance.

  • Nom. Choisissez un nom pour votre instance.
  • Applications et images OS. Dans le menu déroulant « Amazon Machine Image », vous verrez plusieurs options. Pour ce tutoriel, vous pouvez choisir « Amazon Linux -> Amazon Linux 2023 AMI », qui est éligible pour le niveau gratuit.

  • Type d’instance. Sélectionnez le type d’instance t2.micro, qui est éligible pour le niveau gratuit. Ce type d’instance fournit 1 vCPU et 1 GiB de mémoire, ce qui est suffisant pour les petites applications et les tests.
 
  • Paire de clés. Sélectionnez « Créer une nouvelle paire de clés », définissez un nom et choisissez les paramètres suivants :

 

Après avoir cliqué sur « Créer une paire de clés », le fichier .pem sera téléchargé sur votre machine. Conservez ce fichier, il sera nécessaire pour les étapes ultérieures lors de l’accès à l’instance.

  • Changements réseau. Pour ce tutoriel, aucune modification n’est requise.
  • Configuration du stockage. La configuration de stockage par défaut pour l’AMI sera pré-sélectionnée. Pour le niveau gratuit, vous pouvez avoir jusqu’à 30 GiB de stockage EBS. Ajustez la taille du stockage si nécessaire, mais assurez-vous qu’elle reste dans les limites du niveau gratuit.
 

3. Après avoir rempli la configuration, cliquez sur « Lancer l’instance ». Cela lancera le processus de démarrage de votre instance.

4. Accédez à la liste de vos instances en cliquant sur « Instances » dans le panneau de gauche, puis sélectionnez votre instance nouvellement créée.

5. Il faudra un certain temps avant de pouvoir l’utiliser. Attendez que l’état de l’instance passe de « En cours de démarrage » à « En cours d’exécution » :

6. À ce stade, votre instance est configurée. Votre adresse IPv4 publique ou votre DNS IPv4 public seront nécessaires à l’étape suivante de ce tutoriel pour accéder à l’instance.

Accès à Amazon Linux

Dans cette section, nous vous guiderons à travers le processus d’accès à votre instance Amazon Linux EC2 depuis votre machine locale en utilisant SSH. Cela a été testé sur MacOS avec une puce M1 dans le terminal Oh My Zsh. Mais vous pouvez également utiliser le terminal standard de MacOS.
 

Connexion depuis la machine locale

Nous couvrirons les étapes pour utiliser le fichier .pem téléchargé afin d’établir une connexion sécurisée avec votre instance EC2.

 
1. Déplacez le fichier .pem vers un emplacement sécurisé
 
mkdir -p ~/keys
mv ~/Downloads/your-key-pair.pem ~/keys/

 

2. Définissez les permissions correctes pour le fichier .pem :

chmod 400 ~/keys/your-key-pair.pem

  1. Connexion à votre instance EC2 à l’aide de SSH.
  2.  
  • Pour vous connecter à votre instance EC2, vous avez besoin du nom DNS public ou de l’adresse IP de l’instance. Vous pouvez trouver ces informations dans la console de gestion EC2 sous la section « Instances ». Ouvrez Terminal et utilisez la commande ssh pour vous connecter à votre instance.
  • Remplacez votre-paire-de-clés.pem par le nom de votre fichier de clé, ec2-user par le nom d’utilisateur par défaut de votre instance Amazon Linux, et votre-DNS-public-de-l’instance par le DNS public de votre instance EC2.
ssh -i ~/keys/your-key-pair.pem ec2-user@your-instance-public-dns
 

Vous devriez maintenant être connecté au terminal Amazon Linux :

 

Connexion depuis le navigateur

Il existe une autre manière de se connecter au terminal : vous pouvez vous connecter directement depuis le navigateur.

1. Pour cela, cliquez simplement sur le bouton « Se connecter » situé dans le coin supérieur droit du résumé de votre instance :

2. Sur la page suivante, laissez les paramètres préremplis et cliquez sur « Se connecter ».

3. Vous verrez le même invite de commande :

 

Clonage du dépôt vers une instance EC2

Dans cette section, nous allons installer Git sur votre instance AWS EC2 et cloner votre dépôt GitHub via HTTPS. Cette configuration vous permettra de transférer facilement votre code sur votre instance EC2.
 
Les commandes sont lancées sur l’instance à laquelle vous vous êtes déjà connecté dans l’unité précédente.
 
Étape 1 : Installation de Git sur Amazon Linux
Installez Git en utilisant les commandes suivantes :
 
sudo yum update -y
sudo yum install git -y
 
 
Étape 2 : Cloner le dépôt de la bibliothèque via HTTPS

1. Clonez le dépôt.

Sur votre instance EC2, utilisez la commande git clone avec l’URL HTTPS du dépôt discuté au début de ce tutoriel.

git clone https://github.com/RusikPro/library-backend.git

2. Vérifiez le clonage.

cd library-backend
ls -la

Optionnel : Configuration des clés SSH GitHub

Si vous préférez cloner votre propre dépôt via SSH pour une sécurité renforcée, suivez ces étapes facultatives pour générer une paire de clés SSH sur votre instance EC2 et ajouter la clé publique à votre compte GitHub.
 
Étape 1 : Générer une paire de clés SSH sur l’instance EC2
 
1. Générez une paire de clés SSH :
 
ssh-keygen -t ed25519 -C « your_email@example.com »
 
  • Suivez les étapes de création de la clé.
  • Vous êtes libre de choisir le nom par défaut, mais il est préférable de les personnaliser pour une meilleure gestion future des clés. Dans ce tutoriel, le nom est /home/ec2-user/.ssh/id_ed25519_tutorial_key.
  • La phrase secrète sera laissée vide pour simplifier les choses.
 

2. Copiez la clé publique.

  • Affichez le contenu de votre nouveau fichier de clé publique :
cat ~/.ssh/id_ed25519_tutorial_key.pub

 

Copiez la sortie, qui commence par ssh-ed25519 et inclut votre adresse e-mail.

Étape 2 : Ajouter la clé SSH à votre compte GitHub

  1. 1. Connectez-vous à GitHub et accédez à votre projet.

  2. 2. Ouvrez les paramètres de votre projet, sélectionnez « Deploy keys » dans le panneau de gauche, puis cliquez. 

3. Sélectionnez le nom et insérez la clé ed copié précedement.

4. Laissez « Autoriser l’accès en écriture » non coché. En général, vous ne souhaitez pas pousser les modifications depuis l’instance EC2 vers GitHub.

 

5. Cliquez sur « Ajouter une clé » et vous devriez maintenant voir votre clé dans la liste des clés de déploiement.

 

Étape 3 : Démarrer ssh-agent sur EC2

  • Lancez ssh-agent à l’intérieur de l’instance EC2 :
eval « $(ssh-agent -s)« 
 
  •  Ajoutez la clé SSH à l’agent :
ssh-add ~/.ssh/id_ed25519_tutorial_key
 
Ajoutez les lignes suivantes au fichier ~/.bashrc pour lancer automatiquement ssh-agent lors du prochain accès à l’instance EC2 :
 
# Start SSH agent if not already running
if [ -z « $SSH_AUTH_SOCK«  ]; then
eval « $(ssh-agent -s)« 
fi

# Add SSH key
ssh-add ~/.ssh/id_ed25519_choven
 
 

Déploiement du projet Django sur AWS EC2 en utilisant Docker

Dans cette unité, nous allons à travers le processus d’installation de Docker sur votre instance EC2, puis en utilisant Docker pour lancer votre projet Django cloné. Cela vous permettra de déployer votre application efficacement.
 
Étape 1 : Installer Docker sur Amazon Linux
 
1. Installez Docker via le package manager. 
 
sudo yum update
sudo yum install docker
docker info
 
 
2. Activez Docker en tant que service.
 
sudo systemctl enable docker.service
sudo systemctl start docker.service
 
3. Ajoutez l’utilisateur ec2-user au groupe Docker.
 
sudo usermod -aG docker ec2-user
 
4. Déconnectez-vous puis reconnectez-vous pour appliquer les changements d’appartenance au groupe.
 
exit
ssh -i ~/keys/your-key-pair.pem ec2-user@your-instance-public-dns
 
5. Installez docker-compose.
sudo curl -L https://github.com/docker/compose/releases/latest/download/docker-compose-$(uname -s)-$(uname -m) -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
docker-compose version

 

 

Étape 2 : Configurer votre projet

1. Naviguez vers votre projet précédemment cloné. Le fichier env.dev.sample est présent.

cd library-backend

2. Créez un nouveau fichier .env à partir de .env.dev.sample et ouvrez-le.

cp .env.dev.sample .env
vim .env

3. Modifiez les valeurs à l’intérieur.

 
DB_NAME=your_db
DB_USER=your_db_user
DB_PASS=your_complicated_password
DJANGO_SECRET_KEY=your_django_secret_key
# Public IPv4 address from EC2 instance console
DJANGO_ALLOWED_HOSTS=35.181.153.18
DJANGO_DEBUG=False
DJANGO_TEST_MODE=True
 
Notez que pour DJANGO_ALLOWED_HOSTS, vous devez mettre votre adresse IPv4 publique depuis la console de l’instance EC2.

 

Étape 3 : Construire et exécuter vos conteneurs Docker

1. Construisez vos conteneurs Docker en utilisant la commande suivante.

docker-compose -f docker-compose-prod-deploy.yml build

Vous devriez voir la construction de votre conteneur Docker :

2. Lancez les conteneurs Docker en mode daemon (-d).

dockercompose f dockercomposeproddeploy.yml up d

3. Surveillez les journaux.

docker-compose -f docker-compose-prod-deploy.yml logs -f

4. Accédez à votre site web via le DNS public. Notez que par défaut, la connexion est configurée en HTTP, pas HTTPS. Donc, avant d’accéder au site, supprimez le « s » de l’URL :

http://ec2-35-181-153-18.eu-west-3.compute.amazonaws.com/api/health-check/

5. Vous pouvez arrêter votre instance en utilisant la commande suivante.

docker-compose -f docker-compose-prod-deploy.yml down

6. Nettoyez les instances Docker inutilisées de temps en temps.

Pour libérer de l’espace sur votre disque, nettoyez les conteneurs Docker obsolètes de temps en temps en utilisant cette commande :

docker system prune

Dépannage

  • Si vous ne parvenez pas à accéder au site. Si vous rencontrez ce problème :

 

Cela signifie que votre proxy n’est pas accessible depuis l’extérieur.

Pour résoudre ce problème, accédez à la console de votre instance EC2 et vérifiez l’onglet Sécurité :

Si ce n’est pas le cas, cliquez sur votre groupe de sécurité (par exemple, sg-0ca016958bb85b7e4 (launch-wizard-3)) puis sur « Modifier les règles entrantes ».

Vous pourrez voir différentes règles pour les connexions entrantes. Cliquez sur « Ajouter une règle » et essayez d’ajouter HTTP avec une source personnalisée 0.0.0.0/0 

Après cela, vous devriez pouvoir accéder au site.

Conclusion

Félicitations ! Vous avez déployé avec succès une application Django en utilisant Docker sur une instance AWS EC2. À travers ce tutoriel, nous avons couvert les étapes essentielles pour mettre en place votre projet dans le cloud. Voici un récapitulatif rapide de ce que nous avons accompli :

1. Vue d’ensemble. Nous avons commencé par comprendre les bases d’AWS et d’EC2, ainsi que les avantages d’utiliser ces services pour déployer des applications.

2. Création du projet : Nous avons discuté de la configuration du projet Django, en abordant les modèles principaux et les détails du dépôt.

3. Inscription AWS : Nous avons parcouru les étapes pour créer un compte AWS, configurer des utilisateurs root et IAM, en mettant l’accent sur l’importance de la sécurité.

4. Création d’une instance EC2 : Nous avons créé une instance EC2, configuré ses paramètres nécessaires, et nous sommes assurés qu’elle respecte les limites du niveau gratuit d’AWS.

5. Accès SSH à Amazon Linux : Nous avons appris à accéder de manière sécurisée à l’instance EC2 en utilisant SSH depuis une machine locale et via la Console de gestion AWS.

6. Clonage du dépôt vers l’instance EC2 : Nous avons installé Git sur notre instance EC2 et cloné le dépôt du projet Django en utilisant HTTPS. Nous avons également couvert une étape facultative pour configurer des clés SSH GitHub pour un accès sécurisé.

7. Déploiement du projet Django sur AWS EC2 en utilisant Docker : Nous avons installé Docker sur l’instance EC2, configuré le projet, construit les images Docker, et lancé les conteneurs Docker pour déployer l’application Django.

En suivant ce tutoriel, vous avez maintenant une bonne compréhension du déploiement d’une application Django sur AWS EC2 en utilisant Docker. Cette configuration garantit que votre application est évolutive et flexible.

N’hésitez pas à explorer d’autres améliorations, telles que la mise en place d’un pipeline CI/CD, l’activation de HTTPS pour des connexions sécurisées, ou le dimensionnement de votre infrastructure en fonction de la demande. AWS propose une large gamme d’outils et de services qui peuvent vous aider à optimiser et à gérer efficacement vos déploiements.

Bon déploiement !

Ruslan ARKHYRYEYEV, consultant C++

En réagissant à cet article, vous nous permettez d'affiner les contenus que nous publions ici !

  • Interesting (2)
  • Useful (1)
  • Boring (1)
  • Sucks (1)
  • Awesome (0)

Si cet article vous a plu, n’hésitez pas à le partager via

Ces articles peuvent également vous intéresser