Gunicorn: Despliegue web#

Logo Gunicorn

Documentación básica para realizar despliegues con Gunicorn

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#

  1. Instalar Gunicorn: pip install gunicorn

  2. 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}
  1. 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.

  2. A la hora de desplegar el proyecto debe apuntar a las settings_prod.py

CONTINUARÁ…