-
Notifications
You must be signed in to change notification settings - Fork 13
Déploiement : Django
- Clés publiques des membres du projet ajoutées sur Github
- Container créé
- Mail d'information reçu contenant : votre port, URL, etc...
- Au minimum le projet par défaut de Django et de Vue.js fonctionnels
- Image Docker : Ubuntu 22.04.1 LTS
- Nginx : 1.18.0
- Gunicorn : 20.1.0
- Python : 3.10.6
- pip : 22.0.2
- Node.js : 18.13.0
- NPM : 8.15
Connectez-vous en ssh sur le port communiqué par email et avec l'utilisateur django
en utilisant la clé que vous avez ajoutée sur GitHub.
Avant de vous connecter, vérifiez que votre clé ssh soit ajoutée dans votre agent ssh local.
ssh -p<PORT> [email protected]
Vous pouvez cloner votre projet sur le serveur de déploiement dans le dossier /home/django/project/
. Utilisez idéalement SSH avec une clé de déploiement.
Source pour générer et utiliser des clés de déploiement : https://docs.github.com/en/developers/overview/managing-deploy-keys#deploy-keys
Installer les dépendances des projets Django et Vue.js.
Pour Vue.js il suffit d'utiliser la commande npm install
.
Pour Django il y a plusieurs techniques, nous utiliserons celle qui consiste à créer un fichier requirements.txt
et à utiliser ce fichier pour installer les dépendances.
Dans votre environnement de dév, déplacez-vous dans le dossier de votre projet Django et exécutez la commande pipenv requirements > requirements.txt
. Cela aura pour effet de créer un fichier requirements.txt que vous pourrez utiliser sur le serveur de production. Vous pouvez push ce fichier sur git et le mettre à jour avant de déployer.
Dirigez-vous sur le serveur de production et récupérez les modifications afin d'obtenir le fichier requirements.txt. Rendez-vous ensuite à l'endroit où se trouve ce fichier et exécutez la commande pip install -r requirements.txt
.
Vous pouvez également installer pipenv et utiliser pipenv sur le serveur à la place, mais je vous préviens la configuration n'est pas de tout repos ^^ Je vous recommande donc la technique expliquée au-dessus. Vous avez le choix ;)
Nginx est utilisé comme serveur web sur le container. La configuration se trouve dans /home/django/project/nginx.conf
.
La config de Nginx se trouve en réalité dans
/etc/nginx/sites-enabled/default
, nous avons modifié légèrement le serveur afin d'en créer un lien symbolique pour vous faciliter la tâche et éviter des problèmes de sauvegarde en cas de soucis avec le serveur.
Configuration par défaut :
# Django
server {
listen 80;
server_name _;
location / {
proxy_pass http://127.0.0.1:8000/;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
location /static/ {
alias /home/django/project/backend/static/;
}
}
# Vuejs
server {
listen 81;
server_name _;
root /home/django/project/frontend/dist;
location / {
index index.html;
try_files $uri $uri/ index.html /index.html;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
}
Dans votre projet vous avez un frontend et un backend, il faut donc avoir une configuration pour chaque partie. Dans ce chapitre nous allons devoir l'adapter pour que le frontend puisse fonctionner, la configuration du backend est déjà correcte pour Nginx.
Vous devez donc ici adapter la configuration de Nginx afin de la faire pointer sur le dossier dist
.
Le dossier dist
peut être généré en exécutant npm run build
.
Si vous changez la configuration Nginx, vous devrez redémarrer Nginx avec sudo service nginx restart
.
Si vous avez besoin que Nginx serve vos fichiers static, il faudra mettre à jour l'alias de la configuration Nginx de /static/
avec le chemin correspondant à votre projet.
Comprenez d'abord se que sont les static files et si vous en avez besoin avant de vous soucier de ce point.
Pour pouvoir déployer une app Python, Django dans notre cas, nous avons besoin d'un serveur WSGI (qui comprend le langage Python) et d'un serveur web (qui s'occupe de la communication entre client et serveur WSGI).
Dans notre cas Gunicorn joue le rôle du serveur WSGI et Nginx le rôle du serveur web. Il faudra donc faire attention à également redémarrer le service Gunicorn quand nous toucherons à des éléments de sa configuration.
Vous devez donc ici adapter la configuration de Gunicorn afin de la faire pointer sur le dossier de votre projet Django qui contient le fichier settings.py
.
Si vous changez la configuration Gunicorn, vous devrez redémarrer Gunicorn avec sudo systemctl restart gunicorn
.
Les fichiers placés dans /home/django/project
seront sauvegardés.
En cas de modification / recréation du container, seul le contenu de ce dossier sera restauré veillez à garder tout document important dans ce dossier
Il est également recommandé de placer votre projet dans ce dossier pour le maintenir sauvegardé.
La configuration Nginx est sauvegardée automatiquement et restaurée automatiquement si vous utilisez le fichier /home/django/project/nginx.conf
.
Nous avons placé un fichier custom-start.sh
dans votre dossier project
. Ce fichier est un script bash qui est exécuté à chaque fois que votre container est redémarré (en cas de redémarrage ou de crash p. ex.).
Le redémarrage du container survient environ une fois chaque mois, pour diverses raisons (mises à jour, etc.). Vous pouvez donc utiliser ce fichier afin d'automatiser certaines étapes de votre déploiement sur votre container, cela vous évitera de devoir refaire les étapes à chaque fois et idéalement garantir l'accessibilité de votre site web à tout moment, vous faire gagner du temps à terme et éviter les mauvaises surprises.
Vous ne devez pas utiliser une base de données SQLite, mais bien une base de données PostgreSQL fourni.
Dans le dossier /root/config-mount
et /root/secret-mount
vous trouverez vos identifiants de connexion à la base de données. Notamment postgres-host
, postgres-database
, postgres-user
, postgres-password
et postgres-port
. Ceux-ci sont uniquement accessibles en root (sudo su).
Vous devrez utiliser ces données dans le fichier settings.py
de votre app Django afin qu'elle puisse se connecter à la base de données.
L'url de votre application est la suivante : https://<PROJECT>.k8s.ing.he-arc.ch
Afin d'avoir plus de détails sur l'état de votre déploiement vous pouvez exécuter la commande python3 manage.py check --deploy
.
Mettre le paramètre DEBUG
dans le fichier settings.py
à True
pour que Django vous renvoie davantage de détails sur les erreurs.
IMPORTANT : Une fois votre déploiement réussi, remettez ce paramètre à
False
.
Si vous avez écrit de la documentation à propos de votre déploiement, sur le wiki de votre projet ou ailleurs, vous pouvez indiquer le lien de cette dernière ci-dessous :
- ...