Objetivos
Python es otro lenguaje de programación muy popular. Muchas webs y aplicaciones están programadas en Python. Tenemos que aprender cómo se instala un web escrita en python.
Versión imprimible multipagina. Haga click aquí para imprimir.
Python es otro lenguaje de programación muy popular. Muchas webs y aplicaciones están programadas en Python. Tenemos que aprender cómo se instala un web escrita en python.
¿Qué es WSGI?
Configurar la aplicación flask_temperaturas para que sea servida con apache2 + mod_wsgi. Explica los pasos más importantes y entrega una prueba de funcionamiento.
Documentación original: https://raw.githubusercontent.com/josedom24/presentaciones/main/iaw/python.pdf de José Domingo Muñoz
Python es un lenguaje:
Entorno virtual: “espacios aislados” (directorio) donde poder instalar distintas versiones de programas y paquetes python. Nos permiten:
Uso general (en Ubuntu). Por defecto ya está instalado python3. Puede
$ sudo apt-get install python3-venv
$ python3 -m venv env
$ source env/bin/activate
(env)$ pip install <paquete> # Instala paquetes en el entorno virtual
(env)$ pip install -r requirements.txt # Instala paquetes desde un archivo requirements
(env)$ deactivate
$
Generar el archivo de requisitos (paquetes y versiones que usa el entorno)
(env)$ pip freeze > requirements.txt
Recuerda introducir siempre la carpeta del entorno virtual en el fichero
.gitignore
para que no se suba al repositorio. Sólo tienes que incluir el ficherorequirements.txt
.
¿Cómo podemos hacer que un servidor web como apache2 sea capaz de servir una aplicación escrita en python?
Para que un servidor web o un servidor de aplicaciones pueda ejecutar el código python:
application
. Por lo tanto el fichero WSGI entre otras cosas debe nombrar a la aplicación de esta manera.Para una aplicación flask podemos tener un fichero wsgi.py
con el siguiente contenido:
from programa import app as application
programa.py
.programa.py
: app = Flask(__name__)
.application
, necesario para que el servidor web pueda enviarle peticiones.libapache2-mod-wsgi-py3
.uwsgi
. El servidor web hará de proxy inverso para que podamos acceder a la aplicación.Un framework es una aplicación, que nos ayuda en el desarrollo de aplicaciones web. Ejemplos de frameworks python: flask, django,…
Django es un framework de desarrollo web de código abierto, escrito en Python, que respeta el patrón de diseño conocido como modelo–vista–controlador (MVC).
El modelo MVC es un patrón de diseño software que separa los datos de la aplicación, la lógica del programa y la representación de la información:
¿Qué es WSGI?
Configurar la aplicación flask_temperaturas para que sea servida con apache2 + mod_wsgi. Explica los pasos más importantes y entrega una prueba de funcionamiento.
Documentación original: https://fp.josedomingo.org/iaw2122/u03/modwsgi.html
¿Qué es WSGI?
Levanta una máquina vagrant Ubuntu (la Ubuntu-22.04 que estás usando por ejemplo) e instala apache2, git, python3 y python3-venv
si no está instalado.
En /var/www/
$ sudo git clone https://github.com/lmorillas/flask_temperaturas.git
En /var/www/flask_temperaturas ejecuta:
$ python3 -m venv env # Crea un entorno virtual
$ source env/bin/activate # Activa el entorno virtual
$ cd flask_temperaturas
$ pip install -r requirements.txt # Instala dependencias
$ sudo apt install libapache2-mod-wsgi-py3
Nuestra aplicación se encuentra en /var/www/flask_temperaturas
.
Nuestro entorno virtual está en /var/www/flask_temperaturas/env
.
Lo primero que vamos a hacer es crear el fichero WSGI, que vamos a llamar wsgi.py
estará en /var/www/flask_temperaturas
y tendrá el siguiente contenido:
from app import app as application
Explicación:
app
corresponde con el nombre del módulo, es decir del fichero del programa, en nuestro caso se llama app.py
.app
corresponde a la aplicación flask creada en app.py
: app = Flask(__name__)
.application
necesario para que el servidor web pueda enviarle peticiones.Yo he utilizado el virtualhost por defecto, si usamos otro virtualhost esta configuración ira en el fichero correspondiente:
WSGIDaemonProcess flask_temp python-path=/var/www/flask_temperaturas:/var/www/flask_temperaturas/env/lib/python3.10/site-packages
WSGIProcessGroup flask_temp
WSGIScriptAlias / /var/www/flask_temperaturas/wsgi.py process-group=flask_temp
<Directory /var/www/flask_temperaturas>
Require all granted
</Directory>
Fíjate en la ruta
/var/www/flask_temperaturas/env/lib/python3.10/site-packages
Si usas otra versión de python, tendrás que cambiarla.
Vamos a explicar la configuración:
DocumentRoot
se indica el directorio donde está la aplicación. Realmente el servidor web siempre va a llamar al fichero WSGI wsgi.py
, pero el DocumentRoot es necesario por si hay contenido estático.WSGIDaemonProcess
: Se define un grupo de procesos que se van a encargar de ejecutar la aplicación (servidor de aplicaciones). A estos procesos se le ponen un nombre (flask_temp
) y se indica los directorios donde se encuentran la aplicación y los paquetes necesarios (python-path
), como puedes observar se pone el directorio donde esta la aplicación y el directorio donde se encuentran los paquetes en el entorno virtual, separados por dos puntos.WSGIProcessGroup
: Nos permite agrupar procesos. Se pone el misimo nombre que hemos definido en la directiva anterior.WSGIScriptAlias
nos permite indicar que programa se va a ejecutar (el fichero WSGI: /var/www/flask_temperaturas/wsgi.py
) cuando se haga una petición a la url /
y que proceso lo va a ejecutar.La carpeta /var/www/flask_temperaturas
debe tener los siguientes permisos:
$ sudo chown -R www-data:www-data /var/www/flask_temperaturas
Reinicia el servicio web y prueba el funcionamiento. Si te da algún erro 500 puedes ver los errores, en /var/log/apache2/error.log
.
Despliegue de una web con gunicorn y un proxy inverso
Qué es un proxy inverso?
Configurar la aplicación flask_temperaturas para que sea servida con apache2 + gunicorn
Documentación original: https://fp.josedomingo.org/iaw2122/u03/gunicorn.html
Gunicorn es un servidor web que permite ejecutar una aplicación en un proceso independiente. Usamos los servidores web como proxies inversos que envían la petición python al servidor WSGI que estemos utilizando
Configura el forward del puerto 8080 al puerto 8080 de la máquina virtual
En /home/vagrant/
Activa en entorno virtual
source env/bin/activate
pip install gunicorn
(env) /home/vagrant/flask_temperaturas$ gunicorn -w 2 -b :8080 wsgi
Comprueba con tu navegador que puedes acceder al puerto 8080 y que responde ahora gunicorn
Atento porque puede cambiar alguna dirección
Comprueba con tu navegador que puedes acceder al puerto 8000 y que resonde apache. Elimina el forward del puerto 8080 y reinicia vagrant. Comprueba que la aplicación sigue funcionando.