[PYTHON] Organisez le flux lors de l'exécution de Django en utilisant NGINX et gunicorn (mémo personnel)

introduction

Pendant que j'étudiais, je ne comprenais pas les paramètres de NGINX et de gunicron après avoir déployé Django sur un hôte distant, alors j'ai pris une note pour moi-même.

Chose que tu veux faire

Un serveur Web (NGINX) gère des traitements légers tels que le déploiement d'une application créée avec Django sur le cloud et l'affichage de fichiers statiques, et un serveur AP (gunicron) gère des traitements lourds tels que le traitement dynamique avec Django. Je veux le faire.

En résumé, l'image suivante image.png

Flux de travail requis

Pour réaliser ce qui précède, vous devez faire ce qui suit (en supposant que l'application Django est déjà déployée sur le serveur)

  1. Préparez un fichier de configuration pour NGINX pour appeler le site Django --Créez un fichier de configuration avec un nom correct dans le dossier "/ etc / nginx / sites-available"
  1. Dans le dossier "/ etc / nginx / sites-enabled", créez un lien symbolique vers le fichier créé en 1 ci-dessus. ―― En faisant cela, si le fichier n ° 1 ci-dessus devient invalide, il vous suffit de rompre le lien symbolique. ―― Lien symbolique En premier lieu, si vous pensez que c'est comme un lien de raccourci, k
  2. Redémarrez NGINX et gunicron pour accéder

1. Créez un fichier de configuration pour NGINX pour appeler le site Django

Ajoutez le fichier de paramétrage du site Web (application Django dans ce cas) appelé par NGINX dans "/ etc / nginx / sites-available". Cela permettra à NGINX d'appeler le site.

/etc/nginx/sites-Ajouter un fichier à disponible


cd /etc/nginx/sites-available
sudo vi djangapp

NGINX appelle Django selon les paramètres décrits dans cette "application djang". Ensuite, les informations sont décrites dans le fichier de paramètres créé. Cette fois, NGINX veut faire les deux choses suivantes.

  1. Afficher les fichiers statiques
  2. Envoyez les informations de demande à djangapp.sock (fichier pour socket avec gunicorn)

Le contenu du fichier de configuration ressemble à ceci

etc/nginx/sites-available/djangapp


server {
     #Port par lequel les demandes au site Web que vous définissez
        listen 80;
        #Adresse IP ou nom de domaine du site Web
        server_name xx.xx.xx.xxx;
        #Un sort pour éviter l'erreur que le Fabicon ne peut pas être trouvé
        location = /favicon.ico {access_log off; log_not_found off;}
        ###Ci-dessous, la correspondance entre l'URL de la requête et le chemin sur NGINX est définie.
        #Définissez le chemin du fichier statique Django
        location /static/ {
                root /home/ubuntu/djangapp;
                }
        #Définissez le chemin pour afficher le CSS de la page administrateur
        location /static/admin {
                root /home/ubuntu/venv/lib/python3.6/site-packages/django/contrib/admin/static/admin;
        }
        #Définissez le chemin d'accès au socket unix pour envoyer la requête à la page Web
        location / {
                # 「/etc/nginx/proxy_Les paramètres proxy sont décrits dans "paramètres"
                include proxy_params;
                # djangapp.J'envoie le résultat de la demande à chaussette
                proxy_pass http://unix:/home/ubuntu/djangapp/djangapp.sock;
        }
}

2. Créez un lien symbolique vers le fichier de configuration qui appelle Django

Créez un lien symbolique dans "site-enabled" pour indiquer que le "sites-available / djangapp" créé précédemment est "enabled". Si vous souhaitez vous déconnecter temporairement, supprimez simplement ce lien symbolique

Créer un lien symbolique


sudo ln -s /etc/nginx/sites-available/djangapp /etc/nginx/sites-enaled

Vous venez de créer un lien symbolique appelé sites-enabled / djangapp-> sites-available / djangapp. Confirmé pour le moment.

Confirmation du lien symbolique


(venv) ubuntu@ip-172-31-45-165:/etc/nginx/sites-available$ ls -la /etc/nginx/sites-enabled/
total 8
drwxr-xr-x 2 root root 4096 Apr 29 13:26 .
drwxr-xr-x 8 root root 4096 Apr 29 13:27 ..
lrwxrwxrwx 1 root root   34 Apr 29 06:54 default -> /etc/nginx/sites-available/default
#C'est un lien symbolique
lrwxrwxrwx 1 root root   36 Apr 29 13:26 djangapp -> /etc/nginx/sites-available/djangapp

3. Redémarrez NGINX et gunicorn

Tout d'abord, testons si NGINX fonctionne correctement

Exécution de test nginx


$ sudo nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

Confirmez que cela fonctionne sans problème. Puis, divers redémarrages

Redémarrez NGINX


sudo systemctl restart nginx

Redémarrer gunicorn


 sudo systemctl restart gunicorn

Après cela, connectez-vous à l'URL

Recommended Posts

Organisez le flux lors de l'exécution de Django en utilisant NGINX et gunicorn (mémo personnel)
Flux d'obtention du résultat du traitement asynchrone à l'aide de Django et Celery
Points (personnels) lors de l'utilisation de ctypes
Paramètres de DEBUG lors de l'utilisation de Django
Lors de l'utilisation si et lors de l'utilisation pendant
[Django] Organiser les commandes et les rôles
[Python] Mémo d'erreur et de solution lors de l'utilisation de venv avec pyenv + anaconda
Mémo DJango: Depuis le début (en utilisant l'écran de gestion) mon point addictif