[PYTHON] Le problème selon lequel le serveur Web de Flask ne peut pas être publié vers l’extérieur [VScode]

Aperçu

Lorsque je démarre un simple serveur Web construit avec Flask en déboguant depuis VScode, je peux y accéder localement sans aucun problème, mais je ne peux pas y accéder de l'extérieur.

Démarrez le débogage en appuyant sur F5 sur VScode pour le run.py suivant

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)

commencer

 * 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)

Je peux y accéder localement sans aucun problème

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

Non accessible de l'extérieur

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

Je me demande si certaines personnes restent coincées au même endroit, alors je vais le poster.

La plupart des causes

Lorsque je googlé "Flask ne peut pas être publié en externe", il y a beaucoup de gens qui sont obstrués par les causes suivantes.

0.0.0.0 n'est pas spécifié pour l'hôte

Flask n'autorise pas la divulgation externe par défaut. Par conséquent, si vous souhaitez le publier vers l'extérieur, vous devez spécifier explicitement 0.0.0.0 comme indiqué ci-dessous.

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')

Le port n'est pas ouvert

Si 0.0.0.0 ci-dessus n'a pas aidé, c'était généralement ceci. Vous pouvez l'ouvrir vers l'extérieur en désactivant le pare-feu ou en ouvrant le port que vous souhaitez utiliser.

Cause de cette fois

Même si vous essayez les deux solutions ci-dessus, si vous ne l'avez pas encore résolu, vous risquez de trébucher au même endroit que moi.

launch.json avait tort

Lorsque vous démarrez F5 avec VScode, les paramètres de launch.json sont chargés. Sur cette base, VScode démarrera le programme en appuyant correctement sur la commande de démarrage. Mon launch.json qui a été généré automatiquement cette fois était le suivant.

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
        }
    ]
}

La commande générée à partir de ce launch.json est flask run --no-debugger --no-reload Je me sens comme cela.

Apparemment, il était nécessaire de spécifier host = '0.0.0.0' dans cette partie. Ajout des spécifications d'hôte et de port aux arguments dans launch.json

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
        }
    ]
}

Il est désormais possible de l'ouvrir vers l'extérieur.

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

Réflexion

Quand je l'ai démarré avec F5, la commande exécutée par VScode est sortie correctement. Si vous regardez ici depuis le début, vous avez peut-être remarqué plus tôt

#Sur la première ligne-m flask run --no-debugger --no-Il dit recharger correctement
$ /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)

Vous devez regarder de près les journaux ...

Recommended Posts

Le problème selon lequel le serveur Web de Flask ne peut pas être publié vers l’extérieur [VScode]
Que faire si la dépendance du package ne peut pas être réparée
[Flask] J'ai essayé de résumer la "configuration docker-compose" qui peut être créée rapidement pour les applications Web
Exécutez le code de sortie sur le serveur Web local en tant que "A, faisant semblant d'être B" en python
Paramètres à effectuer lors du démarrage du serveur Linux centos7
Supplément à l'explication de vscode
La façon la plus simple de faire un flacon
J'ai essayé de pousser les documents Sphinx vers BitBucket et de les refléter automatiquement sur le serveur Web
Essayez d'utiliser le framework web de Python Django (1) - De l'installation au démarrage du serveur
Paramètres qui permettent d'accéder à IPython Notebook depuis l'extérieur du local
Correction d'un bug où node.surface ne pouvait pas être obtenu avec python3 + mecab
Démarrez le serveur Web dans le répertoire actuel
Essayez d'utiliser le framework d'application Web Flask
Comment accéder à la banque de données de l'extérieur
Publier le répertoire actuel sur le serveur Web
[Flask + Keras] Comment déduire plusieurs modèles à grande vitesse sur le serveur