Ich habe einen Flask-Server, der über Port 5000 läuft, und es ist in Ordnung. Ich kann unter http://example.com:5000 darauf zugreifen
Aber ist es möglich, einfach unter http://example.com darauf zuzugreifen ? Ich gehe davon aus, dass dies bedeutet, dass ich den Port von 5000 auf 80 ändern muss. Aber wenn ich das auf Flask versuche, erhalte ich diese Fehlermeldung, wenn ich es ausführe.
Traceback (most recent call last):
File "xxxxxx.py", line 31, in <module>
app.run(host="0.0.0.0", port=int("80"), debug=True)
File "/usr/local/lib/python2.6/dist-packages/flask/app.py", line 772, in run
run_simple(host, port, self, **options)
File "/usr/local/lib/python2.6/dist-packages/werkzeug/serving.py", line 706, in run_simple
test_socket.bind((hostname, port))
File "<string>", line 1, in bind
socket.error: [Errno 98] Address already in use
Running lsof -i :80
kehrt zurück
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
apache2 467 root 3u IPv4 92108840 0t0 TCP *:www (LISTEN)
apache2 4413 www-data 3u IPv4 92108840 0t0 TCP *:www (LISTEN)
apache2 14346 www-data 3u IPv4 92108840 0t0 TCP *:www (LISTEN)
apache2 14570 www-data 3u IPv4 92108840 0t0 TCP *:www (LISTEN)
apache2 14571 www-data 3u IPv4 92108840 0t0 TCP *:www (LISTEN)
apache2 14573 www-data 3u IPv4 92108840 0t0 TCP *:www (LISTEN)
Muss ich diese Prozesse zuerst beenden? Ist das sicher Oder gibt es eine andere Möglichkeit, Flask auf Port 5000 am Laufen zu halten, aber die Domain der Hauptwebsite irgendwie umzuleiten?
python
networking
flask
port
Quantumtremor
quelle
quelle
Antworten:
Es wird also diese Fehlermeldung ausgegeben, weil Sie
apache2
auf Port 80 ausgeführt haben.Wenn dies für die Entwicklung ist, würde ich es einfach so lassen, wie es auf Port 5000 ist.
Wenn es entweder für die Produktion ist:
Nicht empfohlen
apache2
zuerst an;Nicht empfohlen, wie in der Dokumentation angegeben:
Empfohlen
HTTP
Verkehr bisapache2
zu Flask.Auf diese Weise
apache2
können Sie alle Ihre statischen Dateien verarbeiten (was sehr gut ist - viel besser als der in Flask integrierte Debug-Server) und als Reverse-Proxy für Ihren dynamischen Inhalt fungieren und diese Anforderungen an Flask weiterleiten.Hier ist ein Link zur offiziellen Dokumentation zum Einrichten von Flask mit Apache + mod_wsgi.
Bearbeiten 1 - Klarstellung für @Djack
Wenn eine Anfrage an Port 80 (
HTTP
) oder Port 443 (HTTPS
) an den Server geht, verarbeitet ein Webserver wie Apache oder Nginx die Verbindung der Anfrage und ermittelt, was damit zu tun ist. In unserem Fall sollte eine empfangene Anforderung so konfiguriert werden, dass sie im WSGI-Protokoll an Flask weitergeleitet und vom Python-Code verarbeitet wird. Dies ist der "dynamische" Teil.Die Konfiguration Ihres Webservers bietet einige Vorteile wie oben beschrieben.
quelle
Proxy HTTP traffic to Flask through apache2
" und "reverse proxy for dynamic content
" verwendet haben, im Klartext entmystifizieren ?1- Stoppen Sie andere Anwendungen, die Port 80 verwenden. 2- Führen Sie die Anwendung mit Port 80 aus:
quelle
Für extern sichtbare Server, auf denen Sie keinen Apache oder einen anderen Webserver verwenden, geben Sie einfach ein
quelle
CMD flask run --host=0.0.0.0 --port=$PORT
in meiner Docker-Datei (aus Heroku-Gründen) und bekomme immer wieder Fehler, wenn ich eine Ganzzahl für meinen Port benötigeWenn Sie den Port oder Host wie folgt ändern:
Verwenden Sie den folgenden Code, um den Server zu starten (mein Haupteingang für die Flasche ist app.py):
anstatt zu verwenden:
quelle
Wenn Sie möchten, dass sich Ihre Anwendung auf demselben Port befindet, dh Port = 5000, führen Sie diesen Befehl einfach in Ihrem Terminal aus:
und dann ausführen:
Wenn Sie auf einem bestimmten Port ausgeführt werden möchten, z. B. wenn Sie auf Port = 80 ausführen möchten, erwähnen Sie in Ihrer Hauptdatei Folgendes:
quelle
Ein praktischer Weg ist die Verwendung des Pakets
python-dotenv
: Es liest eine.flaskenv
Datei vor, in der Sie Umgebungsvariablen für den Kolben speichern können.pip install python-dotenv
.flaskenv
im Stammverzeichnis Ihrer AppIn der von Ihnen angegebenen Datei:
Danach müssen Sie nur noch Ihre App ausführen
flask run
und können an diesem Port auf Ihre App zugreifen.Bitte beachten Sie, dass
FLASK_RUN_HOST
standardmäßig127.0.0.1
undFLASK_RUN_PORT
standardmäßig5000
.quelle
Dies ist die einzige Lösung, die unter Ubuntu-18 für mich funktioniert hat.
app.py
Verwenden Sie in der Datei :Der obige Code gibt den gleichen Berechtigungsfehler aus, es
sudo
sei denn, er wird zum Ausführen verwendet:quelle
Ihr Problem ist, dass bereits ein Apache-Webserver ausgeführt wird, der bereits Port 80 verwendet. Sie können also entweder:
Apache töten: Sie sollten dies wahrscheinlich über tun
/etc/init.d/apache2 stop
, anstatt sie einfach zu töten.Stellen Sie Ihre Flask-App in Ihrem Apache-Prozess bereit, wie in Flache in Apache beschrieben.
quelle
Ich musste
FLASK_RUN_PORT
in meiner Umgebung die angegebene Portnummer einstellen . Beim nächsten Start Ihrer App lädt Flask diese Umgebungsvariable mit der von Ihnen ausgewählten Portnummer.quelle
Sie müssen die Portnummer für Ihre Anwendung nicht ändern. Konfigurieren Sie einfach Ihren WWW-Server (Nginx oder Apache) für Proxy-Abfragen zum Flask-Port. Achten Sie darauf
uWSGI
.quelle
Setzen Sie den Port mit
app.run(port=80,debug=True)
Sie sollten debug auf true setzen, wenn auf devquelle
Einfachste und beste Lösung
Speichern Sie Ihre .py-Datei in einem Ordner. In diesem Fall ist mein Ordnername test. Führen Sie an der Eingabeaufforderung Folgendes aus
----------------- Folgendes wird zurückgegeben ----------------
Geben Sie nun in Ihrem Browser Folgendes ein : http://127.0.0.1:8000 . Vielen Dank
quelle
In meinem Szenario haben die folgenden Schritte wie ein Zauber gewirkt:
Paket installieren:
Erstellen einer versteckten Datei in meinem App-Verzeichnis "flaskr / .flaskenv"
Hinzufügen des folgenden Inhalts:
Führen Sie zum Schluss den Kolbenbefehl noch einmal aus:
Die Version, an der ich arbeite, ist:
quelle