564 votes

Configurer le serveur de développement Flask pour qu'il soit visible sur le réseau

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

863voto

Shawn Swaner Points 1070

Bien que cela soit possible, vous ne devriez pas utiliser le serveur de développement Flask en production. Le serveur de développement Flask n'est pas conçu pour être particulièrement sûr, stable ou efficace. Voir la documentation sur Déploiement de pour des solutions correctes.


El --host option pour flask run ou le host pour app.run() contrôle l'adresse que le serveur de développement écoute. Par défaut, il fonctionne sur localhost changez-le en flask run --host=0.0.0.0 (o app.run(host="0.0.0.0") ) pour fonctionner sur toutes les adresses IP de votre machine.

0.0.0.0 est une valeur spéciale que vous ne pouvez pas utiliser directement dans le navigateur, vous devrez naviguer vers l'adresse IP réelle de la machine sur le réseau. Vous devrez peut-être aussi ajuster votre pare-feu pour autoriser l'accès externe à ce port.

La gourde documents de démarrage rapide explique cela dans la section "Serveur visible de l'extérieur" :

Si vous exécutez le serveur, vous remarquerez qu'il ne fait que accessible uniquement depuis votre propre ordinateur, et non depuis un autre ordinateur du réseau. Il s'agit de la valeur par défaut car, en mode débogage, un utilisateur de l'application peut exécuter un code Python arbitraire sur votre ordinateur.

Si vous avez désactivé le débogueur ou si vous faites confiance aux utilisateurs de votre réseau, vous pouvez rendre le serveur publiquement disponible en ajoutant simplement --host=0.0.0.0 à la ligne de commande :

$ flask run --host=0.0.0.0

Cela indique à votre système d'exploitation d'écouter sur toutes les IP publiques.

6 votes

Ça n'a pas marché pour moi. J'ai utilisé app.run(host="0.0.0.0", port=5000) et je ne peux pas accéder myip:5000 . Je ne travaille toujours que dans 127.0.0.1:5000

154voto

Aria Points 21

Si vous utilisez le flask pour démarrer votre serveur, utilisez flask run --host=0.0.0.0 pour changer la valeur par défaut de 127.0.0.1 et l'ouvrir aux connexions non locales.

Si vous exécutez le serveur, vous remarquerez que le serveur est seulement accessible uniquement 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 un code Python arbitraire sur votre ordinateur.

Si vous avez désactivé le débogueur ou si vous faites confiance aux utilisateurs de votre réseau, vous pouvez rendre le serveur publiquement disponible en ajoutant simplement --host=0.0.0.0 à la ligne de commande :

$ flask run --host=0.0.0.0

Cela indique à votre système d'exploitation d'écouter sur toutes les IP publiques.

Référence : https://flask.palletsprojects.com/quickstart/

67voto

nwillo Points 776

Essayez ceci si la méthode 0.0.0.0 ne fonctionne pas.

Des choses ennuyeuses

J'ai personnellement beaucoup lutté pour que mon application soit accessible à d'autres appareils (ordinateurs portables et téléphones mobiles) via un serveur local. J'ai essayé la méthode 0.0.0.0, mais sans succès. Puis j'ai essayé de changer le port, mais ça n'a pas marché. Donc, après avoir essayé un tas de combinaisons différentes, je suis arrivé à celle-ci, et elle 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. Vous pouvez le faire en tapant ipconfig sur Windows et ifconfig sur 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 et vous reconnectez au réseau.

  1. Maintenant, il suffit de lancer 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 exécuté comme suit :

    flask run -h 192.168.1.100

running the flask app

Sur mon appareil mobile

screenshot from my mobile phone

Trucs et astuces en option

Si vous effectuez cette procédure sous Windows et utilisez Power Shell comme CLI, et que vous ne parvenez toujours pas à accéder au site Web, essayez d'utiliser la commande CTRL + C dans le shell qui exécute l'application. Power Shell se fige parfois et il faut une pincée pour le relancer. Cette opération peut même entraîner l'arrêt du serveur, mais elle est parfois efficace.

C'est tout. Donnez un pouce en l'air si vous avez trouvé cela utile.

D'autres éléments facultatifs

J'ai créé un court script Powershell qui vous permettra d'obtenir votre adresse IP chaque fois que vous en aurez 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-la dans un fichier portant l'extension .ps1 (pour PowerShell) et exécutez-la avant de lancer votre application. Vous pouvez le sauvegarder dans le dossier de votre projet et l'exécuter comme :

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

Note : J'ai enregistré le shellcode ci-dessus dans getIP.ps1.

Cool.

44voto

Jeevan Chaitanya Points 805

Ajouter host='0.0.0.0' to app.run ".

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

Si vous obtenez OSError: [WinError 10013] An attempt was made to access a socket in a way forbidden by its access permissions sous Windows, soit vous n'avez pas la permission d'utiliser le port, soit quelque chose d'autre l'utilise, ce que vous pouvez trouver à l'aide de la commande netstat -na|findstr 5000 .

24voto

mircealungu Points 716

Si votre cool La configuration de l'application est chargée à partir d'un fichier externe, comme dans l'exemple suivant, alors 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)
)

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X