Ejercicio 3: Desplegando aplicaciones flask con apache2 + uwsgi

uwsgi

uwsgi es otro servidor WSGI HTTP para Python.

Debemos tener instalado el paquete “python3-dev” que es una dependencia necesaria. Luego podemos instalar el paquete “uwsgi” desde los repositorios, pero lo vamos a instalar en el entorno virtual:

(flask)$ pip install uwsgi

Despliegue de una aplicación flask con uwsgi

Hemos creado una aplicación django en el directorio: /home/debian/flask_temperaturas para desplegarla con uwsgi ejecutamos:

(flask)$ uwsgi --http :8080 --chdir /home/debian/flask_temperaturas --wsgi-file    wsgi.py --process 4 --threads 2 --master 

Otra alternativa es crear un fichero .ini de configuración, ejemplo.ini de la siguiente manera:

[uwsgi]
http = :8080
chdir = /home/debian/flask_temperaturas 
wsgi-file = wsgi.py
processes = 4
threads = 2

Y para ejecutar el servidor, simplemente:

(flask)$ uwsgi ejemplo.ini

De esta forma puedo tener varios ficheros de configuración del servidor uwsgi para las distintas aplicaciones python que sirve el servidor.

Creación de una unidad systemd

Evidentemente no vamos a ejecutar “a mano” el programa uwsgi, vamos a crear una unidad systemd, para controlarla con systemctl, para ello, vamos a crear el fichero /etc/systemd/system/uwsgi-temperaturas.service con el siguiente contenido:

[Unit]
Description=uwsgi-temperaturas
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/ejemplo.ini
ExecReload=/bin/kill -s HUP $MAINPID
ExecStop=/bin/kill -s TERM $MAINPID

WorkingDirectory=/home/debian/flask_temperaturas
Environment=PYTHONPATH='/home/debian/flask_temperaturas:/home/debian/venv/flask/lib/python3.9/site-packages'

PrivateTmp=true

Activamos la unidad de systemd, y la iniciamos:

systemctl enable uwsgi-temperaturas.service
systemctl start uwsgi-temperaturas.service

Si cambias el contenido de la unidad tendrás que hacer la recarga:

systemctl daemon-reload

Proxy inversos para uwsgi

La configuración será similar a la estudiada en gunicorn.

  • Configura la aplicación guestbook para que sea servida uwsgi y apache2 como proxy inverso.

  • Explica los pasos más importantes y entrega una prueba de funcionamiento.