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?
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.
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.
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)
)
Fügen Sie Ihrem Projekt die folgenden Zeilen hinzu
if __== '__main__':
app.debug = True
app.run(Host = '0.0.0.0',port=5005)
Ü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
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
ipconfig
unter Windows und ifconfig
unter Linux und Mac erfolgen.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.
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
Auf meinem Mobilgerät
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.????
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.
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.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:
Wenn ich dann den Abschnitt iptables --list
OUTPUT überprüfe, sehe ich mehrere Regeln:
diese Regeln verbieten die Ausgabe von wichtigen TCP-Paketen beim Handshake. Wenn Sie sie löschen, ist das Problem behoben.
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.
Weitere Informationen zu Konfigurieren von Flask Servern in PyCharm
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: -
Jetzt können Sie auf einem anderen Computer mit http: // [yourIP]: 8080 / url auf Ihre flask App zugreifen
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.)