Je suis fan de python, je le trouve cool, simple, élégant. Quand j'ai voulu démarrer mon premier projet, j'ai cherché s'il existait un framework pour le développement web avec Python. C'est comme ça que j'ai trouvé Django et je l'ai utilisé pour mon premier projet (Hachther Frence): je l'ai trouvé génial. Mais l'un de mes défis était de déployer mon projet en production, c'est pourquoi je décide d'écrire cet article: "Déployer le projet Django avec nginx et uWSGI" pour partager mon expérience.
Tous les développeurs Django connaissent cette commande:
Dans la prochaine, je vais vous montrer comment j'ai réussi à déployer mon projet sur Ubuntu 16.04. Ainsi, toutes les commandes utilisées seront des commandes Ubuntu.
Avant de déployer votre projet
Avant le déploiement, il existe un ensemble d'éléments que vous devez vérifier du point de vue de la sécurité ou de l'optimisation. Pour ce faire, vous pouvez taper cette commande
SECRET_KEY
Ceci est utilisé pour la sécurité des données cryptées sur le projet. Cette valeur doit être longue, aléatoire et secrète. Donc, pour la garder secrète, vous ne devez pas le partager dans votre dépôt: vous pouvez le stocker dans une variable d'environnement
dotenv25 B
ou bien la conserver dans un fichier:
python73 B
DEBUG et ALLOWED_HOSTS
Vous devez définir la variable DEBUG à
Lorsque vous définissez DEBUG à False, vous devez définir ALLOWED_HOSTS avec la liste des hôtes autorisés à accéder à votre projet. Exemple:
Autres paramètres
Pour l'optimisation de votre application, vous devez penser à des éléments tels que: cache, base de données, journalisation, etc. Allez sur ce lien pour plus de détails: https://docs.djangoproject.com/fr/1.11/howto/deployment/checklist/.
Maintenant que tout est OK du côté de Django, continuons avec uWSGI.
uWSGI
uWSGI est un contenu de serveur rapide et dynamique. Il reste entre le serveur web (nginx dans notre cas) et vous l'application Django. uWSGI est une implémentation du protocole WSGI (Web Server Gateway Interface) qui utilise les sockets unix pour répondre à la demande du client.
Installation
L'installation est assez simple. Vous pouvez utiliser pip le gestionnaire de paquets de python et installer la version dans le depot ou vous pouvez l'installer à partir d'un lien.
shell174 B
Configuration et démarrage de uWSGI
La configuration et le démarrage peuvent être effectués de deux manières: en passant les paramètres en ligne de commande ou en définissant les paramètres dans un fichier ini et en passant le chemin du fichier en tant que paramètre dans la ligne de commande.
Nous allons utiliser la deuxième option: nous allons créer un fichier .ini, y placer tous les paramètres et lancer le serveur uwsgi avec cette commande:
Créons un dossier "config" à la racine du projet et mettons le fichier uwsgi.ini à l'intérieur (vous pouvez changer le nom). Découvrez ci-dessous à quoi ressemblera le contenu.
ini404 B
Brève description des paramètres ci-dessus:
- projectname: contenant le nom du projet
- base: contenant le chemin absolu du projet
- master: utiliser pour lancer le processus en tant que maître.
- pythonpath: est le chemin absolu vers le code source du projet. Dans notre cas, utilisez la variable de base(%(base)).
- chdir: le dossier à partir duquel nous voulons le lancer. Dans notre cas, nous le lancons depuis le dossier du projet.
- env: définit les variables d'environnement au démarrage. Nous allons définir DJANGO_SETTINGS_MODULE qui contient les paramètres du projet.
- module: dans ce cas, il s'agit de: [ProjectName] .wsgi: application
- socket: où le socket sera créé. Nous avons choisi de le créer dans / tmp / avec le nom du projet.
- http-socket: il s'agit de faire parler nativement votre projet avec le protocole HTTP.
- uid et gid: pour définir l'utilisateur et le groupe qui sera utilisé pour lancer le processus. Cela peut être utile pour gérer les droits d'accès.
- touch-reload: utilisez-le pour recharger le processus chaque fois que la date de dernière modification de ce fichier est modifiée. Cela peut être utilisé pour gérer les modifications.
- vacuum: pour supprimer le socket avec la fin du processus.
- processes: pour définir le nombre de processus à lancer.
- harakiri: une requête sera supprimée si l'exécution prend plus de temps que ce paramètre.
Une fois la configuration terminée, vous pouvez utiliser cette commande (
Maintenant, donnons accès au projet au public en configurant nginx.
Configuration de nginx
Le but ici est de configurer un proxy inverse dans nginx pour communiquer avec votre projet. Nous supposons que nginx est déjà installé si ce n'est pas le cas, tapez simplement cette commande:
Créez un fichier de configuration dans
nginx374 B
Remplacez [ProjectName] par le nom de votre projet. Une fois la configuration OK, rechargez nginx et vous avez terminé. Vous pouvez maintenant accéder à votre projet via Internet avec votre nom de domaine.
Conclusion
La configuration précédemment effectuée permet de déployer votre projet Django en mode production. Le paramètre touch-reload m'aide vraiment à gérer les changements sur mon projet. Chaque fois que je fais une modification, j'ai juste besoin de taper cette commande pour recharger le projet:
- https://docs.djangoproject.com/fr/1.11/howto/deployment/wsgi/uwsgi/
- https://docs.djangoproject.com/fr/1.11/howto/deployment/checklist/
- http://uwsgi.readthedocs.io/en/latest/index.html