Produktiv Server für eine Django App
Nginx Unit als WSGI Server für eine Django Applikation
Warum Nginx Unit?
Im Gegensatz zu traditionellen WSGI-Servern wie Gunicorn oder uWSGI lässt sich Nginx Unit dynamisch über eine REST-API konfigurieren. Ein Neuladen des Serverprozesses bei Konfigurationsänderungen entfällt. Unit ist leichtgewichtig, extrem schnell und verarbeitet statische Dateien effizient parallel zum Django-Python-Code.
1. Installation
Installiere Nginx Unit und das benötigte Python-Modul auf deinem Ubuntu/Debian-Server:
sudo apt update
sudo apt install unit unit-dev unit-python3
2. JSON-Konfiguration erstellen
Unit verwendet keine klassischen Konfigurationsdateien, sondern ein JSON-Payload. Erstelle eine Datei namens config.json und passe die Pfade an dein Django-Projekt an:
{
"listeners": {
"*:8000": {
"pass": "applications/django"
}
},
"applications": {
"django": {
"type": "python 3",
"path": "/var/www/myproject/",
"module": "myproject.wsgi",
"environment": {
"DJANGO_SETTINGS_MODULE": "myproject.settings"
}
}
}
}
3. Konfiguration anwenden
Sende die JSON-Konfiguration über curl an den Unit-Control-Socket. Dies wendet die Einstellungen sofort an, ohne den Dienst neu zu starten.
sudo curl -X PUT --data-binary @config.json --unix-socket /var/run/control.unit.sock http://localhost/config/
Deine Django-Anwendung läuft nun und ist über Port 8000 erreichbar. Du kannst Worker-Prozesse dynamisch über dieselbe API skalieren, indem du das JSON anpasst und erneut sendest!