configurar server Django, gunicorn, supervisor y nginx #django #gunicorn #nginx #server #supervisor









Investigando como siempre, me tope con algunos tutoriales sobre  como ejecutar tu proyecto django en gunicorn y luego mostrarlo por nginx resulta que no están del todo completos y he tenido que pasar de uno a otro para lograr mi objetivo, así que recopilare todo en uno solo :D 



A continuación os resumo para qué sirve cada uno de los componentes que se utilizan en un despliegue genérico.
  • Gunicorn: Green Unicorn es un servidor WSGI HTTP para Python (pre-fork de unicorn de ruby). Consume poco y es bastante rápido.
  • Nginx: Es un servidor web/proxy inverso ligero de alto rendimiento y un proxy para protocolos de correo electrónico. Nos ayudará a servir ficheros estáticos.
  • Supervisor: Es un gestor de procesos para linux. Nos permitirá crear un proceso en segundo plano de nuestro servidor gunicorn. (de momento no estoy trabajando con supervisor)

 Configuración de proyecto para contenido estático:


  
Acá simplemente vamos a configurar nuestro Django para que copie todo nuestro contenido Estático a otra carpeta para que nginx pueda cargarlo.


vamos al archivo settings.py y al final del archivo vamos agregar lo siguiente:

 # Static files (CSS, JavaScript, Images)
# https://docs.djangoproject.com/en/1.8/howto/static-files/

STATIC_ROOT = '/opt/<proyecto>/static/'



#<proyecto> obviamente sera el nombre de tu proyecto




STATIC_URL = '/static/'

STATICFILES_DIRS = (
    # Put strings here, like "/home/html/static" or "C:/www/django/static".
    # Always use forward slashes, even on Windows.
    # Don't forget to use absolute paths, not relative paths.
    os.path.join(BASE_DIR,'static'),
)




donde static_root  sera la ubicación donde se va copiar todo nuestro contenido estático

las siguientes lineas ya deberías tener en tu configuración de django para poder cargar contenido estatico css, img , js.. (OJO cuando ejecutas tu proyecton con python manage.py runserver) igual son necesarias para poder exportar el contenido a la nueva carpeta donde captura el contenido estatico nginx

STATIC_URL es la carpeta de donde cargar el contenido estático, se usa como variable  para dar la ruta en los template (html)

ejemplo:
<link rel="stylesheet" href="{% static "" %}css/bootstrap.css">


STATICFILES_DIRS Ruta absoluta que usa Django para obtener los archivos estáticos



ahora abres un terminal en la carpeta del proyecto o vas a la carpeta por medio del comando "cd" y ejecutas lo siguiente:

python manage.py collectstatic


con ese comando exportas los archivos estáticos a la ruta que colocas en STATIC_ROOT




ya configurado django y el directorio estático externo procedemos a instalar gunicorn




pip install gunicorn



Lanzamos gunicorn manualmente desde la raiz (dónde está el manage.py): 

gunicorn <proyecto>.wsgi:application --bind=127.0.0.1:8000 # se puede cambiar el puerto


<proyecto> obviamente sera el nombre de tu proyecto


Si entramos a http://127.0.0.1:8000 debería funcionar todo menos los ficheros estáticos. Si es así vamos bien.


Instalamos nginx



sudo apt-get install nginx




Configuramos nuestro proyecto dentro de Nginx


sudo nano /etc/nginx/sites-available/<proyecto>



dentro añadimos los siguiente:




 server {

       #listen 80;

    listen 80 default_server;

        listen [::]:80 default_server ipv6only=on;

        server_name 127.0.0.1;


        access_log off;



    location /static/  {

         root /opt/<proyecto>/;

    }


     

        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;

        }

 }



Guardamos (CTRL+O y  CTRL+X) y creamos un enlace simbólico en sites-enabled:

   cd /etc/nginx/sites-enabled 


  sudo ln -s ../sites-available/<proyecto>




Reiniciamos nginx:

 sudo service nginx restart


Si entramos a http://127.0.0.1/http://localhost/ ya debería funcionar y cargar también los ficheros estáticos.
Básicamente definimos un proxy en 127.0.0.1:80 del 127.0.0.1:8000 pero que también servirá los ficheros static.


por el momento es toda la configuración luego cuando trabaje con supervisor completare la guía



CONTINUACIÓN - PARTE 2:



http://cirelramos.blogspot.com/2015/08/parte-2-configurar-server-django.html





Fuentes:

http://blog.hcosta.info/desplegar-django-en-produccion-con-gunicorn-nginx-y-supervisor/

https://www.digitalocean.com/community/tutorials/how-to-deploy-python-wsgi-apps-using-gunicorn-http-server-behind-nginx


1 comentario :

  1. Hola Cirel, gracias por el Post, muy aclaratorio. Si por ejemplo en vez de descargar Nginx lo que haces es pagar por el servidor Nginx de una compañía (Djangoeurope.com por ejemplo) para subir tu proyecto Django a él y que se vea en internet y no sólo en red local, ¿como realizas los pasos que has descrito? Un saludo

    ResponderEliminar