Desplegando aplicaciones flask con apache2 + mod_wsgi
Desplegando aplicaciones flask con apache2 + mod_wsgi
Introducción
En esta entrada vamos a ver como desplegar una aplicación flask con apache2 + mod_wsgi.
Configuración de apache2 para servir una aplicación web flask
- Instalamos apache2 y mod_wsgi
root@debian:~ apt install apache2 libapache2-mod-wsgi-py3
Suponiendo que tenemos:
- Un servidor web apache2 con wsgi activado.
- Una aplicación flask en el directorio /home/debian/guestbook
- Un entorno virtual con flask instalado en /home/debian/guestbook/venv
- Creamos el fichero wsgi que estará en el directorio del entorno virtual con el siguiente contenido:
from app import prog as aplicacion
Y veremos que:
- El app se corresponde con el nombre del módulo, app.py.
- El prog corresponde a la aplicación flask creada en app.py: prog = Flask(name).
- Importamos la aplicación flask, pero la llamamos application necesario para que el servidor web pueda enviarle peticiones.
Configuración de apache2 para servir una aplicación web flask
-
Creamos un virtualhost que se acceda con el nombre flask.tunombre.org, esta configuración irá en el fichero correspondiente:
DocumentRoot /home/debian/guestbook WSGIDaemonProcess flask_guestbook python-path=/home/debian/guestbook:/home/debian/venv/flask/lib/python3.9/site-packages WSGIProcessGroup flask_guestbook WSGIScriptAlias / /home/debian/guestbook/wsgi.py process-group=flask_guestbook <Directory /home/debian/guestbook> Require all granted </Directory>
-
Activamos el módulo wsgi y el virtualhost:
root@debian:~ a2enmod wsgi root@debian:~ a2ensite flask.maria.org -
Reiniciamos el servicio apache2:
root@debian:~ systemctl restart apache2 -
Cambiamos el fichero hosts para que apunte a la ip del servidor:
sudo nano /etc/hosts --- 172.22.201.119 www.flask.maria.org
Desplegando aplicaciones flask con apache2 + mod_uwsgi
Introducción
En esta entrada vamos a ver como desplegar una aplicación flask con apache2 + mod_uwsgi.
Instalación de apache2 + mod_uwsgi
-
Instalamos el paquete python3-dev y uwsgi:
root@debian:~ apt install python3-dev uwsgiEs posible que también tengamos que instalar
build-essentialpara que se instale correctamente uwsgi.
Despliegue de la aplicación flask
-
Probamos que el servidor uwsgi funciona correctamente:
(flask)$ uwsgi --http :8080 --chdir /home/debian/guestbook --wsgi-file wsgi.py --process 4 --threads 2 --master
Otra forma de comprobar que funciona es creando el ficher
ini:(flask)$ nano guestbook.ini --- [uwsgi] http = :8080 chdir = /home/debian/guestbook wsgi-file = wsgi.py processes = 4 threads = 2Y ejecutamos:
(flask)$ uwsgi --ini uwsgi.ini
-
Creamos una unidad systemd para controlarla con systemctl.
- Creamos el fichero
/etc/systemd/system/uwsgi.guestbook.service:
[Unit] Description=uwsgi-guestbook After=network.target [Install] WantedBy=multi-user.target [Service] User=www-data Group=www-data Restart=always ExecStart=/home/debian/venv/flask/bin/uwsgi /home/debian/venv/flask/guestbook.ini ExecReload=/bin/kill -s HUP $MAINPID ExecStop=/bin/kill -s TERM $MAINPID WorkingDirectory=/home/debian/guestbook Environment=PYTHONPATH= '/home/debian/guestbook:/home/debian/venv/flask/lib/python3.9/site-packages' PrivateTmp=true
- Activamos el servicio:
root@debian:~ systemctl enable uwsgi.guestbook root@debian:~ systemctl start uwsgi.guestbookNOTA: Si cambiamos el contenido de la unidad lo recargaremos ejecutando:
root@debian:~ systemctl daemon-reload - Creamos el fichero
Proxy Inverso para uwsgi
-
Activamos el módulo proxy_http:
DocumentRoot /home/debian/guestbook ProxyPass / http://127.0.0.1:8080/ ProxyPassReverse / http://127.0.0.1:8080/ <Directory /home/debian/guestbook> Require all granted </Directory>
-
Reiniciamos el servicio apache2:
root@debian:~ a2enmod proxy_http root@debian:~ systemctl restart apache2
Nginx como proxy inverso de uwsgi
-
Configuramos el virtualhost de nginx en
/etc/nginx/sites-available/guestbook.conf:server { listen 80; server_name www.guestbook-nginx.maria.org; root /home/debian/guestbook; location / { proxy_pass http://localhost:8080; include proxy_params; } }
-
Activamos el virtualhost:
root@debian:~ ln -s /etc/nginx/sites-available/guestbook.conf /etc/nginx/sites-enabled/guestbook.conf -
Reiniciamos el servicio nginx:
root@debian:~ systemctl restart nginx