Configurar el servidor de desarrollo de Flask para que sea visible a través de la red

No estoy seguro de si esto es específico del Flask, pero cuando ejecuto una aplicación en modo dev ( http://localhost:5000 ), no puedo acceder a ella desde otras máquinas en la red (con http://[dev-host-ip]:5000 ). Con Rails en modo dev, por ejemplo, funciona bien. No pude encontrar ningún documento relacionado con la configuración del servidor de desarrollo de Flask. ¿Alguna idea de qué se debe configurar para habilitar esto?

Si bien esto es posible, no debe utilizar el servidor de desarrollo Flask en producción. El servidor de desarrollo Flask no está diseñado para ser particularmente seguro, estable o eficiente. Consulte la documentación sobre la implementación para obtener las soluciones correctas.


Agrega un parámetro a tu app.run() . De forma predeterminada, se ejecuta en localhost, cámbielo a app.run(host= '0.0.0.0') para que se ejecute en la dirección IP de su máquina.

Documentado en el sitio de Flask bajo “Servidor visible externamente” en la página de inicio rápido :

Servidor visible externamente

Si ejecuta el servidor, notará que el servidor solo está disponible desde su propia computadora, no desde ninguna otra en la red. Este es el valor predeterminado porque en el modo de depuración, un usuario de la aplicación puede ejecutar un código Python arbitrario en su computadora. Si ha desactivado la depuración o confía en los usuarios de su red, puede hacer que el servidor esté disponible públicamente.

Solo cambia la llamada del método run() para que se vea así:

app.run(host='0.0.0.0')

Esto le dice a su sistema operativo que escuche en una IP pública.

Si usa el ejecutable de flask para iniciar su servidor, puede usar flask run --host=0.0.0.0 para cambiar el valor predeterminado de 127.0.0.1 y abrirlo a conexiones no locales. Los métodos config y app.run que describen las otras respuestas son probablemente una mejor práctica, pero esto también puede ser útil.

Servidor visible externamente Si ejecuta el servidor, notará que solo se puede acceder al servidor desde su propia computadora, no desde cualquier otro en la red. Este es el valor predeterminado porque en el modo de depuración, un usuario de la aplicación puede ejecutar un código Python arbitrario en su computadora.

Si tiene el depurador deshabilitado o confía en los usuarios de su red, puede hacer que el servidor esté disponible públicamente simplemente agregando –host = 0.0.0.0 a la línea de comandos:

flask run –host = 0.0.0.0 Esto le indica a su sistema operativo que escuche en todas las IP públicas.

Referencia: http://flask.pocoo.org/docs/0.11/quickstart/

Si su aplicación cool tiene su configuración cargada desde un archivo externo, como en el siguiente ejemplo, no olvide actualizar el archivo de configuración correspondiente con HOST = “0.0.0.0”

 cool.app.run( host=cool.app.config.get("HOST", "localhost"), port=cool.app.config.get("PORT", 9000) ) 

Añade las siguientes líneas a tu proyecto

 if __name__ == '__main__': app.debug = True app.run(host = '0.0.0.0',port=5005) 

Compruebe si el puerto en particular está abierto en el servidor para servir al cliente o no?

en Ubuntu o Linux distro

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

Configure la aplicación para manejar solicitudes remotas

 app.run(host='0.0.0.0' , port=5000) python3 app.py & #run application in background 

Tuve el mismo problema, uso PyCharm como editor y cuando creé el proyecto, PyCharm creó un Flask Server. Lo que hice fue crear un servidor con Python de la siguiente manera;

Config Python Server PyCharm básicamente, lo que hice fue crear un nuevo servidor, pero en caso de que no fuera Python

Espero que te ayude

Esta respuesta no está relacionada únicamente con el matraz, pero debe ser aplicable para todos los que no puedan conectar el servicio desde otro problema del host .

  1. utilizar netstat -ano | grep netstat -ano | grep para ver si la dirección es 0.0.0.0 o ::. Si es 127.0.0.1, entonces es solo para las solicitudes locales.
  2. use tcpdump para ver si falta algún paquete. Si muestra un desequilibrio evidente, verifique las reglas de enrutamiento mediante iptables.

Hoy ejecuto mi aplicación de flask como siempre, pero noté que no se puede conectar desde otro servidor. Entonces corro netstat -ano | grep netstat -ano | grep , y la dirección local es :: o 0.0.0.0 (probé ambos, y sé que 127.0.0.1 solo permite la conexión desde el host local). Luego usé el telnet host port , el resultado es como connect to ... Esto es muy extraño. Entonces pensé que sería mejor verificarlo con tcpdump -i any port -w w.pcap . Y noté que todo es así:

El resultado de tcpdump muestra que solo hay paquetes SYN del host remoto

Luego, al revisar iptables --list sección SALIDA, pude ver varias reglas:

Resultado de la lista de iptables

estas reglas prohíben la salida de paquetes vitales tcp en handshaking. Al eliminarlos, el problema se ha ido.

Agregando a la respuesta de @ Shawn, también hay una variable de configuración integrada SERVER_NAME. podemos establecer eso en 0.0.0.0 en el archivo de configuración que especifique en app.config.from_pyfile (“config.py”). También tenga en cuenta que esto anulará el nombre de host app.run.
Referencia: http://flask.pocoo.org/docs/0.10/config/