So installierst du Flask mit Nginx und Gunicorn unter Ubuntu 22.04

Flask ist ein in Python geschriebenes Microframework für die Entwicklung moderner Webanwendungen und API (Application Programming Interface). Es basiert auf dem Werkzeug-Toolkit und der Jinja2-Vorlage. Anstatt eine komplexe Architektur zu verwenden, ist Flask ein kleines Web-Framework, das den Kern einfach erweitert und leicht zu erlernen ist, da Flask weniger Code enthält. Flask enthält kein ORM, hat aber trotzdem coole Funktionen wie URL-Routing und eine Template-Engine.

Gunicorn oder „Green Unicorn“ ist ein WSGI HTTP Server mit Pre-Fork Worker Modus. Er wurde aus dem Ruby Unicorn Projekt portiert. Gunicorn kann mit verschiedenen Web-Frameworks gekoppelt werden, benötigt wenig Server-Ressourcen und ist schnell. Gunicorn steht zwischen deiner Anwendung und dem Webserver. Du kannst Gunicorn also mit Webservern wie Nginx und Apache2 koppeln.

In diesem Beitrag zeigen wir dir, wie du das Python Flask Web Framework mit Gunicorn und Nginx auf einem Ubuntu 22.04 System installierst und konfigurierst. In diesem Tutorial wird auch erklärt, wie du Python Flask mit Gunicorn und Supervisord einrichtest.

Voraussetzungen

Für diese Anleitung brauchst du die folgenden Voraussetzungen:

  • Ein Ubuntu 22.04-System – Du kannst Ubuntu 22.04 Desktop oder Server verwenden.
  • Einen Root-Benutzer – oder einen Nicht-Root-Benutzer.

Einrichten eines neuen Benutzers

Im ersten Schritt richtest du einen neuen Benutzer für die Entwicklungsumgebung Python Flask Web Framework ein. Du kannst diesen Schritt überspringen, wenn du bereits einen Nicht-Root-Benutzer mit root/sudo-Rechten hast. Dieser Benutzer wird für die Ausführung der Python Flask-Anwendung verwendet.

In diesem Beispiel wirst du einen neuen Benutzer mit dem Namen„james“ anlegen. Führe den folgenden Befehl aus, um einen neuen Benutzer „james“ anzulegen und das Passwort für den Benutzer „james“ einzurichten. Achte darauf, dass du ein sicheres Passwort verwendest.

sudo useradd -m -s /bin/bash james
sudo passwd james

Als Nächstes fügst du den Benutzer„james“ mit dem folgenden Befehl zur Gruppe„sudo“ hinzu. Dadurch kann der neue Benutzer„james“ den Befehl„sudo su“ ausführen und erhält die Root-Administratorrechte, die er für die Installation von Paketen und die Einrichtung der Systemkonfiguration benötigt.

sudo usermod -aG sudo james

Überprüfe und verifiziere den neuen Benutzer, indem du dich als Benutzer „james“ anmeldest und den Befehl „sudo su“ ausführst, um die Root-Rechte zu erhalten. Gib das Passwort für den Benutzer„james“ ein und du erhältst die Root-Shell. Die aktuelle Shell wird von„james@hostname“ in„root@hostname“ geändert.

su - james
sudo su

Neuen Benutzer einrichten

Drücke nun „Strg+d“ oder gib„exit“ ein, um zum Nicht-Root-Benutzer „james“ zurückzukehren.

Installieren der Paketabhängigkeiten

Jetzt wirst du einige Paketabhängigkeiten für die Installation von Python Flask installieren, darunter„python3-pip“ und„python3-venv„. Zum Schluss installierst du noch den Nginx-Webserver und den Supervisor.

Bevor du mit der Installation der Pakete beginnst, führe den folgenden apt-Befehl aus, um dein Paket-Repository zu aktualisieren und aufzufrischen.

sudo apt update

Installiere nun python3-pip und python3-venv mit dem folgenden Befehl. python3-pip wird als Paketmanager für Python-Pakete verwendet und python3-venv dient dazu, eine virtuelle Umgebung für die Entwicklung der Flask-Anwendung zu erstellen.

sudo apt install python3-pip python3-venv

Gib Y ein, um die Installation zu bestätigen und drücke ENTER, um fortzufahren. Die Installation beginnt nun.

pip und venv installieren

Nachdem die Installation abgeschlossen ist, führe den folgenden Befehl aus, um das Standard-Python auf deinem Ubuntu-System einzurichten.

sudo update-alternatives --install /usr/bin/python python /usr/bin/python3 10

Überprüfe nun die Version von Python und Pip und überprüfe auch das Python venv Modul, indem du die folgenden Befehle ausführst. Im folgenden Beispiel installierst du das Web-Framework Python Flask mit Python 3.10.

python --version
pip --version
python -m venv -h

setup standard python

Als nächstes führst du den folgenden apt-Befehl aus, um den Nginx-Webserver und das Supervisor-Paket zu installieren. Der Nginx-Webserver wird als Standard-Webserver für das Python-Flask-Webframework verwendet, und der Supervisor dient zur Steuerung der Flask-Anwendung, z. B. zum Starten und Stoppen des Flask-Prozesses.

