723 Stimmen

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

Ich bin mir nicht sicher, ob dies Flask-spezifisch ist, aber wenn ich eine App im Dev-Mode laufen lasse ( http://localhost:5000 ), kann ich von anderen Rechnern im Netzwerk nicht darauf zugreifen (mit http://[dev-host-ip]:5000 ). Mit Rails im Dev-Modus, zum Beispiel, funktioniert es gut. Ich konnte keine Dokumente zur Konfiguration des Flask-Dev-Servers finden. Irgendeine Idee, was konfiguriert werden sollte, um dies zu aktivieren?

1071voto

Shawn Swaner Punkte 9668

Obwohl dies möglich ist, sollten Sie den Flask Dev-Server nicht in der Produktion verwenden. Der Flask Dev-Server ist nicht dafür ausgelegt, besonders sicher, stabil oder effizient zu sein. Siehe die Dokumentationen auf Einsatz von für korrekte Lösungen.


El --host Option zu flask run oder die host Parameter zu app.run() steuert, auf welche Adresse der Entwicklungsserver hört. Standardmäßig läuft er auf localhost ändern Sie es in flask run --host=0.0.0.0 (o app.run(host="0.0.0.0") ), um auf allen IP-Adressen Ihres Rechners zu laufen.

0.0.0.0 ist ein spezieller Wert, den Sie nicht direkt im Browser verwenden können. Sie müssen zur tatsächlichen IP-Adresse des Rechners im Netzwerk navigieren. Möglicherweise müssen Sie auch Ihre Firewall anpassen, um den externen Zugriff auf den Anschluss zuzulassen.

Der Flachmann Schnellstart-Dokumente Dies wird im Abschnitt "Extern sichtbarer Server" erläutert:

Wenn Sie den Server starten, werden Sie feststellen, dass der Server nur von Ihrem eigenen Computer aus zugänglich ist, nicht von anderen Computern im Netzwerk. Dies ist die Voreinstellung, da im Debugging-Modus ein Benutzer der Anwendung 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 öffentlich zugänglich machen, indem Sie einfach --host=0.0.0.0 in die Befehlszeile:

$ flask run --host=0.0.0.0

Dadurch wird Ihr Betriebssystem angewiesen, alle öffentlichen IPs abzuhören.

178voto

Aria Punkte 1760

Wenn Sie die flask um Ihren Server zu starten, verwenden Sie flask run --host=0.0.0.0 um den Standardwert von 127.0.0.1 zu ändern und ihn für nicht-lokale Verbindungen zu öffnen.

Wenn Sie den Server starten, werden Sie feststellen, dass der Server nur von Ihrem eigenen Computer aus zugänglich ist, nicht von anderen Computern im Netzwerk. Dies ist die Voreinstellung, da im Debugging-Modus ein Benutzer der Anwendung 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 öffentlich zugänglich machen, indem Sie einfach --host=0.0.0.0 in die Befehlszeile:

$ flask run --host=0.0.0.0

Dadurch wird Ihr Betriebssystem angewiesen, alle öffentlichen IPs abzuhören.

Referenz: https://flask.palletsprojects.com/quickstart/

99voto

nwillo Punkte 1044

Versuchen Sie dies, wenn die 0.0.0.0-Methode nicht funktioniert

Langweiliges Zeug

Ich persönlich habe viel damit gekämpft, meine App über einen lokalen Server für andere Geräte (Laptops und Handys) zugänglich zu machen. Ich habe es mit der 0.0.0.0-Methode versucht, aber ohne Erfolg. Dann habe ich versucht, den Port zu ändern, aber es hat einfach nicht funktioniert. Nachdem ich also eine Reihe verschiedener Kombinationen ausprobiert hatte, kam ich zu dieser, und sie löste mein Problem, meine App auf einem lokalen Server bereitzustellen.

Schritte

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

IPv4 (Windows)

Bitte beachten Sie: Der obige Schritt muss auf dem Rechner ausgeführt werden, auf dem Sie die Anwendung bereitstellen, und nicht auf dem Rechner, auf dem Sie auf die Anwendung zugreifen. Beachten Sie auch, dass sich die IPv4-Adresse ändern kann, wenn Sie die Verbindung zum Netzwerk trennen und wieder herstellen.

  1. Führen Sie nun einfach die Flask-Anwendung mit der erworbenen IPv4-Adresse aus.

    flask run -h 192.168.X.X

    In meinem Fall (siehe Bild) habe ich es z. B. so ausgeführt:

    flask run -h 192.168.1.100

running the flask app

Auf meinem mobilen Gerät

screenshot from my mobile phone

Optionales Material

Wenn Sie diese Prozedur unter Windows durchführen und Power Shell als CLI verwenden und Sie immer noch nicht auf die Website zugreifen können, versuchen Sie es mit dem Befehl STRG + C in der Shell, in der die Anwendung ausgeführt wird. Power Shell friert manchmal ein und benötigt einen kurzen Tastendruck, um wieder zu funktionieren. Dies kann sogar dazu führen, dass der Server beendet wird, aber manchmal klappt es.

Das war's. Geben Sie einen Daumen hoch, wenn Sie dies hilfreich fanden.

Einige weitere optionale Dinge

Ich habe ein kurzes Powershell-Skript erstellt, das Ihnen Ihre IP-Adresse liefert, wann immer Sie sie brauchen:

$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 Anwendung starten. Sie können die Datei in Ihrem Projektordner speichern und sie ausführen als:

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

Hinweis: Ich habe den obigen Shellcode in getIP.ps1 gespeichert.

Cool.

86voto

Jeevan Chaitanya Punkte 1055

Hinzufügen host='0.0.0.0' to app.run`.

if __name__ == '__main__':
    app.run(host='0.0.0.0', port=5000)

Wenn Sie OSError: [WinError 10013] An attempt was made to access a socket in a way forbidden by its access permissions unter Windows, haben Sie entweder keine Berechtigung, den Anschluss zu verwenden, oder er wird von etwas anderem verwendet, was Sie mit netstat -na|findstr 5000 .

27voto

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

in Ubuntu oder einer 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 Bearbeitung von Fernanfragen

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

python3 app.py & #run application in background

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X