webentwicklung-frage-antwort-db.com.de

Konfigurieren Sie den Flask dev-Server so, dass er im gesamten Netzwerk sichtbar ist

Ich bin nicht sicher, ob dies Flask spezifisch ist, aber wenn ich eine App im Entwicklungsmodus (http://localhost:5000) ausführe, kann ich von anderen Computern im Netzwerk (mit http://[dev-Host-ip]:5000) nicht darauf zugreifen. Mit Rails im dev-Modus funktioniert dies beispielsweise einwandfrei. Ich konnte keine Dokumente zur Serverkonfiguration von Flask dev finden. Irgendeine Idee, was konfiguriert werden sollte, um dies zu ermöglichen?

349
sa125

Während dies möglich ist, sollten Sie den Flask dev-Server nicht in der Produktion verwenden. Der Flask dev-Server ist nicht besonders sicher, stabil oder effizient. In den Dokumenten unter Deployment finden Sie die richtigen Lösungen.


Fügen Sie Ihrer app.run() einen Parameter hinzu. Standardmäßig wird es auf localhost ausgeführt. Ändern Sie es in app.run(Host= '0.0.0.0'), um es auf der IP-Adresse Ihres Computers auszuführen.

Dokumentiert auf der Flask Site unter "Extern sichtbarer Server" auf der Schnellstart-Seite :

Extern sichtbarer Server

Wenn Sie den Server ausführen, werden Sie feststellen, dass der Server nur von Ihrem eigenen Computer aus verfügbar ist, nicht von einem anderen im Netzwerk. Dies ist die Standardeinstellung, da ein Benutzer der Anwendung im Debugging-Modus beliebigen Python Code auf Ihrem Computer ausführen kann. Wenn Sie das Debuggen deaktiviert haben oder den Benutzern in Ihrem Netzwerk vertrauen, können Sie den Server öffentlich verfügbar machen.

Ändern Sie einfach den Aufruf der Methode run() so:

app.run(Host='0.0.0.0')

Dies weist Ihr Betriebssystem an, eine öffentliche IP abzuhören.

590
Shawn Swaner

Wenn Sie die ausführbare Datei flask zum Starten Ihres Servers verwenden, können Sie flask run --Host=0.0.0.0 verwenden, um den Standardwert von 127.0.0.1 zu ändern und ihn für nicht lokale Verbindungen zu öffnen. Die Methoden config und app.run, die in den anderen Antworten beschrieben werden, sind wahrscheinlich eine bessere Übung, aber dies kann auch nützlich sein.

Extern sichtbarer Server Wenn Sie den Server ausführen, werden Sie feststellen, dass auf den Server nur von Ihrem eigenen Computer aus zugegriffen werden kann, nicht von einem anderen im Netzwerk. Dies ist die Standardeinstellung, da ein Benutzer der Anwendung im Debugging-Modus beliebigen Python Code auf Ihrem Computer ausführen kann.

Wenn Sie den Debugger deaktiviert haben oder den Benutzern in Ihrem Netzwerk vertrauen, können Sie den Server einfach durch Hinzufügen von --Host = 0.0.0.0 zur Befehlszeile öffentlich verfügbar machen:

flask run --Host = 0.0.0.0 Dies weist Ihr Betriebssystem an, alle öffentlichen IPs abzuhören.

Referenz: http://flask.pocoo.org/docs/0.11/quickstart/

92
Aria

Wenn Ihre cool App die Konfiguration aus einer externen Datei geladen hat, wie im folgenden Beispiel, vergessen Sie nicht, die entsprechende Konfigurationsdatei mit Host = "0.0.0.0" zu aktualisieren.

cool.app.run(
    Host=cool.app.config.get("Host", "localhost"),
    port=cool.app.config.get("PORT", 9000)
)            
18
mircealungu

Fügen Sie Ihrem Projekt die folgenden Zeilen hinzu

if __== '__main__':
    app.debug = True
    app.run(Host = '0.0.0.0',port=5005)
15

Überprüfen Sie, ob der bestimmte Port auf dem Server geöffnet ist, um den Client zu bedienen, oder nicht?

in Ubuntu oder Linux Distribution

Sudo ufw enable
Sudo ufw allow 5000/tcp //allow the server to handle the request on port 5000

Konfigurieren Sie die Anwendung für die Verarbeitung von Remoteanforderungen

app.run(Host='0.0.0.0' , port=5000)


python3 app.py & #run application in background
7
IMRA

Versuchen Sie dies, wenn die 0.0.0.0-Methode nicht funktioniert

Langweiliges Zeug

Ich persönlich habe viel gekämpft, um meine App über einen lokalen Server für andere Geräte (Laptops und Mobiltelefone) zugänglich zu machen. Ich habe die 0.0.0.0-Methode ausprobiert, aber kein Glück. Dann habe ich versucht, den Port zu ändern, aber es hat einfach nicht funktioniert. Nachdem ich eine Reihe verschiedener Kombinationen ausprobiert hatte, kam ich zu dieser und löste das Problem der Bereitstellung meiner App auf einem lokalen Server.

Schritte

  1. Rufen Sie die lokale IPv4-Adresse Ihres Computers ab. Dies kann durch Eingabe von ipconfig unter Windows und ifconfig unter Linux und Mac erfolgen.

IPv4 (Windows)

Hinweis: Der obige Schritt muss auf dem Computer ausgeführt werden, auf dem Sie die App bereitstellen, und nicht auf dem Computer, auf den Sie zugreifen. Beachten Sie auch, dass sich die IPv4-Adresse möglicherweise ändert, wenn Sie die Verbindung zum Netzwerk trennen und erneut herstellen.

  1. Führen Sie nun einfach die App flask mit der erhaltenen IPv4-Adresse aus.

    flask run -h 192.168.X.X

    Z.B. In meinem Fall (siehe das Bild) lief es wie folgt:

    flask run -h 192.168.1.100

running the flask app

Auf meinem Mobilgerät

screenshot from my mobile phone

Optionales Zeugs

Wenn Sie dieses Verfahren unter Windows ausführen und Power Shell als CLI verwenden und dennoch nicht auf die Website zugreifen können, versuchen Sie einen STRG + C-Befehl in der Shell, in der die App ausgeführt wird. Power Shell friert manchmal ein und es braucht eine Prise, um sich zu beleben. Wenn Sie dies tun, wird der Server möglicherweise sogar beendet, manchmal reicht dies jedoch aus.

Das ist es. Geben Sie einen Daumen hoch, wenn Sie dies hilfreich fanden.

Noch ein paar optionale Dinge

Ich habe ein kurzes Powershell-Skript erstellt, mit dem Sie Ihre IP-Adresse erhalten, wann immer Sie eine benötigen:

$env:getIp = ipconfig
if ($env:getIp -match '(IPv4[\sa-zA-Z.]+:\s[0-9.]+)') {
    if ($matches[1] -match '([^a-z\s][\d]+[.\d]+)'){
        $ipv4 = $matches[1]
    }
}
echo $ipv4

Speichern Sie es in einer Datei mit der Erweiterung .ps1 (für PowerShell) und führen Sie es aus, bevor Sie Ihre App starten. Sie können es in Ihrem Projektordner speichern und ausführen als:

.\getIP.ps1; flask run -h $ipv4

Hinweis: Ich habe den obigen Shell-Code in getIP.ps1 gespeichert.

Cool.????

3
nwillo

Diese Antwort bezieht sich nicht nur auf flask, sondern sollte für alle zutreffen , die keine Verbindung zum Dienst eines anderen Hosts herstellen können.

  1. verwenden Sie netstat -ano | grep <port>, um festzustellen, ob die Adresse 0.0.0.0 oder :: lautet. Wenn es sich um 127.0.0.1 handelt, gilt dies nur für die lokalen Anforderungen.
  2. verwenden Sie tcpdump, um festzustellen, ob ein Paket fehlt. Wenn es offensichtliche Ungleichgewichte gibt, überprüfen Sie die Routing-Regeln mit iptables.

Heute starte ich meine flask App wie gewohnt, habe aber festgestellt, dass keine Verbindung von einem anderen Server hergestellt werden kann. Dann starte ich netstat -ano | grep <port> und die lokale Adresse ist :: oder 0.0.0.0 (ich habe beide ausprobiert und weiß, dass 127.0.0.1 nur Verbindungen vom lokalen Host zulässt). Dann habe ich telnet Host port verwendet, das Ergebnis ist wie connect to .... Das ist sehr merkwürdig. Dann dachte ich, ich würde es besser mit tcpdump -i any port <port> -w w.pcap überprüfen. Und mir ist aufgefallen, dass alles so ist:

tcpdump result shows it there is only SYN packets from remote Host

Wenn ich dann den Abschnitt iptables --list OUTPUT überprüfe, sehe ich mehrere Regeln:

iptables list result

diese Regeln verbieten die Ausgabe von wichtigen TCP-Paketen beim Handshake. Wenn Sie sie löschen, ist das Problem behoben.

2
Tiina

Ich hatte das gleiche Problem, ich benutze PyCharm als Editor und als ich das Projekt erstellte, erstellte PyCharm einen Flask Server. Ich habe einen Server mit Python auf folgende Weise erstellt.

Config Python Server PyCharm Im Grunde habe ich einen neuen Server erstellt, aber flask wenn nicht Python

Ich hoffe es hilft dir

2

Wenn Sie Probleme beim Zugriff auf Ihren Flask Server haben, der mit PyCharm bereitgestellt wurde, berücksichtigen Sie Folgendes:

PyCharm führt Ihre .py-Hauptdatei nicht direkt aus. Daher wird kein Code in if __== '__main__': ausgeführt, und Änderungen (wie app.run(Host='0.0.0.0', port=5000)) werden nicht wirksam.

Stattdessen sollten Sie den Server Flask mithilfe von Run Configurations konfigurieren, insbesondere indem Sie --Host 0.0.0.0 --port 5000 in das Feld Additional options einfügen.

Run cofigurations of Flask server PyCharm

Weitere Informationen zu Konfigurieren von Flask Servern in PyCharm

1
Viacheslav Z

Wechseln Sie in CMD zu Ihrem Projektpfad (Eingabeaufforderung) und führen Sie den folgenden Befehl aus:

setze FLASK_APP = ABC.py

SET FLASK_ENV = Entwicklung

flask run -h [yourIP] -p 8080

sie erhalten folgende Informationen über CMD: -

  • Serving Flask App "expirement.py" (verzögertes Laden)
    • Umwelt: Entwicklung
    • Debug-Modus: Ein
    • Neustart mit stat
    • Debugger ist aktiv!
    • Debugger-PIN: 199-519-700
    • Läuft auf http: // [yourIP]: 8080 / (Drücken Sie STRG + C, um das Programm zu beenden.)

Jetzt können Sie auf einem anderen Computer mit http: // [yourIP]: 8080 / url auf Ihre flask App zugreifen

0
Ibz.Shaikh

gehe zum Projektpfad set FLASK_APP = ABC.py SET FLASK_ENV = development

flask run -h [yourIP] -p 8080 Sie werden folgende O/P auf CMD: - * Serving Flask App "expirement.py" (verzögertes Laden) * Umgebung: Entwicklung * Debug-Modus: Ein * Neustart mit stat * Debugger ist aktiv! * Debugger-PIN: 199-519-700 * Wird ausgeführt auf http: // [yourIP]: 8080 / (Drücken Sie STRG + C, um das Programm zu beenden.)

0
Ibz.Shaikh