sudo apt install nginx supervisor

Gib Y ein, um die Installation zu bestätigen und drücke ENTER, um fortzufahren. Warte, bis die Paketinstallation abgeschlossen ist.

nginx supervisor installieren

Einrichten der Entwicklungsumgebung

In diesem Abschnitt erstellst du eine neue virtuelle Python-Umgebung, die als Entwicklungsumgebung für das Web-Framework Python Flask verwendet wird.

Führe den folgenden Befehl aus, um ein neues Projektverzeichnis „/var/www/myapp“ zu erstellen. Dieses Verzeichnis wird als Hauptprojektverzeichnis für deine FLask-Anwendung verwendet.

sudo mkdir -p /var/www/myapp

Ändere den Eigentümer des neuen Verzeichnisses auf den Benutzer„james“ und ändere die Berechtigung auf„755“ mit dem folgenden Befehl.

sudo chown -R james:james /var/www/myapp
sudo chmod 755 /var/www/myapp

Wechsle in das Projektverzeichnis „/var/www/myapp“ und erstelle mit dem folgenden Befehl eine neue virtuelle Python-Umgebung mit dem Namen „myenv“.

cd /var/www/myapp
python -m venv myenv

Schließlich aktivierst du die virtuelle Umgebung „myenv“ mit dem folgenden Befehl. Wenn sie aktiviert ist, sieht deine Shell-Eingabeaufforderung so aus: „(myenv) james@hostname“.

source myenv/bin/activate

Virtuelle Umgebung einrichten

Installation von Python Flask in der virtuellen Umgebung

Nachdem du die virtuelle Umgebung eingerichtet hast, kannst du den folgenden pip-Befehl ausführen, um Python Flask und Gunicorn in deiner virtuellen Umgebung zu installieren. Alle diese Pakete werden aus dem PyPi Python Repository installiert.

pip install flask gunicorn

Jetzt kann die Installation beginnen.

Flachmann Gunicorn installieren

Erstes App-Projekt mit Flask erstellen

Du hast jetzt das Web-Framework Python Flask installiert. Jetzt wirst du die erste Anwendung mit Flask erstellen.

Bevor du das Flask-Projekt erstellst, musst du sicherstellen, dass du dich im Hauptprojektverzeichnis„/var/www/myapp“ befindest und die virtuelle Umgebung„myenv“ aktiviert ist.

Erstelle mit dem nano-Editor eine neue Datei„myapp.py„.

nano myapp.py
Füge nun das folgende Python-Skript in die Datei ein.
# myapp.py
from flask import Flask, render_template  # importing the render_template function
app = Flask(__name__)
# route to index page
@app.route("/")
def hello():
return render_template('index.html')

if __name__ == ' __main__':
app.run(debug=True)

Speichere und schließe die Datei, wenn du fertig bist.

Erstelle als Nächstes ein neues Verzeichnis„templates“ und erstelle eine neue Datei„index.html“ im Verzeichnis„template„.

mkdir -p templates/
nano templates/index.html

Füge das folgende HTML-Skript hinzu.

<html>
    <body>
        <h1><center>Hello World!</center></h1>
    </body>
</html>

Speichere und schließe die Datei, wenn du fertig bist.

Führe abschließend das Skript„myapp.py“ aus, um deine erste Flask-Anwendung zu starten.

python myapp.py

Du wirst sehen, dass dein Flask-Projekt auf dem Standard-Localhost mit Port 5000 läuft.

Flask-App einrichten

Öffne die neue Terminal-Shell deines Ubuntu-Rechners und führe den unten stehenden Befehl curl aus.

curl http://127.0.0.1:5000/

Im folgenden Screenshot siehst du die Ausgabe der Seite index.html.

Glaskopf-App prüfen

Um den Prozess der Flask-Anwendung zu beenden, kannst du die Taste „Strg+c“ drücken.

Gunicorn einrichten

Gunicorn oder „Green Unicorn“ ist eine Python-Webserver-Gateway-Schnittstelle für den HTTP-Server. Sie ermöglicht es dir, eine Python-Anwendung als HTTP-Prozess oder über die sock-Datei auszuführen. Jetzt fügst du das Gunicorn zu deinem Flask-Projekt hinzu.

Erstelle im Flask-Projektverzeichnis mit dem nano-Editor eine neue Datei„wsgi.py„.

nano wsgi.py

Füge das folgende Skript hinzu.

# import myapp Flask application
from myapp import app
if __name__ == "__main__":
app.run(debug=True)

Speichere und schließe die Datei, wenn du fertig bist.

Als Nächstes führst du den folgenden Befehl aus, um dein Flask-Projekt mit Gunicorn zu starten und auszuführen. In diesem Beispiel wird dein Flask-Projekt auf der öffentlichen IP-Adresse mit Port 8000 ausgeführt.

gunicorn -w 4 --bind 0.0.0.0:8000 wsgi:app

