[PYTHON] Das Problem, dass der Webserver von Flask nicht nach außen veröffentlicht werden kann [VScode]

Überblick

Wenn ich einen einfachen Webserver starte, der mit Flask durch Debuggen von VScode erstellt wurde, kann ich problemlos lokal darauf zugreifen, aber nicht von außen.

Starten Sie das Debuggen, indem Sie F5 auf VScode für die folgende run.py drücken

run.py


from flask import Flask, make_response, jsonify
app = Flask(__name__)

@app.route('/')
def hello_world():
    return "Hello, World!"

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

anfangen

 * Serving Flask app "flask/run.py"
 * Environment: production
   WARNING: This is a development server. Do not use it in a production deployment.
   Use a production WSGI server instead.
 * Debug mode: off
 * Running on http://127.0.0.1:5000/ (Press CTRL+C to quit)

Ich kann problemlos lokal darauf zugreifen

$ curl http://localhost:5000/
Hello, World!

Von außen nicht zugänglich

$ curl http://192.168.xxx.yyy:5000/
curl: (7) Failed to connect to 192.168.206.129 port 80: Connection refused

Ich frage mich, ob einige Leute am selben Ort stecken bleiben, also werde ich es posten.

Die meisten Ursachen

Wenn ich gegoogelt habe "Flasche kann nicht extern veröffentlicht werden", gibt es viele Leute, die aus folgenden Gründen verstopft sind.

0.0.0.0 ist für den Host nicht angegeben

Flask erlaubt standardmäßig keine externe Offenlegung. Wenn Sie es daher nach außen veröffentlichen möchten, müssen Sie wie unten gezeigt explizit 0.0.0.0 angeben.

run.py


from flask import Flask, make_response, jsonify
app = Flask(__name__)

@app.route('/')
def hello_world():
    return "Hello, World!"

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

Der Port ist nicht geöffnet

Wenn 0.0.0.0 oben nicht geholfen hat, war es normalerweise so. Sie können es nach außen öffnen, indem Sie die Firewall deaktivieren oder den Port öffnen, den Sie verwenden möchten.

Ursache dieser Zeit

Selbst wenn Sie die beiden oben genannten Lösungen ausprobieren und möglicherweise immer noch nicht lösen können, stolpern Sie möglicherweise an derselben Stelle wie ich.

launch.json war falsch

Wenn Sie F5 mit VScode starten, werden die Einstellungen von launch.json geladen. Auf dieser Grundlage startet VScode das Programm, indem er den Startbefehl auf nette Weise drückt. Meine launch.json, die dieses Mal automatisch generiert wurde, war wie folgt.

launch.json


{
    "version": "0.2.0",
    "configurations": [
        {
            "name": "Python: Flask",
            "type": "python",
            "request": "launch",
            "module": "flask",
            "env": {
                "FLASK_APP": "flask/run.py"
            },
            "args": [
                "run",
                "--no-debugger",
                "--no-reload"
            ],
            "jinja": true
        }
    ]
}

Der aus dieser launch.json generierte Befehl lautet flask run --no-debugger --no-reload Ich fühle mich so.

Anscheinend musste in diesem Teil host = '0.0.0.0' angegeben werden. Host- und Portspezifikationen zu Argumenten in launch.json hinzugefügt

launch.json


{
    "version": "0.2.0",
    "configurations": [
        {
            "name": "Python: Flask",
            "type": "python",
            "request": "launch",
            "module": "flask",
            "env": {
                "FLASK_APP": "flask/run.py"
            },
            "args": [
                "run",
                "--no-debugger",
                "--no-reload",
                "--host=0.0.0.0",
                "--port=5000"
            ],
            "jinja": true
        }
    ]
}

Es ist jetzt möglich, es nach außen zu öffnen.

$ curl http://localhost:5000/
Hello, World!

Betrachtung

Als ich es mit F5 gestartet habe, wird der von VScode ausgeführte Befehl ordnungsgemäß ausgegeben. Wenn Sie von Anfang an hierher schauen, haben Sie es vielleicht schon früher bemerkt

#In der ersten Zeile-m flask run --no-debugger --no-Es heißt richtig neu laden
$ /home/user/.local/share/virtualenvs/flask-FhE9rMZ_/bin/python /home/user/.vscode/extensions/ms-python.python-2019.10.44104/pythonFiles/ptvsd_launcher.py --default --client --host localhost --port 34251 -m flask run --no-debugger --no-reload 
 * Serving Flask app "flask/run.py"
 * Environment: production
   WARNING: This is a development server. Do not use it in a production deployment.
   Use a production WSGI server instead.
 * Debug mode: off
 * Running on http://127.0.0.1:5000/ (Press CTRL+C to quit)

Sie müssen sich die Protokolle genau ansehen ...

Recommended Posts

Das Problem, dass der Webserver von Flask nicht nach außen veröffentlicht werden kann [VScode]
Was tun, wenn die Paketabhängigkeit nicht repariert werden kann?
[Flask] Ich habe versucht, die "Docker-Compose-Konfiguration" zusammenzufassen, die schnell für Webanwendungen erstellt werden kann
Führen Sie den Ausgabecode auf dem lokalen Webserver in Python als "A, gibt vor, B zu sein" aus
Einstellungen, die beim Starten des Linux-Servers centos7 vorgenommen werden müssen
Ergänzung zur Erklärung von vscode
Der einfachste Weg, eine Flasche herzustellen
Ich habe versucht, Sphinx-Dokumente an BitBucket zu senden und sie automatisch auf dem Webserver wiederzugeben
Versuchen Sie es mit Pythons Webframework Django (1) - Von der Installation bis zum Serverstart
Einstellungen, mit denen auf IPython Notebook von außerhalb des lokalen Bereichs zugegriffen werden kann
Es wurde ein Fehler behoben, bei dem node.surface mit python3 + mecab nicht abgerufen werden konnte
Starten Sie den Webserver im aktuellen Verzeichnis
Versuchen Sie es mit dem Webanwendungsframework Flask
So greifen Sie von außen auf den Datenspeicher zu
Veröffentlichen Sie das aktuelle Verzeichnis auf dem Webserver
[Flask + Keras] So schließen Sie mehrere Modelle mit hoher Geschwindigkeit auf dem Server ab