Deploy de aplicação Django + Gunicorn + Nginx + Supervisor + Ubuntu 12.10
Escrevi esse post para relatar todo o processo que envolveu o meu primeiro deploy de uma aplicação Django. É uma aplicação Django simples que precisa ser rodado em uma rede interna de poucos computadores, sendo um desses o provedor do serviço. De início, comecei a tentar subir a aplicação pelo mod_wsgi + Apache, até que, apesar de conseguir ter disponibilizado o serviço, não era "servido" mais do que a primeira página.
Então resolvi migrar para o Gunicorn + Nginx, que é o Unicorn do Ruby, só que em Python, compativel com vários frameworks incluindo o Django. Como (praticamente) toda aplicação Python, é bem feita, fácil de usar, objetiva e limpa! O servidor Nginx também é bem visto pelos programadores, considerando bem leve e com um bom gerenciador de memória.
Os passos que envolveram esse trabalho, que foi o meu primeiro deploy tanto de uma aplicação Django quanto de web em geral, estão listados:
Atualizar Ubuntu: apt-get update; apt-get upgrade;
Instalar gunicorn (http://gunicorn-docs.readthedocs.org/en/latest/install.html#debian-gnu-linux)
Django: adicionar ‘gunicorn’ em INSTALLED_APPS
Supervisor: atulizar colocando a aplicação e reiniciar supervisor
Nginx: preparar server e reiniciar, inserir em /etc/nginx/sites-available o arquivo contendo o seguinte (depois fazer symlink para o sites-enabled):
server {
listen 1234; #port that Nginx listens on
server_name 192.########; #the actual IP of the server; it has a public IP address
access_log /home/lilo/textImageSite/
access.log;
error_log /home/lilo/textImageSite/error.log;
location /static {
root /var/www/jactowebservices/static;
}
location / {
proxy_pass http://127.0.0.1:8000; #the port that Gunicorn uses
}
}
Habilitar serviço do aplicativo pelo gunicorn (supervisor liga automaticamente após primeiro restart): python manage.py run_gunicorn 0.0.0.0:8000
Nginx: servir static_files
Principal: https://davidpoblador.com/run-django-apps-using-gunicorn-and-nginx/
http://michal.karzynski.pl/blog/2013/06/09/django-nginx-gunicorn-virtualenv-supervisor/
Uso do supervisor e como iniciar o gunicorn: http://goodcode.io/blog/django-nginx-gunicorn/
Como iniciar o gunicorn (2): http://stackoverflow.com/questions/12743589/how-to-run-background-the-project-django-use-gunicorn
https://docs.djangoproject.com/en/1.4/howto/deployment/wsgi/gunicorn/
http://agiliq.com/blog/2012/02/deploy-django-app-5-easy-steps/
Sobre Nginx: http://nginx.org/en/docs/beginners_guide.html
Sobre servir arquivos static (Rodar esse comando primeiramente para servir static em produção): https://docs.djangoproject.com/en/1.6/ref/contrib/staticfiles/#collectstatic
Static files (2): http://stackoverflow.com/questions/17391616/serving-static-files-with-nginx-gunicorn-django
Static files (3) - DEFINITIVO : http://stackoverflow.com/questions/11425603/how-exactly-do-i-server-static-files-with-nginx-and-gunicorn-for-a-django-app/11443651#11443651
South: http://south.readthedocs.org/en/latest/installation.html
Como colocar aplicação Django em produção: http://www.b-list.org/weblog/2007/nov/08/production/
* Link final: https://docs.djangoproject.com/en/dev/howto/deployment/wsgi/gunicorn/