Tengo un servidor Flask que se ejecuta a través del puerto 5000, y está bien. Puedo acceder a él en http://example.com:5000
¿Pero es posible acceder a él simplemente en http://example.com ? Supongo que eso significa que tengo que cambiar el puerto de 5000 a 80. Pero cuando lo intento en Flask, recibo este mensaje de error cuando lo ejecuto.
Traceback (most recent call last):
File "xxxxxx.py", line 31, in <module>
app.run(host="0.0.0.0", port=int("80"), debug=True)
File "/usr/local/lib/python2.6/dist-packages/flask/app.py", line 772, in run
run_simple(host, port, self, **options)
File "/usr/local/lib/python2.6/dist-packages/werkzeug/serving.py", line 706, in run_simple
test_socket.bind((hostname, port))
File "<string>", line 1, in bind
socket.error: [Errno 98] Address already in use
Ejecutando lsof -i :80
devoluciones
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
apache2 467 root 3u IPv4 92108840 0t0 TCP *:www (LISTEN)
apache2 4413 www-data 3u IPv4 92108840 0t0 TCP *:www (LISTEN)
apache2 14346 www-data 3u IPv4 92108840 0t0 TCP *:www (LISTEN)
apache2 14570 www-data 3u IPv4 92108840 0t0 TCP *:www (LISTEN)
apache2 14571 www-data 3u IPv4 92108840 0t0 TCP *:www (LISTEN)
apache2 14573 www-data 3u IPv4 92108840 0t0 TCP *:www (LISTEN)
¿Necesito matar estos procesos primero? ¿Eso es seguro? ¿O hay otra forma de mantener Flask ejecutándose en el puerto 5000 pero hacer que el dominio del sitio web principal se redirija de alguna manera?
python
networking
flask
port
temblor cuántico
fuente
fuente
Respuestas:
Entonces arroja ese mensaje de error porque se está
apache2
ejecutando en el puerto 80.Si esto es para el desarrollo, lo dejaría como está en el puerto 5000.
Si es para producción tampoco:
No recomendado
apache2
primero;No recomendado como se indica en la documentación:
Recomendado
HTTP
Tráfico proxy a travésapache2
de Flask.De esta manera,
apache2
puede manejar todos sus archivos estáticos (lo cual es muy bueno, mucho mejor que el servidor de depuración integrado en Flask) y actuar como un proxy inverso para su contenido dinámico, pasando esas solicitudes a Flask.Aquí hay un enlace a la documentación oficial sobre la configuración de Flask con Apache + mod_wsgi.
Edición 1 - Aclaración para @Djack
Cuando una solicitud llega al servidor en el puerto 80 (
HTTP
) o en el puerto 443 (HTTPS
), un servidor web como Apache o Nginx maneja la conexión de la solicitud y determina qué hacer con ella. En nuestro caso, una solicitud recibida debe configurarse para que se pase a Flask en el protocolo WSGI y se maneje con el código Python. Esta es la parte "dinámica".Existen algunas ventajas para configurar su servidor web como las anteriores;
fuente
Proxy HTTP traffic to Flask through apache2
" y "reverse proxy for dynamic content
"?1- Detenga otras aplicaciones que estén utilizando el puerto 80. 2- ejecute la aplicación con el puerto 80:
fuente
Para el servidor visible externamente, donde no usa apache u otro servidor web, simplemente escribe
fuente
CMD flask run --host=0.0.0.0 --port=$PORT
en mi Dockerfile (por razones de heroku) y sigo recibiendo errores sobre la necesidad de un número entero para mi puertoSi usa lo siguiente para cambiar el puerto o el host:
use el siguiente código para iniciar el servidor (mi entrada principal para el matraz es app.py):
En lugar de usar:
fuente
Si desea que su aplicación esté en el mismo puerto, es decir, puerto = 5000, solo en su terminal ejecute este comando:
y luego ejecuta:
Si desea ejecutar en un puerto especificado, por ejemplo, si desea ejecutar en el puerto = 80, en su archivo principal solo mencione esto:
fuente
Una forma conveniente es usar el paquete
python-dotenv
: lee un.flaskenv
archivo donde puede almacenar variables de entorno para el matraz.pip install python-dotenv
.flaskenv
en el directorio raíz de su aplicaciónDentro del archivo que especifique:
Después de eso solo tienes que ejecutar tu aplicación con
flask run
y puede acceder a su aplicación en ese puerto.Tenga en cuenta que los
FLASK_RUN_HOST
valores predeterminados127.0.0.1
yFLASK_RUN_PORT
predeterminados son5000
.fuente
Esta es la única solución que funcionó para mí en Ubuntu-18.
Dentro del archivo
app.py
, use:El código anterior dará el mismo error de permiso a menos que
sudo
se use para ejecutarlo:fuente
Su problema es que ya tiene un servidor web Apache en ejecución que ya está utilizando el puerto 80. Entonces, puede:
Matar apache: probablemente deberías hacer esto a través de
/etc/init.d/apache2 stop
, en lugar de simplemente matarlos.Implemente su aplicación de matraz en su proceso de apache, como se describe en el matraz de apache .
fuente
Tuve que establecer
FLASK_RUN_PORT
en mi entorno el número de puerto especificado. La próxima vez que inicie su aplicación, Flask cargará esa variable de entorno con el número de puerto que seleccionó.fuente
No necesita cambiar el número de puerto para su aplicación, solo configure su servidor www (nginx o apache) para consultas proxy al puerto de matraz. Prestar atención en
uWSGI
.fuente
establecer el puerto con
app.run(port=80,debug=True)
usted debe establecer la depuración en verdadero cuando en devfuente
La solución más fácil y mejor
Guarde su archivo .py en una carpeta. Este caso el nombre de mi carpeta es prueba. En el símbolo del sistema, ejecute lo siguiente
----------------- Lo siguiente será devuelto ----------------
Ahora en su navegador escriba: http://127.0.0.1:8000 . Gracias
fuente
En mi escenario, los siguientes pasos funcionaron de maravilla:
Instalando el paquete:
Crear un archivo oculto en mi directorio de aplicaciones "flaskr / .flaskenv"
Agregando el siguiente contenido:
Finalmente, ejecute el comando del matraz una vez más:
La versión en la que estoy trabajando es:
fuente