Aufbau Pistolenkolben

Öffne deinen Webbrowser und gib die IP-Adresse deines Ubuntu-Systems mit Port 8000 (d.h. http://192. 168.5.28:8000/) ein. Du solltest nun die Index-Seite deines Flask-Projekts sehen.

Laufende Flasche mit Tunikorn

Drücke jetzt „Strg+c“, um den Guncorn-Prozess zu beenden.

Ausführen der Flask-Anwendung mit Gunicorn und Supervisor

Jetzt hast du Gunicorn für dein FLask-Projekt konfiguriert. Nun ist es an der Zeit, den Supervisor für das Flask-Webframework einzurichten.

Der Supervisor ist eine Prozessverwaltung, die es dir ermöglicht, Prozesse an einem Ort zu steuern. Anstatt die Flask-Anwendung als Systemdienst laufen zu lassen, wirst du also den Supervisor verwenden.

Erstelle eine neue Konfigurationsdatei„/etc/supervisor/conf.d/myapp.conf“ mit dem Editor nano.

sudo nano /etc/supervisor/conf.d/myapp.conf

Füge die folgende Konfiguration in die Datei ein. Achte darauf, dass du den Pfad der Konfiguration und den Benutzer änderst.

Mit dieser Konfiguration führst du dein Flask-Projekt mit Gunicorn aus, und anstatt die IP-Adresse für deine Anwendung zu verwenden, führst du das Flask-Projekt wie eine Sock-Datei aus.

[program:myapp] 
command=/bin/bash -c 'source /var/www/myapp/myenv/bin/activate; gunicorn -w 3 --bind unix:/var/www/myapp/ipc.sock wsgi:app'
directory=/var/www/myapp
user=james
group=www-data
autostart=true 
autorestart=true 
stdout_logfile=/var/www/myapp/myapp.log 
stderr_logfile=/var/www/myapp/error.log

Speichere und schließe die Datei, wenn du fertig bist.

Starte nun den Supervisor-Dienst mit dem unten stehenden Befehl neu, um die Änderungen zu übernehmen.

sudo systemctl restart supervisor

Überprüfe abschließend die Liste der Prozesse unter dem Supervisor mit dem folgenden Befehl. Du solltest sehen, dass der Prozess„myapp“ läuft.

sudo supervisorctl status

Und wenn du den Supervisor-Dienst überprüfst, siehst du, dass der Supervisor-Dienst aktiv ist und läuft.

sudo systemctl status supervisor

Prüfaufsichtsbehörde

Nginx als Reverse Proxy für die Flask-Anwendung einrichten

Erstelle eine neue virtuelle Hostkonfiguration„/etc/nginx/sites-available/myapp.conf“ mit dem Editor nano.

sudo nano /etc/nginx/sites-available/myapp.conf

Füge die folgende Konfiguration in die Datei ein. In diesem Beispiel wird das Flask-Projekt unter der lokalen Domain„www.myapp.local“ ausgeführt. Außerdem kannst du sehen, dass die Option„proxy_pass“ auf die UNIX-Sock-Datei verweist, die unter Gunicorn und Supervisor ausgeführt wird.

server {
    listen 80;
    server_name www.myapp.local;
location / {
include proxy_params;
proxy_pass http://unix:/var/www/myapp/ipc.sock;
}
}

Speichere und schließe die Datei, wenn du fertig bist.

Als Nächstes führst du den folgenden Befehl aus, um die Serverblockkonfiguration „myapp.conf“ zu aktivieren, und überprüfst dann die Nginx-Konfiguration. Wenn kein Fehler auftritt, siehst du eine Meldung wie„Syntax OK – Test erfolgreich“.

sudo ln -s /etc/nginx/sites-available/myapp.conf /etc/nginx/sites-enabled/
sudo nginx -t

Danach kannst du den Nginx-Dienst mit folgendem Befehl neu starten, um die neuen Änderungen an der Nginx-Konfiguration zu übernehmen.

sudo systemctl restart nginx

Bearbeite nun auf deinem lokalen Rechner die Datei /etc/hosts mit dem Editor nano.

sudo nano /etc/hosts

Lege die IP-Adresse des Ubuntu-Rechners mit dem Domänennamen„www.myapp.local“ fest (siehe unten).

192.168.5.28 www.myapp.local

Speichere und schließe die Datei.

Öffne nun deinen Webbrowser und gib den Domainnamen des Flask-Projekts (z.B. http://www.myapp.local) in die Adressleiste ein. Du solltest nun die Index-Seite deines Python-Flask-Projekts sehen.

nginx Reverse Proxy Flask einrichten

Fazit

Herzlichen Glückwunsch! Du hast das Webframework Python Flask mit Gunicorn und Nginx erfolgreich auf dem Ubuntu 22.04 Rechner installiert. Außerdem hast du gelernt, wie du das erste Python Flask-Projekt erstellst, eine virtuelle Python-Umgebung einrichtest und die Supervisor-Prozessverwaltung für das Flask-Projekt einrichtest.

Das könnte dich auch interessieren …