Django:Nginx und Gunicorn mit Socket

Aus ahrensburg.city
Zur Navigation springen Zur Suche springen

Django: Nginx und Gunicorn mit unix:socket

Gunicorn ist ein WSGI-HTTP-Server für Python-Anwendungen. Er ist eine Alternative zu uWSGI und mod_wsgi. Gunicorn ist ein reiner Python-Server und kann mit Django, Flask und anderen Python-Web-Frameworks verwendet werden.

In diesem Tutorial werden wir zeigen, wie

- Django-Anwendung auf einem Gunicorn-Server ausgeführt wird. - Nginx als Reverse-Proxy-Server für Gunicorn konfiguriert wird. - Gunicorn mit einem Unix-Socket anstelle eines TCP-Sockets konfiguriert wird.

Schritt 1: Gunicorn mit einem Unix-Socket

Gunicorn kann mit einem Unix-Socket anstelle eines TCP-Sockets konfiguriert werden. Ein Unix-Socket ist ein Kommunikationsendpunkt, der auf dem Dateisystem erstellt wird. Es ist schneller als ein TCP-Socket, da es keine Netzwerkschicht durchläuft.

Erstellen Sie ein Verzeichnis für die Sockeldatei:

sudo rm -f /run/gunicorn/thorsten.sock
sudo mkdir /run/gunicorn

Erstellen Sie eine Sockeldatei:

Ändern Sie die Berechtigungen der Sockeldatei:

sudo chown -R www-data:www-data /home/thorsten/portal
sudo chmod -R 755 /home/thorsten/portal
sudo mkdir -p /run/gunicorn
sudo chown www-data:www-data /run/gunicorn
sudo chmod 755 /run/gunicorn

Erstellen Sie eine Systemd-Dienstdatei für Gunicorn:

sudo nano /etc/systemd/system/gunicorn.service

Fügen Sie den folgenden Inhalt hinzu:

[Unit]
Description=gunicorn daemon
After=network.target

[Service]
User=www-data
Group=www-data
WorkingDirectory=/home/thorsten/portal
ExecStart=/home/thorsten/portal/.venv/bin/gunicorn --access-logfile - --workers 3  --bind unix:/run/gunicorn/thorsten.sock portal.wsgi:application

[Install]
WantedBy=multi-user.target

Starten und aktivieren Sie den Gunicorn-Dienst:

sudo systemctl start gunicorn
sudo systemctl enable gunicorn

Schritt 2: Nginx als Reverse-Proxy-Server für Gunicorn

Nginx kann als Reverse-Proxy-Server für Gunicorn konfiguriert werden. Ein Reverse-Proxy-Server empfängt Anfragen von Clients und leitet sie an den entsprechenden Server weiter.

Erstellen Sie eine Nginx-Konfigurationsdatei:

sudo nano /etc/nginx/conf.d/start.conf

Fügen Sie den folgenden Inhalt hinzu:

server {
    listen 80;
    server_name localhost;

    location / {
        proxy_pass http://unix:/run/gunicorn/thorsten.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;
    }
       location static/ {
        alias /home/thorsten/portal/static/;
    }

    location /media/ {
        alias /home/thorsten/portal/media/;
    }
}


Erzeuge in Django die statischen Dateien

Die statischen Dateien von Django müssen in das Verzeichnis kopiert werden, das in der Nginx-Konfiguration als Alias für statische Dateien definiert ist.

Verzeichnis für statische Dateien erstellen und Benutzerrechte setzen:

sudo chown -R $USER:$USER /home/thorsten/portal/static
sudo chmod -R 777 /home/thorsten/portal/static

Statische Dateien kopieren:

python manage.py collectstatic