Publicidad

Flask en producción con Apache2 y wsgi


Por Alex el 28/11/2022, Comentar el artículo

Comparte este artículo:      




Desplegar una aplicación realizada con Flask en Apache2 es bastante sencillo siguiendo lo siguientes pasos ...


Comentar que este es mi método y que hay otros, y otras utilidades como Gunicorn, Waitress ... aquí (https://flask.palletsprojects.com/en/2.2.x/deploying/) podéis encontrar mas opciones, personalmente me gusta mas mod_wsgi.

Requerimientos

Es obvio decir que requiere Apache2 instalado pero ademas hay que instalar las siguientes librerias:

sudo apt install libapache2-mod-wsgi-py3 apache2-dev python3-dev

En nuestro entorno virtual de Python instalamos lo siguiente:

pip install mod_wsgi

Revisar que pip y pip3 sean el mismo si utilizáis Python3, ¿ y como se comprueba?, fácil si ejecutáis este comando, dentro de vuestro entorno virtual pip --version tiene que salir la misma versión que si utilizáis pip3 --version. Si no es la misma versión ejecutar en concordancia con el python que utilizais.

Doy por echo que teneis instalado Flask, sino pip install flask

Fichero app.py

Ahora creamos nuestro fichero de pruebas para ejecutarlo desde Apache2, este fichero de ejemplo representa al aplicación web.

from flask import Flask
app = Flask(__name__)

@app.route("/")
def hello():
    return "Hello World!"

Dentro del entorno de trabajo que tengais, por ejemplo, este es el mio.

Error al ejecutar python en linux


Fichero app.wsgi

Este es el fichero que vamos a enlazar en Apache2 para que arranque nuestra aplicación web.

import sys 
sys.path.append('/home/alex/netveloper/py-projects/p001/lib/python3.10/site-packages')
sys.path.insert(0, '/home/alex/netveloper/py-projects/p001/src/public')
from app import app as application

Si os fijais en las ruta estoy poniendo donde estan mis aplicaciones de arranque app.py y app.wsgi (para los que vienen de php serian en index.php) y el nombre app es el nombre del fichero app.py

Fichero virtualhost de apache2

Ahora en Apache2 vamos a crear un fichero con los datos de configuración del nuevo web.

<VirtualHost *:80>
  # Basic setup
  ServerName flask.netveloper.local

  WSGIDaemonProcess pyTest user=www-data group=www-data threads=5 
  WSGIScriptAlias / /home/alex/netveloper/py-projects/p001/src/public/app.wsgi

  <Directory /home/alex/netveloper/py-projects/p001/src/public>
    WSGIProcessGroup pyTest
    WSGIApplicationGroup %{GLOBAL}
    AllowOverride All
    Require all granted
  </Directory>
  #
</VirtualHost>

Y con esto ya deberia funcionar, probar la url que hayais creado en el browser, en mi caso flask.netveloper.local y tendria que salir algo como esto:

Test aplicacion flask en web

Y si os sale el siguient error en el navegador

You don't have permission to access this resource.

Revisar que los permisos de los directorios sean 755 o 775, ¿que directorios? toda la ruta has la aplicación .wsgi, en el ejemplo alex/netveloper/py-projects/p001/src/public y los ficheros 664

Y esto es todo, feliz programming
Saludos
Alex
/

Si te ha gustado el artículo compartelo en:      




Añadir un comentarios:

Nombre:
Email: (no se publica el email)




SIGUENOS EN

ARCHIVO

Publicidad

.