Wenn du eine Webanwendung mit Flask entwickelst, wirst du schnell feststellen, dass der integrierte Server hauptsächlich für Entwicklungszwecke gedacht ist. In dieser Anleitung zeigen wir dir, wie du dein Flask-Projekt auf einem Debian-10-Cloudserver mit Nginx als Reverse Proxy, uWSGI als Applikationsserver und Certbot für eine SSL-Verschlüsselung betreibst.
Voraussetzungen für das Flask-Hosting auf Debian 10
- Ein vollständig aktualisiertes Debian-10-System
- Root-Rechte oder Sudo-Zugriff
- Ein Domainname ist optional, wird aber empfohlen
Du kannst die Einrichtung auch ohne Domain durchführen, indem du localhost in der Nginx-Konfiguration verwendest. In diesem Fall ist es jedoch nicht möglich, ein gültiges SSL-Zertifikat über Certbot zu erhalten – diesen Schritt solltest du dann überspringen.
Passende Infrastruktur bei centron
Skripte und Dienste brauchen irgendwann eine Umgebung, die durchläuft: ccloud³ VMs ab 3,12 € im Monat, stundengenau abgerechnet. Cloud Server mieten →
Schritt 1: Nginx unter Debian 10 installieren
Installiere das Nginx-Paket mit folgendem Befehl:
# apt install nginxNach der Installation kannst du die Funktion testen, indem du die IP-Adresse deines Servers im Browser aufrufst. Die Standard-Startseite von Nginx sollte angezeigt werden.
Wenn du eine Domain besitzt, richte die DNS-Einträge entsprechend ein. In diesem Beispiel werden folgende Werte verwendet:
- IPv4-Adresse: 192.0.2.123
- Servernamen: example.com und www.example.com
Schritt 2: Flask installieren und uWSGI konfigurieren
Installiere zunächst die benötigten Python-Entwicklungstools sowie Flask und uWSGI:
# apt install python3-pip python-dev
# pip3 install uwsgi flaskErstelle danach ein Verzeichnis, in dem deine Website-Dateien liegen sollen:
# mkdir /var/www/exampleFalls du bereits eine Flask-Anwendung hast, verschiebe diese in das Verzeichnis /var/www/example. Alternativ kannst du zum Testen folgende einfache Anwendung erstellen:
# nano /var/www/example/main.pyFüge diesen Code in die Datei ein:
from flask import Flask
app = Flask(__name__)
@app.route("/")
def index():
return "Hello World!"
if __name__ == "__main__":
app.run(host="0.0.0.0")Jetzt richtest du eine Konfigurationsdatei für uWSGI ein:
# nano /var/www/example/config-uwsgi.iniTrage folgenden Inhalt in die Datei ein:
[uwsgi]
app = main
module = %(app)
callable = app
socket = /var/www/example/example.sock
chdir = /var/www/example
chmod-socket = 666
processes = 4
die-on-term = trueFür leistungsfähigere Server kannst du den Wert bei processes entsprechend erhöhen.
Schritt 3: Nginx für Flask und uWSGI einrichten
Beginne damit, die Standardkonfiguration von Nginx zu löschen:
# rm /etc/nginx/sites-enabled/defaultErstelle anschließend eine benutzerdefinierte Nginx-Konfigurationsdatei:
# nano /var/www/example/config-nginx.confFüge die folgende Konfiguration in die Datei ein. Falls du keine Domain verwendest, ersetze example.com und www.example.com durch localhost bei server_name:
server {
listen 80;
listen [::]:80;
server_name example.com www.example.com;
location / {
include uwsgi_params;
uwsgi_pass unix:/var/www/example/example.sock;
}
}Erstelle nun einen symbolischen Link, damit Nginx diese Konfiguration erkennt, indem du sie mit dem Verzeichnis conf.d verknüpfst:
# ln -s /var/www/example/config-nginx.conf /etc/nginx/conf.d/Um die neuen Einstellungen zu aktivieren, starte den Nginx-Dienst neu:
# systemctl restart nginxSchritt 4: uWSGI-Applikationsserver starten
Obwohl Nginx jetzt korrekt konfiguriert ist, um Anfragen an uWSGI weiterzuleiten, läuft der uWSGI-Dienst selbst noch nicht. Verwende nohup, um ihn im Hintergrund zu starten:
# nohup uwsgi /var/www/example/config-uwsgi.ini &Nach dem Start kannst du mit Strg + C ein SIGINT-Signal senden. Der uWSGI-Prozess sollte weiterhin im Hintergrund laufen. Für den produktiven Betrieb empfiehlt es sich, uWSGI beim Systemstart automatisch über einen systemd-Dienst ausführen zu lassen.
Rufe nun im Browser die Adresse deines Servers auf. Du solltest dort die Ausgabe Hello World! von deiner Flask-Anwendung sehen.
Schritt 5: Flask-Anwendung mit SSL absichern
Wenn du eine öffentliche Domain nutzt, kannst du die Website mit einem kostenlosen SSL-Zertifikat absichern.
Installiere zuerst Certbot zusammen mit dem passenden Plugin für Nginx:
# apt install certbot python-certbot-nginxFordere anschließend das SSL-Zertifikat an:
# certbot --nginxFolge den Anweisungen von Certbot. Akzeptiere die Nutzungsbedingungen und wähle alle Domains aus, für die ein Zertifikat generiert werden soll (mit Enter bestätigen).
Wenn du gefragt wirst, ob HTTP-Anfragen automatisch auf HTTPS umgeleitet werden sollen, wähle die entsprechende Option zur Weiterleitung aus.
Fazit
Mit dieser verständlichen Anleitung läuft deine Flask-Webanwendung jetzt erfolgreich auf einem Debian-10-Server – betrieben über Nginx und uWSGI und geschützt durch ein SSL-Zertifikat von Certbot. Für den produktiven Einsatz solltest du uWSGI so einrichten, dass es beim Start automatisch unter einem Benutzer mit eingeschränkten Rechten ausgeführt wird. Weitere Empfehlungen findest du in der offiziellen Dokumentation von Flask und uWSGI.
Testen Sie Ihr Setup auf ccloud³
Registrieren Sie sich in der ccloud³ und erhalten Sie 200 € Startguthaben für Ihr Projekt – z. B. für eine PostgreSQL-VM mit automatischen Backups.