Despliegue de proyecto Django en Ubuntu 20.04LTS con Nginx y Gunicorn

blog


El objetivo de esta publicación es desplegar o poner en producción un proyecto Django alojado en un repositorio Github . Para ello seguiremos los siguientes pasos:

 

• Crear un droplet con UBUNTU 20.04LTS en DIGITALOCEAN.

• Conexión remota a nuestra máquina UBUNTU 20.04LTS.

• Crear entorno virtual con VIRTUALENV.

• Clonar proyecto django desde un repositorio GITHUB

• Configurar NGINX.

• Configurar GUNICORN.

 

1.-Crear un droplet con UBUNTU 20.04LTS en DIGITALOCEAN

 

Accedemos a Digitalocean y creamos un droplet.

 

 

Se ofrecen diferentes caracterísitcas para nuestro droplet según la necesidad de nuestro o nuestros proyectos (es posible alojar multiples proyectos web en un mismo droplet). En nuestro ejemplo al ser un desploy de ejemplo, seleccionaremos las opciones más básicas:

Choose and image: Ubuntu 20.04LTS

Choose plan: Basic / 6$ (cualquiera de las opciones será válida)

Choose datacenter regioon: Elegiremos la más cercana a la localización de nuestros futuros usuarios. Por ejemplo Amsterdam.

 

Introducimos un password cumpliendo requerimiento necesarios como indica:

 

Seleccionamos un hostname y nombre de etiqueta para identificarlo entre otros droplets que podamos tener:

 

Finalmente le damos a create, y el droplet comenzará a crearse...

 

Una vez ha finalizado la puesta a punto de nuestro droplet, lo veremos en verde que indica que está iniciado y nos asigará una IP con la cual podremos acceder remotamente para trabajar con él:

 


 

2.-CONEXIÓN REMOTA A NUESTRA MÁQUINA MEDIANTE SSH:

 

Para conectarnos a nuestra máquina utilizaremos el siguiente comando y nos pedirá la contraseña que hemos creado al crear el droplet.

ssh root@142.93.232.138

 

Ya nos hemos conectados a nuestra máquina Ubuntu, ya podemos trabajar con ella.

 


 

3.-Crear entorno virtual con VIRTUALENV

 

Creamos los directorios donde alojaremos nuestra web, por ejemplo:

Para este desploy hemos decidido colocar el proyecto django en el siguiente nivel pensando que en un futuro puede haber necesidad de desplegar nuevos proyectos en el mismo droplets:

/home/imanol/myprojectdir/webimanol

Instalamos virtualenv que es la herramienta que nos permitirá crear un entorno aislado para nuestro proyecto donde no nos podrán afectar módulos y aplicaciones instaladas fuera de ella.

pip install virtualenv

Creamos un entorno virtual llamado "env" porque nos parece muy identificativo (aunque lo podemos llamar como queramos).

python3 -m virtualenv env

Podemos ver que ya se ha creado nuestro entorno virtual. Aparentemente es un simple directorio:

Activarmos el entorno virtual (siempre que queramos instalar módulos o aplicaciones únicamente dentro del él):

source env bin activate

(Podemos ver que el entorno está activado ya que a la izquierda nos acompañará (env). En el momento que queramos actuar fuera del entorno virtual simplemente ejecutaremos el siguiente comando desde cualquier directorio:

deactivate

"(env)" habrá desaparecido, por lo que ya habremos salido del entorno virtual.

 


 

4.-Clonar proyecto django desde un repositorio GITHUB

 

Una vez estamos en el directorio donde queremos importar el proyecto django (mismo nivel del directorio "env"), ejecutaremos el comando "git clone" seguido del enlace del proyecto del repositorio github:

git clone https://github.com/retegi/webimanol.git

 

Podemos comprobar que se ha clonado el proyecto webimanol ya que se habrá creado un nuevo directorio llamado webimanol junto al directorio env:

Si probamos si funciona el proyecto mediante el comando python manage.py runserver nos indicará que el módulo django no está instalado. ¡Claro! Lo hemos clonado, pero en nuestro entorno no hemos instalado Django.

Para instalar Django:

pip install django

Si nos muestra un warning recomendando actualizar PIP, ejecutaremos el comando que nos indica:

python -m pip install --upgrade pip

 

Ahora podemos probar si funciona el proyecto mediante el comando python manage.py runserver

Al no devolver ningún error, sabemos que hemos importado el proyecto de forma correcta.

Si al ejecutar runserver nos indica que tenemos migraciones pendientes, poder ejecutar migrate:

python manage.py mgirate

 


 

5.- Configurar NGINX

 

Saldremos del entorno virtual mediante "deactivate", comando con el cual "(env)" desaparecerá. Después instalaremos NGINX mediante:

apt-get install nginx

Accedemos al directorio NGINX y nos fijaremos en los direcotrios sites-availables y sites-enabled. Accederemos a sites-available y veremos un archivo default.

cd /etc/nginx/sites-available

Crearemos una copia y lo editaremos para nuestro proyecto (aunque tambien podemos crear uno nuevo vacío).

cp default webimanol

Podemos comprobar mediante el comando "ll" que nuestro archivo se ha copiado:

Lo editaremos con el sigueinte comando:

nano webimanol

Borraremos su contenido y colocaremos el siguiente código con las rutas correctas, ip correcta, dominios (si los necesitamos), etc.

Código para copiar:

server {
   listen 80;
   server_name 143.198.226.190 webimanol.com www.webimanol.com;
   location = /favicon.ico { access_log off; log_not_found off;}
   location /static/ { root /home/imanol/projectdir/webimanol/webimanol/;}
   location /media/ { root /home/imanol/projectdir/webimanol/webimanol/;}
   location / { include proxy_params; proxy_pass http://unix:/run/webimanol.sock;}
}

Para guardar: CONTROL + O

INTRO

Para salir: CONTROL + X

 

Ahora debemos ejecutar el siguiente comando para realizar la copia a sites-enabled (debe hacerse como se indica con las rutas absolutas desde "/etc", en caso contrario no será válido):

ln -s /etc/nginx/sites-available/webimanol /etc/nginx/sites-enabled/

Si observamos ahora, se habrá creado una copia en sites-enabled llamado webimanol:

Podemos comprobar si el código está correcto mediante el comando:

sudo nginx -t

¡Ya tenemos NGINX configurado!

 


 

6.-Instalación de GUNICORN

 

Instalaremos Gunicorn con el entorno activado:

Si estamos en el nivel del directorio "env":

source env bin activate

Y ejecutaremos el comando de instalación:

pip install gunicorn

Una vez instalado accederemos a la siguiente ruta:

de /etc/systemd/system/

Aquí creamos dos archivos: "webimanol.socket" y "webimanol.service"

Comenzamos creando y editando el archivo "webimanol.socket":

nano webimanol.socket

E introducimos el siguiente contenido:

Importante: En Description siempre debemos poner "gunicorn socket"