django_gunicorn配置
2017-06-22
第一句话就是吐槽!网上百度的纯粹尼玛一堆狗屎!超级不适合新手!这里我来给各位新手讲解如何把django部署到nginx+gunicorn! 环境:云服务器ubuntu16.04系统。django版本1.10.6。 首先讲解原理:浏览器输入你的网址后回车后,nginx第一步收到请求,如果访问的是静态资源,比如html,png,css,js等nginx直接处理了。如果是动态请求就是第二步把这个动态请求转发给gunicorn来处理了。他俩分工一静一动,这样的好处我不用多说了。就他么个这意思网上的教程就磨磨唧唧一大堆。 他们的原理和过程是这样的,那么问题来了,怎样把他们结合在一起? 首先你要知道 如果没有nginx,光有gunicorn是可以直接运行django项目的。 比如 $ gunicron 你的项目名,再比如 $ gunicorn -w 1 -b IP:端口项目名.wsgi 就可以运行。 其次如果配置是这样的,我的nginx路径是 : /etc/nginx/ , 配置/etc/nginx/sites-enabled/default。 你也许会看到网上说要么编辑nginx.conf 要么新建一个配置文件。 我没有那么做我就一个项目所以直接更改nginx的默认配置。
记得用 sudo vim /etc/nginx/sites-enabled/default
把原有的注释掉改成这样
server {
listen 80;
server_name example.org; # 这是HOST机器的外部域名,用地址也行
root /home/ubuntu/.... #这里填你的项目根目录
location / {
proxy_pass http://127.0.0.1:8080; # 这里是指向 gunicorn host 的服务地址址 proxy_set_header Host $host; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
location /static {
alias /home/ubuntu/项目名/static/; # 在你项目根目录建一个存放静态资源的文件夹供nginx访问。
}
}
注意:1.我的缩进格式不对,请你注意。
2.proxy_pass 和 一会gunicorn启动时用的IP地址和端口必须一致,因为nginx收到动态请求要通过这个地址转发给gunicorn。
3. 重启nginx服务:sudo service nginx restart
如果你现在就从浏览器输入你的地址访问的话 应该是502 bad gateway ,因为你得接着启动的你gunicorn才可以。
gunicorn -w 1(这里填你的服务器cpu核数) -b 127.0.0.1:8080 你的项目名.wsgi
启动成功浏览器里再访问,应该就会成功了。
目前, nginx+gunicorn结合成功。
还需做些事情,因为刚才在nginx里指定了nginx访问的静态资源的位置,可实际django项目中的静态资源位置不是那样的,所以我们需要移动一下。
1.项目根目录创建文件夹 mkdir static
2.配置settings.py 加上两行
STATIC_URL = ‘/static/’
STATIC_ROOT = ‘static/’
3.执行命令 python manage.py collectstatic 这样就把所有的静态资源转移到static里了。
运行一下应该没问题了。