上一篇里面反常规地记录了只用django的开发服务器来接受外部的访问。
这篇开始要开始正常的部署服务器了,区别就是要加上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
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
这样,整个部署就完成了。
参考资料:
http://liyangliang.me/posts/2015/06/using-supervisor/
http://supervisord.org/configuration.html
网友评论