Django:Nginx und Gunicorn mit Socket: Unterschied zwischen den Versionen
// via Wikitext Extension for VSCode |
// via Wikitext Extension for VSCode |
||
(3 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt) | |||
Zeile 16: | Zeile 16: | ||
<pre> | <pre> | ||
sudo rm -f /run/gunicorn/thorsten.sock | |||
sudo mkdir /run/gunicorn | sudo mkdir /run/gunicorn | ||
</pre> | </pre> | ||
Zeile 24: | Zeile 25: | ||
<pre> | <pre> | ||
sudo chown -R | sudo chown -R www-data:www-data /home/thorsten/portal | ||
sudo chmod -R 755 /home/thorsten/portal | sudo chmod -R 755 /home/thorsten/portal | ||
sudo mkdir -p /run/gunicorn | sudo mkdir -p /run/gunicorn | ||
sudo chown www-data:www-data /run/gunicorn | |||
sudo chown | sudo chmod 755 /run/gunicorn | ||
sudo chmod 755 /run/gunicorn | |||
</pre> | </pre> | ||
Zeile 46: | Zeile 46: | ||
[Service] | [Service] | ||
User= | User=www-data | ||
Group= | Group=www-data | ||
WorkingDirectory=/home/thorsten/portal | WorkingDirectory=/home/thorsten/portal | ||
ExecStart=/home/thorsten/portal/.venv/bin/gunicorn --access-logfile - --workers 3 --bind unix:/run/gunicorn/thorsten.sock portal.wsgi:application | ExecStart=/home/thorsten/portal/.venv/bin/gunicorn --access-logfile - --workers 3 --bind unix:/run/gunicorn/thorsten.sock portal.wsgi:application | ||
Zeile 69: | Zeile 69: | ||
<pre> | <pre> | ||
sudo nano /etc/nginx/ | sudo nano /etc/nginx/conf.d/start.conf | ||
</pre> | </pre> | ||
Zeile 77: | Zeile 77: | ||
server { | server { | ||
listen 80; | listen 80; | ||
server_name | server_name localhost; | ||
location / { | location / { | ||
proxy_pass http://unix:/run/gunicorn/ | proxy_pass http://unix:/run/gunicorn/thorsten.sock; | ||
proxy_set_header Host $host; | proxy_set_header Host $host; | ||
proxy_set_header X-Real-IP $remote_addr; | proxy_set_header X-Real-IP $remote_addr; | ||
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; | proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; | ||
proxy_set_header X-Forwarded-Proto $scheme; | proxy_set_header X-Forwarded-Proto $scheme; | ||
} | |||
location static/ { | |||
alias /home/thorsten/portal/static/; | |||
} | |||
location /media/ { | |||
alias /home/thorsten/portal/media/; | |||
} | } | ||
} | } | ||
</pre> | </pre> | ||
== 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: | |||
<pre> | <pre> | ||
sudo | sudo chown -R $USER:$USER /home/thorsten/portal/static | ||
sudo chmod -R 777 /home/thorsten/portal/static | |||
</pre> | </pre> | ||
Statische Dateien kopieren: | |||
<pre> | <pre> | ||
python manage.py collectstatic | |||
</pre> | </pre> |
Aktuelle Version vom 17. September 2024, 12:04 Uhr
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