Django NBA Web开发 - Step 17 Django Debian Nginx Gunicorn 部署

上一篇里面反常规地记录了只用django的开发服务器来接受外部的访问。
这篇开始要开始正常的部署服务器了,区别就是要加上nginx和gunicorn了。

1:官方文档

官方文档里面已经明确说了,开发服务器不要用于生产环境提供静态文件。


Django NBA Web开发 - Step 17 Django Debian Nginx Gunicorn 部署_第1张图片
文档讲解

2:配置Nginx

理论上来说,Nginx的配置文件在/etc/nginx/nginx.conf
你可以在这个文件里面直接修改配置,不过因为这样做容易污染源文件,所以在这个conf文件内部,有一句语句是
include /etc/nginx/sites-enabled/*
这个意思就是会加载sites-enabled下面的配置文件
而sites-enabled是允许哪些配置文件,那源文件配置文件在哪呢?
在/etc/nginx/sites-available里面
比如我在这个文件夹下面创建了一个allen.com的配置文件,你要把让他生效,就可以用软链接指向到sites-enabled里面去。
sudo ln -s /etc/nginx/sites-available/allen.com /etc/nginx/sites-enabled/allen.com

随后,我们就要编辑这个配置文件的内容了

server {
    charset utf-8;
    listen 80;
    server_name www.allenbigbear.com;

    location /static {
        alias /home/allen/NBAsite/NBAsite/collected_static; 
        #这一行用来定位静态文件夹的位置
    }

    location / {
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_pass http://0.0.0.0:8000;
        #最后一行很重要,要写0.0.0.0
    }
}

随后,在你项目的settings.py里面,需要设置STATIC_ROOT = os.path.join(BASE_DIR, 'collected_static')

之后,运行一下 python manage.py collectstatic这个命令,他会把所有有关系的静态文件,包括每个app下的,还有STATICFILES_DIR路径下的,都拷贝到上面STATIC_ROOT里面,放在Nginx集中使用

3:效果

运行Gunicorn命令
gunicorn NBAsite.wsgi:application -b 0.0.0.0:8000

Django NBA Web开发 - Step 17 Django Debian Nginx Gunicorn 部署_第2张图片
静态文件加载成功

4: 进程管理工具Supervisor

程序可以运行了,那万一进程挂了什么的,怎么办呢?不可能自己24小时监控吧。
所以我们引入这个进程管理工具,来监控。

安装:supervisor的安装,不用装在虚拟环境下,直接sudo apt-get 就好了

配置:来说一下关于supervisor的配置
实际使用中一共有2个命令,一个是supervisord,这个是启动服务端
一个是supervisorctl,这个是启动客户端,所以说supervisor实际上是一个C/S形式的应用。
安装完以后,你可以用echo_supervisord_conf来看一下当前的配置
总的配置文件,在etc/supervisor/supervisord.conf里面,而在这个配置文件的最下面,你可以看到

[include]
files = /etc/supervisor/conf.d/*.conf or *ini

他就相当于自动把conf.d这个文件夹下你自定义创建的配置文件,全部导入了。

自己项目并启动服务端:在conf.d下面创建自定义的配置 sudo touch allen.conf
并写入关于自己项目的配置

[program:NBAsite]
directory = /home/allen/NBAsite/NBAsite  程序的启动目录
command = /home/allen/NBAsite/env/bin/gunicorn -b 0.0.0.0:8000   启动命令
autostart = true     在 supervisord 启动的时候也自动启动
startsecs = 5        启动 5 秒后没有异常退出,就当作已经正常启动了
autorestart = true   程序异常退出后自动重启
startretries = 3     启动失败自动重试次数,默认是 3
user = leon          用哪个用户启动
redirect_stderr = true  把 stderr 重定向到 stdout,默认 false
stdout_logfile_maxbytes = 20MB  stdout 日志文件大小,默认 50MB
stdout_logfile_backups = 20     stdout 日志文件备份数
#stdout 日志文件,需要注意当指定目录不存在时无法正常启动,所以需要手动创建目录(supervisord 会自动创建日志文件)
stdout_logfile = /home/allen/NBAsite/env/allen.log

然后启动服务端supervisord -c /etc/supervisor/supervisord.conf
完成之后再启动客户端supervisorctl -c /etc/supervisor/supervisord.conf

顺便说下supervisor使用的简单命令

supervisor stop projectname
supervisor start projectname

这样,整个部署就完成了。

参考资料:
http://liyangliang.me/posts/2015/06/using-supervisor/
http://supervisord.org/configuration.html

你可能感兴趣的:(Django NBA Web开发 - Step 17 Django Debian Nginx Gunicorn 部署)