waitress
Dieser Artikel wurde für die folgenden Ubuntu-Versionen getestet:
Ubuntu 24.04 Noble Numbat
Ubuntu 22.04 Jammy Jellyfish
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.
Zum Verständnis dieses Artikels sind folgende Seiten hilfreich:
waitress 🇬🇧 ist ein WSGI 🇬🇧 Applikationsserver für in Python geschriebene Webapplikationen. Der Server selber ist ebenfalls in Python programmiert und hat keine weiteren Abhängigkeiten außer die Standardinstallation von Python. waitress unterstützt sowohl IPv4 als auch IPv6 bei IP-Adressen. Der Server unterstützt HTTPS nicht direkt, d.h. es kann kein SSL-Zertifikat hinterlegt werden. Allerdings kann waitress hinter einem Reverse Proxy betrieben werden, der HTTPS unterstützt und die HTTPS-Verbindung dann durchreicht.
waitress wird im Rahmen des Pylons Projekts 🇬🇧 entwickelt. Neben Linux läuft waitress auch unter MacOS, anderen unixartigen Betriebssystemen und Windows.
Installation¶
Paketquellen¶
waitress ist den den Paketquellen von Ubuntu enthalten und kann über das Paket
python3-waitress (ab 24.04 in universe)
Befehl zum Installieren der Pakete:
sudo apt-get install python3-waitress
Oder mit apturl installieren, Link: apt://python3-waitress
installiert werden[1].
Wer die Dokumentation lokal verfügbar haben möchte, installiert zusätzlich das Paket
python-waitress-doc (ab 24.04 in universe)
Befehl zum Installieren der Pakete:
sudo apt-get install python-waitress-doc
Oder mit apturl installieren, Link: apt://python-waitress-doc
Da die Version in den Paketquellen nicht unbedingt die aktuelle stabile Version von waitress ist, ist eine Installation via pip vorzuziehen.
via pip¶
Die aktuelle, stabile Version von waitress kann mit Hilfe von pip in einem venv installiert werden[2]:
pip3 install waitress
Wer waitress unter Ubuntu 23.04 und neuer außerhalb eines venv installieren möchte, muss pip mit der entsprechenden Option aufrufen.
Benutzung¶
waitress kann sowohl aus einen Python-Skript heraus als auch als alleinstehender Server für eine beliebige WSGI-Applikation genutzt werden. Im folgenden ist die Nutzung des alleinstehenden Servers beschrieben. Die Nutzung aus einem Python-Skript heraus ist in der Dokumentation 🇬🇧 erklärt.
Der allgemeine Befehl zum Starten des Servers lautet[2]:
waitress-serve [OPTIONEN] MODUL:APP-OBJEKT
wobei MODUL:APP-OBJEKT
der Einstiegspunkt der WSGI-Applikation sein muss. MODUL
ist in der Regel die Datei, in der das APP-OBJEKT
definiert ist. Wie der Name des APP-OBJEKT
lautet ist der jeweiligen Dokumentation des verwendeten, WSGI-kompatiblen Python Webframeworks zu entnehmen. Beim Aufruf des Befehls muss man sich in dem Verzeichnis befinden, wo das Modul bzw. die Datei liegt, in der das APP-OBJEKT
definiert ist.
Werden keine Optionen angegeben, läuft waitress mit den Rechten des Benutzers, der den Server gestartet hat. Der Server lauscht auf 0.0.0.0
, also allen IP-Adressen, unter der der Host-Rechner erreichbar ist, auf Port 8080 und läuft mit vier Threads.
Zum Testen des Server kann die folgende, minimale WSGI-Applikation genutzt werden:
1 2 3 4 5 6 7 8 9 10 | def app(environ, start_response): """Beispiel für eine sehr simple WSGI-Applikation""" data = b'Hallo Ubuntunutzer!\n' status = '200 OK' response_headers = [ ('Content-type', 'text/plain'), ('Content-Length', str(len(data))) ] start_response(status, response_headers) return iter([data]) |
Speichert man die Datei z.B. unter dem Namen minimal.py ab und wechselt in das Verzeichnis, wo die Datei liegt, kann man diese über den Aufruf von
waitress-serve minimal:app
von waitress ausliefern lassen. In einem Browser, die auf den selben Rechner läuft wie der waitress-Server, ist Anwendung jetzt unter http://localhost:8080
erreichbar.
Beachte: Den waitress-Server startet man mit dem Wrapper-Befehl waitress-serve
ohne „r“ am Ende!
Der Server kennt eine Reihe von Optionen:
Optionen von waitress-serve | |
Option | Erklärung |
--listen=IP-ADRESSE:PORT | Der Server lauscht auf der Adresse IP-ADRESSE und dem Port PORT . Beispiel: listen=127.0.0.1:8000 . |
--threads=ANZAHL | Der Server arbeitet mit ANZAHL Threads eingehende Verbindungen ab. Voreinstellung ist 4. |
--channel-timeout=SEKUNDEN | Inaktive Verbindungen (=keine Daten gesendet oder Empfangen) werden nach SEKUNDEN serverseitig beendet. Voreinstellung ist 120 Sekunden. |
Der Befehl waitress-serve
kennt noch eine Reihe weiterer Einstellungen. Diese sind in der Dokumentation 🇬🇧 erklärt.
waitress hinter einem Reverse Proxy¶
Möchte man den Server mit waitress hinter einem Reverse Proxy betreiben, dann findet man in der Dokumentation 🇬🇧 Hinweise, welche Daten der Reverse Proxy an waitress durchreichen sollte.
Links¶
intern¶
gunicorn - alternativer WSGI-Server für Python Webapplikationen
extern¶
Dokumentation 🇬🇧 zu waitress
Github Seite von waitress