Django + Uwsgi + Nginx 生产部署

说明

django自带的测试服务器,生产环境在安全和稳定性等方面都会存在问题,在生产环境采用比较多的部署方式是 nginx+uwsgi 部署。

nginx作为前端服务器,负责接收所有的请求。对于静态文件,nginx就可以处理,支持高并发。
对于动态请求,nginx 交给 uWSGI 服务器处理。uWSGI 是实现了uwsgi 和 WSGI 两种协议的web服务器,uwsgi协议是一个uWSGI服务器自有的协议,它用于定义传输信息的类型(type of information)。

准备工作

基础安装

1
2
3
pip install uwsgi
yum intall nginx
python manage.py runserver

保证nginx可以正常访问,django 项目可以通过网页正常访问
settings.py 文件中修改

1
Allow_host =['172.16.0.1', 'localhost',]

安装好之后在 settigs.py 文件的同级目录下,增加配置文件 uwsgi.ini

uwsgi配置文件

more uwsgi.ini

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
[uwsgi]
chdir=/mnt/www/pachong #项目目录
module=CMDB.wwsgi:application #指定项目的application
socket=/mnt/www/django_uwsgi.sock #指定sock文件路径
# socket=127.0.0.1:3309 #也可以使用端口
#http=127.0.0.1:3309 #作为单独服务器可以使用 http
workers=4 #指定进程数
pidfile=/mnt/www/uwsgi.pid
http://0.0.0.0:8080 #指定IP 端口
static-map=/static = /mnt/www/pkcong/arry/static #指定静态文件
uid=root
gid=root #指定启动的用户名和组
master=true #启用主进程
vacuum=true #自动移除unix socket和pid文件 服务终止时
thunder-lock=true #序列化接受的内容 如果可能的话
enable-thread=true #启用线程
harakiri=30 #设置自中断时间
post-buffering=4096 #设置缓冲
daemonize=/mnt/www/django_uwsgi.log #设置日志目录

启动

1
uwsgi --ini uwsgi.ini

nginx配置文件

默认配置文件位于 /etc/nginx/conf/nginx.conf, 可以通过 nginx -t 查看

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
server{
listen 80;
server_name localhost;
charset utf-8;
client_max_body_size 75M;

location /media {
alias /path/to/project/media;
}

location /static {
alias /mnt/www/pachong/arya/static;
}

location / {
uwsgi_pass unix:///mnt/www/django_uwsgi.sock; #和前面uwsgi一致,可以为ip+端口
include uwsgi_params;
uwsgi_read_timeout 30;
}
}

接下来启动 nginx,然后访问 nginx 监听的 80 端口即可。

Recommended Posts