El despliegue de una aplicación es un parte compleja puesto que existen muchas formas de hacer el despliegue, en esta ocasión haremos un despliegue usando Nginx, Supervisor y Gunicorn.
Puedes usar este link para crearte una cuenta en DigitalOcean y obtener $10 de crédito para desplegar tu proyecto en un VPS.
- Nginx (Servidor web)
- Supervisor (Administrador de procesos)
- Gunicorn (Servidor WSGI)
Estamos asumiendo que tenemos un proyecto en django llamado
intro_django
ubicado en el directorio/opt/apps/intro_django/
y ustamos usandoubuntu server 14.04
.
Instalar y configurar Nginx como proxy inverso
Para instalar la última versión de nginx debemos ejecutar los siguientes comandos
sudo add-apt-repository ppa:nginx/stable
sudo aptitude update
sudo aptitude install nginx
Vamos a configurar el dominio mydomain.com
que mande las peticiones hacia el puerto donde esta corriendo nuestra aplicación en django, para lo que creamos el archivo mydomain.com.conf
en /etc/nginx/sites-available/
con el siguiente contenido:
server {
listen 80;
server_name mydomain.com;
charset utf-8;
location / {
proxy_pass http://127.0.0.1:8000;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
Ahora debemos activar nuestro dominio, para lo cual ejecutamos:
sudo ln -s /etc/nginx/sites-available/mydomain.com.conf /etc/nginx/sites-enabled/
Con esto estamos creando un enlace simbólico del archivo que creamos en el directorio /etc/nginx/sites-available/
en el directorio /etc/nginx/sites-enabled/
para que nginx lo pueda reconocer.
Para validar nuestra configuración de Nginx antes de reiniciar el servicio ejecutamos
sudo nginx -t
, en caso haya algún error se mostrará con ese comando.
Ahora debemos reiniciar nuestro servidor Nginx con el comando sudo service nginx restart
Ahora cuando ingresemos a mydomain.com
nos saldrá un error 504 ya que Nginx está enviando las peticiones a http://127.0.0.1:8000
y aun no esta corriendo nuestro proyecto.
Instalar Gunicorn
Gunicorn es un paquete de python, asi que podemos instalarlo desde pip
con pip install gunicorn
Una vez instalado Gunicorn en el entorno virtual podemos acceder al binario desde
/opt/apps/intro_django/venv/bin/gunicorn
Instalar y configurar supervisor
Para instalar supervisor podemos hacerlo de 2 maneras:
- Usando
pip
sudo pip install supervisor
- Desde los repositorios de ubuntu
sudo aptitude install supervisor
.
Recomiendo hacerlo desde los repositorios de ubuntu ya que instalando de esta forma ya se crean los directorios y archivos de configuración básicos.
Los archivos de configuración se encuentran en /etc/supervisor/
.
Ahora vamos a crear un archivo llamado mydomain.conf
en /etc/supervisor/conf.d/
, en este archivo vamos a declarar los procesos que se va a ejecutar nuestra aplicación.
El archivo mydomain.conf
tendrá la siguiente información:
[program:mydomain-web]
command=/opt/apps/intro_django/venv/bin/gunicorn intro_django.wsgi:application
environment=
SECRET_KEY="fooo",
ANOTHER_VAR=""
directory=/opt/apss/intro_django/
user=www-data
autostart=true
autorestart=true
stdout_logfile=/opt/apps/intro_django/logs/gunicorn.log
stderr_logfile=/opt/apps/intro_django/logs/gunicorn.error.log
redirect_stderr=true
Ahora debemos hacer que Supervisor lea la nueva configuración y la ejecute nuestra aplicación, para eso ejecutamos los siguientes comandos:
sudo supervisorctl reread
sudo supervisorctl reload
Ahora cuando accedamos a mydomain.com
veremos nuestra aplicación ejecutandose
Las variables de entorno son el lugar donde debemos poner nuestras credenciales de bases de datos, APIs de terceros, etc.