[[Vorlage(Getestet,noble, jammy)]] {{{#!vorlage Wissen [:Pakete installieren: Installation von Programmen] [:Terminal: Ein Terminal öffnen] }}} [[Inhaltsverzeichnis()]] [https://docs.pylonsproject.org/projects/waitress/en/latest/ waitress] {en} ist ein [wikipedia_en:Web_Server_Gateway_Interface:WSGI] {en} 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 [#waitress-hinter-einem-Reverse-Proxy Reverse Proxy] betrieben werden, der HTTPS unterstützt und die HTTPS-Verbindung dann durchreicht. waitress wird im Rahmen des [https://www.pylonsproject.org/ Pylons Projekts] {en} 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 {{{#!vorlage Paketinstallation python3-waitress, ab 24.04 in universe }}} installiert werden[1]. Wer die Dokumentation lokal verfügbar haben möchte, installiert zusätzlich das Paket {{{#!vorlage Paketinstallation python-waitress-doc, ab 24.04 in universe }}} 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]: {{{#!vorlage Befehl pip3 install waitress }}} Wer waitress unter Ubuntu 23.04 und neuer außerhalb eines venv installieren möchte, muss pip mit der [:pip/#Installation-durch-pip-erzwingen: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 [https://docs.pylonsproject.org/projects/waitress/en/stable/usage.html Dokumentation] {en} erklärt. Der allgemeine Befehl zum Starten des Servers lautet[2]: {{{#!vorlage Befehl 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: {{{#!code Python 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 {{{#!vorlage Befehl 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: {{{#!vorlage Tabelle <-2 tableclass="zebra_start3" rowclass="titel" :>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 [https://docs.pylonsproject.org/projects/waitress/en/stable/runner.html#invocation Dokumentation] {en} erklärt. == waitress hinter einem Reverse Proxy == Möchte man den Server mit waitress hinter einem [wikipedia:Reverse Proxy:] betreiben, dann findet man in der [https://docs.pylonsproject.org/projects/waitress/en/stable/reverse-proxy.html Dokumentation] {en} Hinweise, welche Daten der Reverse Proxy an waitress durchreichen sollte. = Links = == intern == * [:gunicorn:] - alternativer WSGI-Server für Python Webapplikationen == extern == * [https://docs.pylonsproject.org/projects/waitress/en/stable/ Dokumentation] {en} zu waitress * [github:Pylons/waitress:Github Seite] von waitress #tag: Server, Programmierung, Python