Practica Despliegue de una
Aplicación con Flask (Python)
Joan Augusto Paute Romero
Procedimiento completo para el despliegue
Primero instalamos el gestor de paquetes de Python pip→sudo apt update y sudo apt
install pipenv
Despues comprobamos que se ha instalado correctamente → pipenv –version
Despues de comprobar la versión crearemos un directorio que almacenará niuestro
proyecto —> sudo mkdir /var/www/nombreAplicacion
cuando lo creamos con sudo los permisos lo pertenecen al root
1
Hay que cambiarlo para que el dueño sea nuestro usuario (raul-debian en mi
caso) y pertenezca al grupo www-data, el usuario usado por defecto por el
servidor web para correr:
sudo chown -R $USER:www-data /var/www/mi_aplicacion
Establecemos los permisos adecuados a este directorio, para que pueda ser
leído por todo el mundo:
chmod -R 775 /var/www/mi_aplicacion
2
Ahora dentro de nuestro directorio debemos de crear un archivo oculto .env que
contendra variables necesarias → touch .env
3
De ahi editaremos el archivo y añadimos variables , indicando primero cuál es el
archivo .py(pyhton) de la aplicación y en nuestro será producción
4
Ahora despues de hacer esto iniciaremos nuestro entorno virtual , Pipenv cargará las
variables creadas antes en .env de forma automática → pipenv shell
Aviso debeis tener instalado el python antes (seguir aqui que es mas interesante
)
5
veremos que se nos inica el entorno virtual , porque aparece l nombre en el prompt del
shell
6
Usaremos pipenv para instalar las dependicas necesarias para nuestro proyecto:-->
pipenv install flask gunicorn
7
8
Vamos ahora a crear la aplicación Flask más simple posible, a modo de PoC
(proof of concept o prueba de concepto). El archivo que contendrá la aplicación
propiamente dicha será application.py y wsgi.py se encargará únicamente de
iniciarla y dejarla corriendo:
touch application.py wsgi.py
Y tras crear los archivos, los editamos para dejarlos así:IMPORTANTE
9
10
de esa manera hay que tenerlo
12. Corramos ahora nuestra aplicación a modo de comprobación con el servidor
web integrado de Flask. Si especificamos la dirección 0.0.0.0 lo que le estamos
diciendo al servidor es que escuche en todas sus interfaces, si las tuviera:
flask run ´-–host ‘0.0.0.0’
11
con esto podemos acceder a la aplicacion desplegada Ahora
podremos acceder a la aplicación
desde nuestro ordenador, nuestra máquina anfitrión, introduciendo en un navegador
web: http://IP-maq-virtual:5000
Ahora vamos a realizar una comprobación si , siguiendo con todos los pasos que hemos ido
haciendo ha funcionado correctamente podemos utilizar el siguiente comando para probar que la
aplicacion usando Gunicorn accediendo con nuestro navegador de la misma manera que antes
gunicorn --workers 4 --bind 0.0.0.0:5000 wsgi:app
Teoria
--workers N establece el número de workers o hilos que queremos utilizar, como ocurría con
Node Express. Dependerá del número de cores que le hayamos dado a la CPU de nuestra
máquina virtual.
--bind 0.0.0.0:5000 hace que el servidor escuche peticiones por todas sus interfaces de red
y en el puerto 5000
wsgi:app es el nombre del archivo con extensión .py y app es la instancia de la aplicación
Flask dentro del archivo.
12
13
Por si queremos en un futuro configurar un servicio del sistema debemos saber cual es el path o
ruta desde la que se ejecuta gunicorn seria asi → which gunicorn
vale ahora iremos a hacer un archivo en nuestro sistema para que gnix lo reconozca y aso
podremos usar una forma mas de desplieugue
vamos a crear un archivo en esta direccion
ojo la teoria de las cosas a utilizar es esta
Donde:
User: Establece el usuario que tiene permisos sobre el directorio del proyecto (el que
pusistéis en el paso 5)
Group: Establece el grupo que tiene permisos sobre el directorio del proyecto (el que
pusistéis en el paso 5)
Environment: Establece el directorio bin (donde se guardan los binarios ejecutables)
dentro del entorno virtual (lo vistéis en el paso 14)
14
WorkingDirectory: Establece el directorio base donde reside nuestro proyecto
ExecStart: Establece el path donde se encuentra el ejecutable de gunicorn dentro del
entorno virtual, así como las opciones y comandos con los que se iniciará
Warning Debéis cambiar los valores para que coincidan con los de vuestro caso
particular.
que es la misma que está
15
/etc/nginx/sites-available/nombre_aplicacion
ahora pasaremos a configurar nuestr NGINX para que funciones , debemos crear en esta
direccion /etc/nginx/sites-available/nombre_aplicacion un fichero con el nombre de nuestra
aplicacion y configurarlo con lo siguiente
server {
listen 80;
server_name mi_aplicacion www.mi_aplicacion; #
access_log /var/log/nginx/mi_aplicacion.access.log; #
error_log /var/log/nginx/mi_aplicacion.error.log;
location / {
include proxy_params;
proxy_pass http://unix:/var/www/nombre_aplicacion/nombre_aplicacion.sock; # }
}
Recordemos que ahora debemos crear un link simbólico del archivo de sitios
webs disponibles al de sitios web activos:
sudo ln -s /etc/nginx/sites-available/nombre_aplicacion /etc/nginx/sites-enabled/
Y nos aseguramos de que se ha creado dicho link simbólico:
ls -l /etc/nginx/sites-enabled/ | grep nombre_aplicacion
16
Nos aseguramos de que la configuración de Nginx no contiene errores,
reiniciamos Nginx y comprobamos que se estado es activo:
8. nginx -t
sudo systemctl restart nginx
sudo systemctl status nginx
17
9. Ya no podremos acceder por IP a nuestra aplicación ya que ahora está siendo servida por
Gunicorn y Nginx, necesitamos acceder por su server_name. Puesto que aún no hemos tratado
con el DNS, vamos a editar el archivo /etc/hosts de nuestra máquina anfitriona para que asocie la
IP de la máquina virtual, a nuestro server_name.
Este archivo, en Linux, está en: /etc/hosts
Y en Windows: C:\Windows\System32\drivers\etc\hosts
Y deberemos añadirle la línea:
192.168.X.X myproject www.myproject
donde debéis sustituir la IP por la que tenga vuestra máquina virtual.
10.El último paso es comprobar que todo el desplieuge se ha realizado de forma correcta y está
funcionando, para ello accedemos desde nuestra máquina anfitrión a:
http://nombre_aplicacion
O: http://www.nombre_aplicacion
18
Y debería mostraros la misma página que en el paso 14:
19