python:gunicorn

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Prochaine révision
Révision précédente
python:gunicorn [2019/01/16 18:40] – créée phswpython:gunicorn [2023/02/17 14:39] (Version actuelle) – [Générer des URLs absolue avec HTTPS] fix typo phsw
Ligne 1: Ligne 1:
 ====== Gunicorn ====== ====== Gunicorn ======
  
-[[https://zestedesavoir.com/tutoriels/598/developpez-votre-site-web-avec-le-framework-django/266_annexes/1538_deployer-votre-application-en-production/|Source]]+  * [[https://zestedesavoir.com/tutoriels/598/developpez-votre-site-web-avec-le-framework-django/266_annexes/1538_deployer-votre-application-en-production/]] 
 + 
 + 
 +==== Installation ==== 
 +Installer ''gunicorn'' avec Pip. 
 + 
 + 
 + 
 +==== Script de lancement ====
  
 Configurer un script pour lancer Gunicorn: Configurer un script pour lancer Gunicorn:
Ligne 24: Ligne 32:
         --log-file=$LOGFILE 2>>$LOGFILE -b 0.0.0.0:80 application:app         --log-file=$LOGFILE 2>>$LOGFILE -b 0.0.0.0:80 application:app
 </code> </code>
 +
 +Dans le cas de Django, on remplace ''application:app'' par ''<dossier contenant wsgi.py>.wsgi''.
 +
 +Si Nginx sera devant Gunicorn, on écoute seulement sur localhost, et sur un port supérieur à 1024 pour ne pas avoir besoin d'être root: ''-b 127.0.0.1:10030''.
 +
 +Il est possible de définir des variables d’environnement pour Gunicorn, par exemple :
 +<code bash>
 +gunicorn -e DJANGO_SETTINGS_MODULE=core.settings.prod ...
 +</code>
 +==== Création d'un service ====
  
 Créer un [[linux:service|service]] pour (re)lancer Gunicorn en cas de problème: Créer un [[linux:service|service]] pour (re)lancer Gunicorn en cas de problème:
Ligne 39: Ligne 57:
 WantedBy=multi-user.target WantedBy=multi-user.target
 </code> </code>
 +
 +
 +
 +
 +
 +==== Application Django dans un sous-dossier avec Nginx ====
 +
 +  * [[https://www.digitalocean.com/community/questions/nginx-for-django-app-and-pelican-website?answer=41193]]
 +
 +On souhaite que l'application Django soit disponible à l'adresse: ''http://example.com/foo/''.
 +
 +Dans la configuration Nginx, dans le bloc ''server'' du domaine:
 +<code nginx>
 +       location /foo-static/ {
 +            alias /home/user/django-app/static/;
 +       }
 +
 +       location /foo/ {
 +           rewrite ^/foo/(.*)$ /$1 break;
 +           proxy_set_header X-Script-Name /foo;
 +           proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
 +           proxy_set_header Host $host;
 +           proxy_redirect off;
 +           proxy_buffering off;
 +           proxy_pass http://127.0.0.1:10030;
 +       }
 +</code>
 +
 +Les fichiers statiques, contenus dans le dossier ''/home/user/django-app/static/'' seront servis sous l'URL ''http://example.com/foo-static/''.
 +
 +Dans ''settings.py'', ajouter la ligne suivante pour que les URLs générées par Django contiennent le préfixe:
 +<code python>
 +FORCE_SCRIPT_NAME = "/foo"
 +</code>
 +Dans ce même fichier, préciser également les paramètres relatifs aux fichiers statiques:
 +<code python>
 +STATIC_URL = '/foo-static/'
 +STATIC_ROOT = "/home/user/django-app/static/"
 +</code>
 +<WRAP round info>
 +Les fichiers statiques se copient dans ce dossier avec la commande suivante:
 +<code bash>
 +python manage.py collectstatic
 +</code>
 +</WRAP>
 +
 +Il peut aussi être nécessaire de faire la même chose pour les fichiers ''MEDIA'':
 +<code python>
 +MEDIA_URL = '/foo-data/'
 +</code>
 +<WRAP round important>
 +''MEDIA_URL'' et ''STATIC_URL'' ne peuvent pas avoir la même valeur ! Penser aussi à rajouter les lignes nécessaires dans la configuration Nginx.
 +</WRAP>
 +
 +
 +
 +
 +==== Générer des URLs absolues avec HTTPS ====
 +
 +Si l'application génère des URLs absolues de la façon suivante :
 +<code>
 +{{ request.scheme }}://{{ request.get_host }}{% url 'route_name' %}
 +</code>
 +Pour que le protocole soit bien HTTPS, il faut que dans la configuration Nginx il y ait :
 +<code>
 +proxy_set_header X-Forwarded-Proto $scheme;
 +</code>
 +et dans les paramètres de Django :
 +<code python>
 +SECURE_PROXY_SSL_HEADER = ("HTTP_X_FORWARDED_PROTO", "https")
 +</code>
 +
 +
 +
 +
 +
 +
  
  • python/gunicorn.1547660446.txt.gz
  • Dernière modification : 2021/04/04 17:01
  • (modification externe)