Configure el servidor de desarrollo Flask para que sea visible en toda la red

Resuelto sa125 asked hace 13 años • 18 respuestas

No estoy seguro de si esto es específico de Flask, pero cuando ejecuto una aplicación en modo de desarrollo ( 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 de desarrollo, por ejemplo, funciona bien. No pude encontrar ningún documento sobre la configuración del servidor de desarrollo de Flask. ¿Alguna idea de qué debería configurarse para habilitar esto?

sa125 avatar Aug 11 '11 15:08 sa125
Aceptado

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


La --hostopción to flask run, o el hostparámetro to app.run(), controla qué dirección escucha el servidor de desarrollo. De forma predeterminada, se ejecuta en localhost, cámbielo a flask run --host=0.0.0.0(o app.run(host="0.0.0.0")) para que se ejecute en todas las direcciones IP de su máquina.

0.0.0.0es un valor especial que no puede usar directamente en el navegador; deberá navegar a la dirección IP real de la máquina en la red. Es posible que también necesite ajustar su firewall para permitir el acceso externo al puerto.

Los documentos de inicio rápido de Flask explican esto en la sección "Servidor visible externamente":

Si ejecuta el servidor, notará que solo se puede acceder al servidor 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 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.0a la línea de comando:

$ flask run --host=0.0.0.0

Esto le dice a su sistema operativo que escuche todas las IP públicas.

Shawn Swaner avatar Aug 11 '2011 13:08 Shawn Swaner

Si usa el flaskejecutable para iniciar su servidor, úselo flask run --host=0.0.0.0para cambiar el valor predeterminado de 127.0.0.1 y ábralo para conexiones no locales.

Si ejecuta el servidor, notará que solo se puede acceder al servidor 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 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.0a la línea de comando:

$ flask run --host=0.0.0.0

Esto le dice a su sistema operativo que escuche todas las IP públicas.

Referencia: https://flask.palletsprojects.com/quickstart/

Aria avatar Oct 29 '2016 01:10 Aria

Pruebe esto si el método 0.0.0.0 no funciona

Cosas aburridas

Personalmente, luché mucho para que mi aplicación fuera accesible para otros dispositivos (computadoras portátiles y teléfonos móviles) a través de un servidor local. Probé el método 0.0.0.0, pero no tuve suerte. Luego intenté cambiar el puerto, pero simplemente no funcionó. Entonces, después de probar un montón de combinaciones diferentes, llegué a esta y resolvió mi problema de implementar mi aplicación en un servidor local.

Pasos

  1. Obtenga la dirección IPv4 local de su computadora. Esto se puede hacer escribiendo ipconfigen Windows, ifconfigLinux y Mac.

IPv4 (Windows)

Tenga en cuenta: El paso anterior debe realizarse en la máquina en la que está entregando la aplicación, y no en la máquina en la que accede a ella. También tenga en cuenta que la dirección IPv4 puede cambiar si se desconecta y se vuelve a conectar a la red.

  1. Ahora, simplemente ejecute la aplicación flask con la dirección IPv4 adquirida.

    flask run -h 192.168.X.X

    Por ejemplo, en mi caso (ver la imagen), lo ejecuté como:

    flask run -h 192.168.1.100

ejecutando la aplicación del matraz

En mi dispositivo móvil

captura de pantalla de mi teléfono móvil

Cosas opcionales

Si está realizando este procedimiento en Windows y utiliza Power Shell como CLI, y aún no puede acceder al sitio web, pruebe con un comando CTRL + C en el shell que ejecuta la aplicación. Power Shell a veces se congela y necesita un pellizco para revivir. Hacer esto podría incluso cerrar el servidor, pero a veces funciona.

Eso es todo. Dale me gusta si esto te resultó útil.😉

Algunas cosas más opcionales

He creado un breve script de Powershell que le proporcionará su dirección IP siempre que la necesite:

$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

Guárdelo en un archivo con extensión .ps1 (para PowerShell) y ejecútelo antes de iniciar su aplicación. Puede guardarlo en la carpeta de su proyecto y ejecutarlo como:

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

Nota: guardé el código shell anterior en getIP.ps1.

Genial.👌

nwillo avatar Jun 04 '2019 06:06 nwillo

Agregue host='0.0.0.0' to aplicación.run`.

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

Si utiliza OSError: [WinError 10013] An attempt was made to access a socket in a way forbidden by its access permissionsWindows, o no tiene permiso para usar el puerto o lo está usando otra cosa que puede encontrar con netstat -na|findstr 5000.

Jeevan Chaitanya avatar Jan 04 '2018 09:01 Jeevan Chaitanya