Gunicorn: Despliegue web
Contents
Gunicorn: Despliegue web#

Documentación básica para realizar despliegues con Gunicorn
Índice
Protocolo WSGI#
Es un protocolo estandar que utilizan las aplicaciones python en el ámbito web definiendo como debe comportarse.
Gunicorn#
Se encarga de comunicarse con el protocolo WSGI desde línea de comandos.
Comandos útiles:
Instalar Gunicorn:
pip install gunicorn
Ejecutar servidor Gunicorn:
gunicorn nombreProyecto.wsgi:application
Específicar número de procesos simultaneos:
gunicorn nombreProyecto.wsgi:application --workers=4
Crear archivo de configuración en la raiz del proyecto gunicorn.conf.py:
1import multiprocessing
2
3# Definir numero de procesos en contraste al número de procesadores:
4workers = multiprocessing.cpu_count()
5
6# Se puede cambiar la dirección o el puerto:
7bind = '127.0.0.1:8500'
Supervisor#
Es un programa externo que se utiliza para cargar procesos externos del sistema en segundo plano. En este caso se utilizará para ejecutar en segundo plano Gunicorn en nuestro Virtual Server.
Nginx#
Es un software que se utiliza para servir sitios web al igual que apache, el más utilizado para trabajar con aplicaciones Python.
PaaS (Platform as a Service)#
Es un entorno cloud que nos permite crear una máquina virtual para ejecutar la aplicación web con Python.
Algunas de las PaaS más famosas:
DigitalOcean
Heroku
Amazon Web Services
Azure
Google Cloud
Deploy en Django#
Instalar Gunicorn:
pip install gunicorn
Crear settings_prod.py para ajustar valores de producción:
1# se importan todo el módulo de settings.py:
2from mi_proyecto.settings import *
3
4# La secret_key la metemos por variable de entorno:
5SECRET_KEY = os.environ.get('SECRET_KEY')
6
7# Se prepara para producción
8DEBUG = False
9
10# Se habilitan los hosts que tendrán permisos, ['*'] así cogerá todas las peticiones.
11ALLOWED_HOSTS = ['www.paginaprueba.es', 'prueba.paginados.es']
12
13# se crea la ruta estática para recolectar luego todos los archivos estátitcos:
14STATIC_ROOT = BASE_DIR.joinpath('static/')
15
16# Cambiamos la base de datos por una de producción:
17DATABASES = {
18 'default': {
19 'ENGINE': 'django.db.backends.mysql',
20 'USER': os.getenv('DATABASE_USER'),
21 'NAME': os.getenv('DATABASE_NAME'),
22 'PASSWORD': os.getenv('DATABASE_PASSWORD'),
23 'PASSWORD': os.getenv('DATABASE_HOST'),
24 'PORT': '3306'
25 }
26}
Generamos una secret_key:
python -c 'from django.core.management.utils import get_random_secret_key; print(get_random_secret_key())'
la cual luego guardaremos en la variable de entorno del servidor virtual.A la hora de desplegar el proyecto debe apuntar a las settings_prod.py
CONTINUARÁ…