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?
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.
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/
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)
)
Ajouter les lignes ci-dessous à votre projet
if __== '__main__':
app.debug = True
app.run(Host = '0.0.0.0',port=5005)
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
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
ipconfig
sous Windows et ifconfig
sous Linux et Mac.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.
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
Sur mon appareil mobile
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.????
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 .
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.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:
Ensuite, en vérifiant la section iptables --list
OUTPUT, je pouvais voir plusieurs règles:
ces règles interdisent la sortie des paquets vitaux TCP dans le protocole de transfert. En les supprimant, le problème a disparu.
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 .
En savoir plus sur configuration du serveur Flask dans PyCharm
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: -
Vous pouvez maintenant accéder à votre application flask sur une autre machine à l'aide de http: // [votreIP]: 8080 / url
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)