[PYTHON] Organisieren Sie den Fluss, wenn Sie Django mit NGINX und Gunicorn ausführen (persönliches Memo).

Einführung

Während des Studiums verstand ich die Einstellungen von NGINX und Gunicron nicht, nachdem ich Django auf einem Remote-Host bereitgestellt hatte, und machte mir daher eine Notiz.

Was du machen willst

Stellen Sie die mit Django erstellte Anwendung in der Cloud bereit, die leichte Verarbeitung wie das Anzeigen statischer Dateien wird vom Webserver (NGINX) verarbeitet, die schwere Verarbeitung wie die dynamische Verarbeitung von Django vom AP-Server (gunicron). Ich möchte es tun.

Zusammenfassend das folgende Bild image.png

Erforderlicher Arbeitsablauf

Um dies zu erreichen, müssen Sie Folgendes tun (vorausgesetzt, die Django-Anwendung ist bereits auf dem Server bereitgestellt).

  1. Bereiten Sie eine Konfigurationsdatei für NGINX vor, um die Django-Site aufzurufen --Erstellen Sie eine Konfigurationsdatei mit einem richtigen Namen im Ordner "/ etc / nginx / sites-available"
  1. Erstellen Sie im Ordner "/ etc / nginx / sites-enabled" einen symbolischen Link zu der in 1 oben erstellten Datei.
  1. Starten Sie NGINX und Gunicron neu, um darauf zuzugreifen

1. Erstellen Sie eine Konfigurationsdatei für NGINX, um die Django-Site aufzurufen

Fügen Sie die von NGINX aufgerufene Einstellungsdatei der Website (in diesem Fall die Django-App) zu "/ etc / nginx / sites-available" hinzu. Dadurch kann NGINX die Site aufrufen.

/etc/nginx/sites-Datei zur verfügbaren hinzufügen


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

NGINX ruft Django gemäß den in dieser "Djang-App" beschriebenen Einstellungen auf. Als nächstes werden die Informationen in der erstellten Einstellungsdatei beschrieben. Diesmal möchte NGINX die folgenden zwei Dinge tun.

  1. Zeigen Sie statische Dateien an
  2. Senden Sie die Anforderungsinformationen an djangapp.sock (Datei für Sockel mit Gunicorn).

Der Inhalt der Einstellungsdatei sieht folgendermaßen aus

etc/nginx/sites-available/djangapp


server {
     #Port, über den Anfragen an die Website gestellt werden, die Sie einstellen
        listen 80;
        #Website IP oder Domain Name
        server_name xx.xx.xx.xxx;
        #Ein Zauber, um den Fehler zu vermeiden, dass das Fabicon nicht gefunden werden kann
        location = /favicon.ico {access_log off; log_not_found off;}
        ###Im Folgenden wird die Entsprechung zwischen der Anforderungs-URL und dem Pfad unter NGINX definiert.
        #Legen Sie den Pfad zur statischen Django-Datei fest
        location /static/ {
                root /home/ubuntu/djangapp;
                }
        #Legen Sie den Pfad fest, um das CSS der Administratorseite anzuzeigen
        location /static/admin {
                root /home/ubuntu/venv/lib/python3.6/site-packages/django/contrib/admin/static/admin;
        }
        #Legen Sie den Pfad zum Unix-Socket fest, um die Anforderung an die Webseite zu senden
        location / {
                # 「/etc/nginx/proxy_Die Proxy-Einstellungen werden unter "params" beschrieben.
                include proxy_params;
                # djangapp.Ich sende das Anforderungsergebnis an sock
                proxy_pass http://unix:/home/ubuntu/djangapp/djangapp.sock;
        }
}

2. Erstellen Sie einen symbolischen Link zur Konfigurationsdatei, die Django aufruft

Erstellen Sie einen symbolischen Link in "site-enabled", um anzuzeigen, dass "sites-available / djangapp", das zuvor erstellt wurde, "enabled" ist. Wenn Sie die Verbindung vorübergehend trennen möchten, löschen Sie einfach diesen symbolischen Link

Erstellen Sie einen symbolischen Link


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

Sie haben jetzt einen symbolischen Link mit dem Namen sites-enabled / djangapp-> sites-available / djangapp erstellt. Vorerst bestätigt.

Symbolische Linkbestätigung


(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
#Es ist eine symbolische Verbindung
lrwxrwxrwx 1 root root   36 Apr 29 13:26 djangapp -> /etc/nginx/sites-available/djangapp

3. Starten Sie NGINX und Gunicorn neu

Lassen Sie uns zunächst testen, ob NGINX ordnungsgemäß funktioniert

Nginx-Testlauf


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

Stellen Sie sicher, dass es ohne Probleme funktioniert. Dann verschiedene Neustarts

Starten Sie NGINX neu


sudo systemctl restart nginx

Gunicorn neu starten


 sudo systemctl restart gunicorn

Stellen Sie danach eine Verbindung zur URL her

Recommended Posts

Organisieren Sie den Fluss, wenn Sie Django mit NGINX und Gunicorn ausführen (persönliches Memo).
Ablauf des Ergebnisses der asynchronen Verarbeitung mit Django und Sellerie
(Persönliche) Punkte bei Verwendung von ctypes
DEBUG-Einstellungen bei Verwendung von Django
Bei Verwendung von if und bei Verwendung von while
[Django] Organisiere Befehle und Rollen
[Python] Fehler- und Lösungsnotiz bei Verwendung von venv mit pyenv + anaconda
DJango-Memo: Von Anfang an (über den Verwaltungsbildschirm) mein Suchtpunkt