Configure el servidor de desarrollo Flask para que sea visible en toda la red
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?
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 --host
opción to flask run
, o el host
pará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.0
es 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.0
a 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.
Si usa el flask
ejecutable para iniciar su servidor, úselo flask run --host=0.0.0.0
para 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.0
a 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/
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
- Obtenga la dirección IPv4 local de su computadora. Esto se puede hacer escribiendo
ipconfig
en Windows,ifconfig
Linux y Mac.
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.
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
En mi dispositivo 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.👌
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 permissions
Windows, o no tiene permiso para usar el puerto o lo está usando otra cosa que puede encontrar con netstat -na|findstr 5000
.