Deployer une application Django avec Gunicorn et Nginx
Django en tant que framework Web a besoin d’un serveur Web pour fonctionner. Et comme la plupart des serveurs Web ne communiquent pas nativement avec Python, il y a besoin d’une interface pour permettre cette communication.WSGI est le standard Python principal pour la communication entre les serveurs Web et les applications.
Le serveur de développement intégré de Django (python manage.py runserver) n'est pas conçu pour être utilisé en production car il manque de performance, de sécurité, et de fiabilité.
Gunicorn, en revanche, est conçu pour être
un serveur de production.
Gunicorn est capable de gérer de multiples requêtes simultanément de manière efficace ce qui est essentiel pour les applications web en production.
Gunicorn est souvent utilisé avec des serveurs web comme Nginx ou Apache. Nginx, par exemple, peut agir en tant que reverse proxy, traitant les requêtes HTTP et les envoyant à Gunicorn.
Cela permet d'optimiser la performance et de mieux gérer les charges de travail.
Etape 1: Installez Gunicorn :
pip install gunicorn
Etape 2: Testez Gunicorn :
|-src
| |-blog
| | |-wsgi.py
| | |-settings.py
| | |-urls.py
| | |-...
Placer vous dans le repertoire src/
Testez votre application dans un navigateur.
Si la mise en page n'est pas bonne, c'est que les fichiers statiques ne sont pas correctement servis par Django.
Ajoutez également ces lignes en bas du fichier blog/urls.py +.
urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
urlpatterns += static(settings.STATIC_URL, document_root=settings.STATIC_URL)
Ajoutez ces lignes d’importation en haut du fichier blog/urls.py.
from django.conf.urls.static import static # new
Etape 3: Configurer Gunicorn :
Désactivez l’environnement virtuel:
Créez un fichier de socket système pour Gunicorn:
Copier le contenu ci-dessous et enregistrer le fichier:
Description=gunicorn socket
[Socket]
ListenStream=/run/gunicorn.sock
[Install]
WantedBy=sockets.target
Ensuite, créez un fichier de service pour Gunicorn :
Copier le contenu ci-dessous et enregistrer le fichier:
Description=gunicorn daemon
Requires=gunicorn.socket
After=network.target
[Service]
User=your_user
Group=www-data
WorkingDirectory=/home/your_user/blogprojectdrf
ExecStart=/home/your_user/blogprojectdrf/env/bin/gunicorn \
--access-logfile - \
--workers 3 \
--bind unix:/run/gunicorn.sock \
blog.wsgi:application
[Install]
WantedBy=multi-user.target
Le groupe www-data est généralement créé par défaut lors de l'installation de serveurs web tels qu'Apache ou Nginx.
Si vous avez installé l'un de ces serveurs, le groupe www-data devrait déjà exister.Vous pouvez vérifier si le groupe www-data existe déjà en utilisant la commande suivante :
Ajouter l'utilisateur your_user au groupe www-data :
sudo usermod -aG www-data your_user
sudo chown -R your_user:www-data /home/your_user/blogprojectdrf
Démarrez et activez le socket Gunicorn :
sudo systemctl enable gunicorn.socket
Pour vérifier le statut de gunicorn :
Pour tester gunicorn :
Placez vous dans le repertoire src/
Etape 4: Installer Nginx :
Etape 5: Configurer Nginx pour Utiliser le Socket Gunicorn :
Avant de créer le fichier Nginx, avec cette commande, vous pouvez vérifier l'existence du fichier:
Vous pouvez supprimer le fichier par défault à l'aide de cette commande :
Etape 6: Configurer Nginx comme proxy inverse :
Créez un fichier de configuration pour Nginx:
sudo nano /etc/nginx/sites-available/blog
Copier le contenu ci-dessous et enregistrer le fichier:
listen 80 default_server;
server_name your_domain_or_IP;;
location = /favicon.ico { access_log off; log_not_found off; }
location /static/ {
alias /home/your_user/blogprojectdrf/static/;
}
location /media/ {
alias /home/your_user/blogprojectdrf/media/;
}
location / {
proxy_pass http://unix:/run/gunicorn.sock;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
Activez la configuration :
Tester la Configuration de Nginx:
Testez un fichier statique:
si besoin accorder les droits de lecture au groupe www-data
sudo chmod 750 /home/your_user/blogprojectdrf
Redémarrez Nginx et Gunicorn :
sudo systemctl restart nginx
sudo service gunicorn restart
sudo service nginx restart
Etape 7: Vérifier l'Accès au Site Localement :
Ouvrez votre navigateur et accédez à http://localhost ou http://127.0.0.1 pour vérifier que votre application Django est correctement déployée et fonctionne avec Gunicorn et Nginx.
Pour vérifier le statut de gunicorn :
Pour vérifier les journaux d’erreurs de Nginx :
To check error logs:
Pour vérifier si Nginx fonctionne correctement :
sudo fuser -k 8000/tcp
sudo lsof -t -i tcp:8000 | xargs kill -9
Cela permet de vérifier l’état de Nginx, d’arrêter tout processus utilisant le port 8000 et de tuer les connexions actives sur ce port.