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/ o 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
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
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
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