Hosting von Django mit nginx und gunicorn unter Linux
Einleitung
Das Hosten von Django-Webanwendungen ist ziemlich einfach, kann jedoch komplexer werden als eine Standard-PHP-Anwendung. Es gibt einige Möglichkeiten, die Django-Schnittstelle mit einem Webserver zu handhaben. Gunicorn ist mit Sicherheit eines der einfachsten.
Gunicorn (kurz für Green Unicorn) fungiert als Vermittler zwischen Ihrem Webserver, in diesem Fall Nginx, und Django selbst. Es kümmert sich um die Bereitstellung der Anwendung selbst, während Nginx den statischen Inhalt aufnimmt.
Einhorn
Installation
Die Installation von Gunicorn ist mit Pip super einfach. Wenn Sie Ihr Django-Projekt bereits mit virtualenv eingerichtet haben, verfügen Sie über Pip und sollten mit der Funktionsweise vertraut sein. Installieren Sie also Gunicorn in Ihrer virtualenv.
pip install gunicornKonfiguration
Eines der Dinge, die Gunicorn zu einer attraktiven Wahl machen, ist die Einfachheit seiner Konfiguration. Der beste Weg, die Konfiguration zu handhaben, besteht darin, einen Gunicorn-Ordner im Stammverzeichnis Ihres Django-Projekts zu erstellen. Erstellen Sie in diesem Ordner eine Konfigurationsdatei.
In diesem Leitfaden wird es gunicorn-conf.py genannt. Erstellen Sie in dieser Datei etwas Ähnliches wie in der folgenden Konfiguration.
import multiprocessing
bind = 'unix:///tmp/gunicorn1.sock'
workers = multiprocessing.cpu_count() * 2 + 1
reload = True
daemon = True
Im Falle der obigen Konfiguration erstellt Gunicorn einen Unix-Socket unter /tmp/gunicorn1.sock. Außerdem wird eine Anzahl von Arbeitsprozessen gestartet, die der doppelten Anzahl von CPU-Kernen plus einem entspricht. Es wird auch automatisch neu geladen und als daemonisierter Prozess ausgeführt.
Ausgeführte
Der Befehl zum Ausführen von Gunicorn ist etwas lang, aber es sind zusätzliche Konfigurationsoptionen angegeben. Der wichtigste Teil besteht darin, Gunicorn auf die .wsgi-Datei Ihres Projekts zu verweisen.
gunicorn -c gunicorn/gunicorn-conf.py -D --error-logfile gunicorn/error.log yourproject.wsgiDer obige Befehl sollte aus dem Stammverzeichnis Ihres Projekts ausgeführt werden. Es weist Gunicorn an, die Konfiguration zu verwenden, die Sie mit dem Flag -c erstellt haben. -D gibt erneut an, dass es daemonisiert werden soll. Der letzte Teil gibt den Speicherort des Gunicorn-Fehlers long im Gunicorn-Ordner an, den Sie erstellt haben. Der Befehl endet damit, dass Gunicorn den Speicherort Ihrer .wsgi-Dateimitteilt.
Nginx (Englisch)
Jetzt, da Gunicorn konfiguriert ist und ausgeführt wird, können Sie Nginx so einrichten, dass es eine Verbindung dazu herstellt und Ihre statischen Dateien bereitstellt. In dieser Anleitung wird davon ausgegangen, dass Sie Nginx bereits konfiguriert haben und separate Serverblöcke für die Websites verwenden, die darüber gehostet werden. Es wird auch einige SSL-Informationen enthalten.
Wenn Sie erfahren möchten, wie Sie kostenlose SSL-Zertifikate für Ihre Website erhalten, werfen Sie einen Blick auf unseren LetsEncrypt-Leitfaden.
Set up the connection to Gunicorn
upstream yourproject-gunicorn {
server unix:/tmp/gunicorn1.sock fail_timeout=0;
}
Redirect unencrypted traffic to the encrypted site
server {
listen 80;
server_name yourwebsite.com;
return 301 https://yourwebsite.com$request_uri;
}
The main server block
server {
# Set the port to listen on and specify the domain to listen for
listen 443 default ssl;
client_max_body_size 4G;
server_name yourwebsite.com;
# Specify log locations
access_log /var/log/nginx/yourwebsite.access_log main;
error_log /var/log/nginx/yourwebsite.error_log info;
# Point Nginx to your SSL certs
ssl on;
ssl_certificate /etc/letsencrypt/live/yourwebsite.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/yourwebsite.com/privkey.pem;
# Set your root directory
root /var/www/yourvirtualenv/yourproject;
# Point Nginx at your static files
location /static/ {
# Autoindex the files to make them browsable if you want
autoindex on;
# The location of your files
alias /var/www/yourvirtualenv/yourproject/static/;
# Set up caching for your static files
expires 1M;
access_log off;
add_header Cache-Control "public";
proxy_ignore_headers "Set-Cookie";
}
# Point Nginx at your uploaded files
location /media/ {
Autoindex if you want
autoindex on;
# The location of your uploaded files
alias /var/www/yourvirtualenv/yourproject/media/;
# Set up aching for your uploaded files
expires 1M;
access_log off;
add_header Cache-Control "public";
proxy_ignore_headers "Set-Cookie";
}
location / {
# Try your static files first, then redirect to Gunicorn
try_files $uri @proxy_to_app;
}
# Pass off requests to Gunicorn
location @proxy_to_app {
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_redirect off;
proxy_pass http://njc-gunicorn;
}
# Caching for HTML, XML, and JSON
location ~* \.(html?|xml|json)$ {
expires 1h;
}
# Caching for all other static assets
location ~* \.(jpg|jpeg|png|gif|ico|css|js|ttf|woff2)$ {
expires 1M;
access_log off;
add_header Cache-Control "public";
proxy_ignore_headers "Set-Cookie";
}
}
Okay, das ist ein bisschen viel, und es kann noch viel mehr sein. Die wichtigsten Punkte, die Sie beachten sollten, sind der Upstream-Block, der auf Gunicorn verweist, und die Standortblöcke, die den Datenverkehr an Gunicorn weiterleiten. Der Rest ist ziemlich optional, aber Sie sollten es in irgendeiner Form tun. Die Kommentare in der Konfiguration sollten Ihnen bei den Einzelheiten helfen.
Sobald diese Datei gespeichert ist, können Sie Nginx neu starten, damit die Änderungen wirksam werden.
systemctl restart nginxSobald Nginx wieder online ist, sollte Ihre Website über Ihre Domain erreichbar sein.
Abschließende Gedanken
Es gibt noch viel mehr, was mit Nginx gemacht werden kann, wenn Sie tief graben möchten. Die bereitgestellten Konfigurationen sind jedoch ein guter Ausgangspunkt und etwas, das Sie tatsächlich verwenden können. Wenn Sie an Apache und aufgeblähte PHP-Anwendungen gewöhnt sind, sollte die Geschwindigkeit einer solchen Serverkonfiguration eine angenehme Überraschung sein.
