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 :
source .env/bin/activate
pip install gunicorn
Etape 2: Testez Gunicorn :
|-src
| |-blog
| | |-wsgi.py
| | |-settings.py
| | |-urls.py
| | |-...
Placer vous dans le repertoire src/
gunicorn blog.wsgi:application --bind 127.0.0.1:8000
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
+.
if settings.DEBUG:
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 import settings # new
from django.conf.urls.static import static # new
Etape 3: Configurer Gunicorn :
Désactivez l’environnement virtuel:
deactivate
Créez un fichier de socket système pour Gunicorn:
sudo nano /etc/systemd/system/gunicorn.socket
Copier le contenu ci-dessous et enregistrer le fichier:
[Unit]
Description=gunicorn socket
[Socket]
ListenStream=/run/gunicorn.sock
[Install]
WantedBy=sockets.target
Ensuite, créez un fichier de service pour Gunicorn :
sudo nano /etc/systemd/system/gunicorn.service
Copier le contenu ci-dessous et enregistrer le fichier:
[Unit]
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 :
getent group www-data
Ajouter l'utilisateur your_user au groupe www-data :
sudo adduser your_user
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 start gunicorn.socket
sudo systemctl enable gunicorn.socket
Pour vérifier le statut de gunicorn :
sudo systemctl status gunicorn
Pour tester gunicorn :
Placez vous dans le repertoire src/
sudo gunicorn blog.wsgi:application --bind 127.0.0.1:8000
Etape 4: Installer Nginx :
sudo apt install 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:
cd /etc/nginx/sites-enabled
Vous pouvez supprimer le fichier par défault à l'aide de cette commande :
sudo rm /etc/nginx/sites-enabled/default
Etape 6: Configurer Nginx comme proxy inverse :
Créez un fichier de configuration pour Nginx:
sudo touch /etc/nginx/sites-available/blog
sudo nano /etc/nginx/sites-available/blog
Copier le contenu ci-dessous et enregistrer le fichier:
server {
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 :
sudo ln -s /etc/nginx/sites-available/blog /etc/nginx/sites-enabled/
Tester la Configuration de Nginx:
sudo nginx -t
Testez un fichier statique:
si besoin accorder les droits de lecture au groupe www-data
sudo chown -R your_user:www-data /home/your_user/blogprojectdrf
sudo chmod 750 /home/your_user/blogprojectdrf
Redémarrez Nginx et Gunicorn :
sudo systemctl daemon-reload
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 :
sudo systemctl status gunicorn
Pour vérifier les journaux d’erreurs de Nginx :
To check error logs:
$ sudo tail -f /var/log/nginx/error.log
Pour vérifier si Nginx fonctionne correctement :
$ sudo systemctl status nginx
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.