web-dev-qa-db-fra.com

Configurez le serveur Flask dev pour qu'il soit visible sur le réseau.

Je ne suis pas sûr qu'il s'agisse de Flask spécifique, mais lorsque je lance une application en mode dev (http://localhost:5000), je ne peux pas y accéder à partir d'autres machines du réseau (avec http://[dev-Host-ip]:5000). Avec Rails en mode dev, par exemple, cela fonctionne bien. Je n'ai trouvé aucune documentation concernant la configuration du serveur Flask dev. Une idée de ce qui devrait être configuré pour permettre ceci?

349
sa125

Bien que cela soit possible, vous ne devez pas utiliser le serveur Flask dev en production. Le serveur Flask dev n'est pas conçu pour être particulièrement sécurisé, stable ou efficace. Voir la documentation sur déploiement pour les solutions correctes.


Ajoutez un paramètre à votre app.run(). Par défaut, il s’exécute sur localhost. Changez-le en app.run(Host= '0.0.0.0') pour s’exécuter sur l’adresse IP de votre ordinateur.

Documenté sur le site Flask sous "Serveur externe visible" sur le page de démarrage rapide :

Serveur visible de l'extérieur

Si vous exécutez le serveur, vous remarquerez qu'il n'est disponible que sur votre propre ordinateur, et non sur un autre du réseau. C'est la valeur par défaut, car en mode débogage, un utilisateur de l'application peut exécuter du code Python arbitraire sur votre ordinateur. Si le débogage est désactivé ou si vous faites confiance aux utilisateurs de votre réseau, vous pouvez rendre le serveur accessible au public.

Il suffit de changer l'appel de la méthode run() pour qu'il ressemble à ceci:

app.run(Host='0.0.0.0')

Cela indique à votre système d'exploitation d'écouter sur une adresse IP publique.

590
Shawn Swaner

Si vous utilisez l'exécutable flask pour démarrer votre serveur, vous pouvez utiliser flask run --Host=0.0.0.0 pour modifier la valeur par défaut de 127.0.0.1 et l'ouvrir aux connexions non locales. Les méthodes config et app.run décrites dans les autres réponses constituent probablement une meilleure pratique, mais elles peuvent également s'avérer utiles.

Serveur visible de l'extérieur Si vous exécutez le serveur, vous remarquerez qu'il n'est accessible que depuis votre propre ordinateur, et non depuis un autre ordinateur du réseau. C'est la valeur par défaut, car en mode débogage, un utilisateur de l'application peut exécuter du code Python arbitraire sur votre ordinateur.

Si le débogueur est désactivé ou si vous faites confiance aux utilisateurs de votre réseau, vous pouvez rendre le serveur accessible au public en ajoutant simplement --Host = 0.0.0.0 à la ligne de commande:

flask run --Host = 0.0.0.0 Ceci indique à votre système d'exploitation d'écouter toutes les adresses IP publiques.

Référence: http://flask.pocoo.org/docs/0.11/quickstart/

92
Aria

Si la configuration de votre application cool a été chargée à partir d'un fichier externe, comme dans l'exemple suivant, n'oubliez pas de mettre à jour le fichier de configuration correspondant avec Host = "0.0.0.0".

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

Ajouter les lignes ci-dessous à votre projet

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

Vérifiez si le port particulier est ouvert sur le serveur pour servir le client ou non?

dans la distribution Ubuntu ou Linux

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

Configurer l'application pour gérer les requêtes distantes

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


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

Essayez ceci si la méthode 0.0.0.0 ne fonctionne pas

Boring Stuff

J'ai personnellement beaucoup lutté pour que mon application soit accessible à d'autres appareils (ordinateurs portables et téléphones portables) via un serveur local. J'ai essayé la méthode 0.0.0.0, mais pas de chance. Ensuite, j'ai essayé de changer le port, mais cela n'a pas fonctionné. Donc, après avoir essayé plusieurs combinaisons différentes, je suis arrivé à celle-ci et cela a résolu mon problème de déploiement de mon application sur un serveur local.

Étapes

  1. Obtenez l'adresse IPv4 locale de votre ordinateur. Cela peut être fait en tapant ipconfig sous Windows et ifconfig sous Linux et Mac.

IPv4 (Windows)

Remarque: L'étape ci-dessus doit être effectuée sur la machine sur laquelle vous servez l'application et non sur la machine sur laquelle vous y accédez. Notez également que l'adresse IPv4 peut changer si vous vous déconnectez puis vous reconnectez au réseau.

  1. Maintenant, lancez simplement l'application flask avec l'adresse IPv4 acquise.

    flask run -h 192.168.X.X

    Par exemple. Dans mon cas (voir l'image), je l'ai couru comme:

    flask run -h 192.168.1.100

running the flask app

Sur mon appareil mobile

screenshot from my mobile phone

Facultatif

Si vous suivez cette procédure sous Windows et utilisez Power Shell comme interface de ligne de commande et que vous ne pouvez toujours pas accéder au site Web, essayez une commande CTRL + C dans le shell qui exécute l'application. Power Shell se bloque parfois et il lui faut une pincée pour le faire revivre. Cela pourrait même terminer le serveur, mais cela peut parfois suffire.

C'est ça. Donnez un coup de pouce si vous avez trouvé cela utile.

Quelques trucs plus optionnels

J'ai créé un court script Powershell qui vous donnera votre adresse IP chaque fois que vous en avez besoin:

$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

Enregistrez-le dans un fichier avec l'extension .ps1 (pour PowerShell) et exécutez-le avant de démarrer votre application. Vous pouvez l'enregistrer dans votre dossier de projet et l'exécuter en tant que:

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

Remarque: J'ai enregistré le code Shell ci-dessus dans getIP.ps1.

Cool.????

3
nwillo

Cette réponse n’est pas uniquement liée au flacon, mais devrait s’appliquer à tous ne pouvant pas connecter le service à partir d’un autre hôte .

  1. utilisez netstat -ano | grep <port> pour voir si l'adresse est 0.0.0.0 ou ::. Si c'est 127.0.0.1, alors ce n'est que pour les demandes locales.
  2. utilisez tcpdump pour voir si un paquet est manquant. Si le déséquilibre est évident, vérifiez les règles de routage avec iptables.

Aujourd'hui, je lance mon application flask comme d'habitude, mais j'ai remarqué qu'elle ne pouvait pas se connecter à partir d'un autre serveur. Ensuite, je lance netstat -ano | grep <port> et l'adresse locale est :: ou 0.0.0.0 (j'ai essayé les deux et je sais que 127.0.0.1 n'autorise la connexion qu'à partir de l'hôte local). Puis j'ai utilisé telnet Host port, le résultat est comme connect to .... C'est très étrange. Alors j'ai pensé que je ferais mieux de vérifier avec tcpdump -i any port <port> -w w.pcap. Et j'ai remarqué que c'est comme ça:

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

Ensuite, en vérifiant la section iptables --list OUTPUT, je pouvais voir plusieurs règles:

iptables list result

ces règles interdisent la sortie des paquets vitaux TCP dans le protocole de transfert. En les supprimant, le problème a disparu.

2
Tiina

J'ai eu le même problème, j'utilise PyCharm comme éditeur et lorsque j'ai créé le projet, PyCharm a créé un serveur Flask. Ce que j'ai fait est de créer un serveur avec Python de la manière suivante;

Config Python Server PyCharm en gros, j'ai créé un nouveau serveur mais flask sinon python

J'espère que ça t'aide

2

Si vous rencontrez des problèmes pour accéder à votre serveur Flask, déployé à l'aide de PyCharm , tenez compte des points suivants:

PyCharm n'exécute pas directement votre fichier .py principal. Par conséquent, aucun code dans if __== '__main__': ne sera exécuté, et aucune modification (telle que app.run(Host='0.0.0.0', port=5000)) ne prendra effet.

Au lieu de cela, vous devez configurer le serveur Flask à l'aide de la configuration d'exécution, notamment en plaçant --Host 0.0.0.0 --port 5000 dans le champ Additional options .

Run cofigurations of Flask server PyCharm

En savoir plus sur configuration du serveur Flask dans PyCharm

1
Viacheslav Z

Accédez à votre chemin de projet sur CMD (invite de commande) et exécutez la commande suivante: -

set FLASK_APP = ABC.py

SET FLASK_ENV = développement

ballon courir -h [votreIP] -p 8080

vous obtiendrez o/p suivant sur CMD: -

  • Servir Flask app "expirement.py" (chargement différé)
    • Environnement: développement
    • Mode de débogage: sur
    • Redémarrer avec stat
    • Le débogueur est actif!
    • PIN du débogueur: 199-519-700
    • En cours d'exécution sur http: // [votreIP]: 8080 / (Appuyez sur CTRL + C pour quitter)

Vous pouvez maintenant accéder à votre application flask sur une autre machine à l'aide de http: // [votreIP]: 8080 / url

0
Ibz.Shaikh

aller au chemin du projet. Définir FLASK_APP = ABC.py SET FLASK_ENV = Développement.

flask run -h [votreIP] -p 8080 vous suivrez o/p sur CMD: - * Traitement Flask app "expirement.py" (chargement différé) * Environnement: développement * Mode débogage: le * Redémarrage avec stat * Le débogueur est actif! * PIN du débogueur: 199-519-700 * En cours d'exécution sur http: // [votreIP]: 8080 / (Appuyez sur CTRL + C pour quitter)

0
Ibz.Shaikh