staging.inyokaproject.org

Gunicorn

Dieser Artikel wurde für die folgenden Ubuntu-Versionen getestet:


Du möchtest den Artikel für eine weitere Ubuntu-Version testen? Mitarbeit im Wiki ist immer willkommen! Dazu sind die Hinweise zum Testen von Artikeln zu beachten.

gunicorn_logo.jpg Gunicorn 🇬🇧 ist ein in Python geschriebener HTTP-Webserver, der Python-Webapplikation, welche WSGI nutzen, ausliefert.

Der Server arbeitet nach dem Pre-Fork-Modell, d.h. es gibt einen Hauptserverprozess, der dann seinerseits "Worker-Prozesse" (auf Deutsch: Arbeiter-Prozesse) startet. Die Worker arbeiten dann die Anfragen an den Server ab.

Gunicorn kennt sowohl synchron als auch asynchron arbeitenden Worker (siehe Abschnitt Worker-Modelle). Gängige - und empfohlene - Praxis ist aber, dass der Gunicorn-Server hinter nginx arbeitet, welcher als Proxy-Server für Gunicorn agiert.

Installation

Gunicorn ist in den offiziellen Paketquellen enthalten, sowohl als Server als auch als Python-Modul. Allerdings ist die Version nicht die neuste Version und enthält nicht unbedingt alle sicherheitsrelevanten Patches. Von der ist die manuelle Installation via pip vorzuziehen.

Der Gunicorn-Server kann über das folgende Paket installiert werden[1]:

  • gunicorn3 (universe)

Befehl zum Installieren der Pakete:

sudo apt-get install gunicorn3 

Oder mit apturl installieren, Link: apt://gunicorn3

Ein Vorteil diese Methode ist, dass das Logging direkt systemweit konfiguriert wird. D.h. Gunicorn loggt direkt nach /var/log/gunicorn und die Logdateien werden automatisch durch logrotate archiviert.

Manuell

Guncorn kann auch manuell installiert werden. Der Server funktioniert auch bei einer Installation in einem virtual environment. Die Befehle lauten[2]:

pip3 install gunicorn 

Asynchrone Worker

Wer Gunicorn mit asynchronen Workern betrieben möchte, der benötigt je noch gewünschtem Worker noch weitere Python-Module, welche über pip installiert werden müssen. Das Vorgehen ist recht einfach und in der Dokumentation 🇬🇧 von Gunicorn beschrieben.

Benutzung

Der allgemeine Befehl zum Starten des Server lautet:

gunicorn [OPTIONEN] APP 

wobei APP der Einstiegspunkt der WSGI-Applikation sein muss.

Werden keine Optionen angegeben, läuft Gunicorn mit den Rechten des Benutzers, der den Server gestartet hat. Der Server lauscht auf localhost auf Port 8000 und läuft mit einem synchronen Worker.

Ein einfaches Beispiel einer WSGI-Applikation zum Testen des Server ist in der Dokumentation 🇬🇧 zu finden. Natürlich kann man die Applikation auch mit einem WSGI-kompatiblen Python-Webframework wie Bottle, Django oder Flask erstellen.

Optionen

Gunicorn kennt eine ganze Reihe von Optionen, im Folgenden sind einige davon erklärt:

Optionen von Gunicorn
Option Erklärung
-b ADRESSE, --bind ADRESSE ADRESSE ist die IP-Adresse und der Port, auf dem Gunicorn lauschen soll. Standardwert ist 127.0.0.1:8000 (also Localhost und Port 8000). Möchte man, dass der Server sowie über eine IP4- also auch IP6-Adresse erreichbar ist, muss man die Option -b zweimal nutzen, einmal für IP4 und einmal für IP6
-w ANZAHL, --workers ANZAHL Startet den Server mit ANZAHL Workern. Voreinstellung ist 1. Es wird empfohlen, nicht mehr als die 4-facher Anzahl der CPU-Kerne als Worker-Prozesse zu starten.
-k WORKER, --worker-class WORKER Gunicorn läuft mit der Worker-Modell worker. Wenn keine zusätzlichen Module für Worker installiert wurden, stehen sync (der synchrone Worker) und unter Python 3 gthread (ein asynchroner, thread-basierter Worker, der das Python-Modul Concurrent Futures 🇬🇧 nutzt). Standard ist sync.
-c CONFIGDATEI, --config CONFIGDATEI Lädt alle Optionen für die Konfiguration aus der Konfigurationsdatei CONFIGDATEI. Weitere Informationen dazu findet man in der Dokumentation 🇬🇧

Gunicorn kennt noch viele weitere Optionen, z.B. zum Logging, Begrenzen der maximalen Anzahl der Request etc. Alle Optionen findet man in der Dokumentation im Abschnitt Settings 🇬🇧.

Worker-Modelle

Wie bereits erwähnt, kennt Gunicorn synchrone und asynchrone Worker. Standardmäßig wird der synchrone Worker verwendet.

Der Einsatz von asynchronen Workern ist dann sinnvoll, wenn z.B. Gunicorn direkt über das Internet erreichbar ist (also kein anderer Webserver als Proxy vorgeschaltet ist), wenn das Generieren einer Antwort auf einen HTTP-Request relativ lange dauert (z.B. weil eine langwierige Berechnung erfolgt, wenn Daten gestreamt werden oder Web Sockets zum Einsatz kommen).

Eine ausführlichere Erklärung zum asynchronen und den asynchronen Workern ist auch in der Dokumentation im Kapitel Design 🇬🇧 zu finden.

Diese Revision wurde am 27. Dezember 2021 20:32 von noisefloor erstellt.
Die folgenden Schlagworte wurden dem Artikel zugewiesen: Python, Server