django 项目完成后,使用django自带的runserver开发服务器使用在生产环境是不行的,性能远远跟不上。为此需要使用别的web服务器代替。
这里我就使用黄金搭配uwsgi和nginx。uwsgi是一个web服务器,其优点就是处理动态请求是强项。下面我们先将wusig和django搭配起来。
运行环境 ubuntu
1.安装 pip install uwsgi
2.进入django 项目目录
3.测试uwsgi +django能否使用
uwsgi --http 本机ip:端口 --file 项目名/wsgi.py --static-map=/static=项目static所在路径
浏览器 ip+端口运行 成功访问到项目页面,uwsgi+django 环境没有问题
4.编辑uwsgi.ini 配置文件
在 django 项目同级目录创建scripts目录,并且在目录中创建uwsgi.ini 文件,写入一下配置信息
# uwsig使用配置文件启动
[uwsgi]
# 项目目录
chdir=/home/windblow/Desktop/django/Yuwei
# 指定项目的application
module=Yuwei.wsgi:application
# 指定sock的文件路径
socket=/home/windblow/Desktop/django/scripts/uwsgi.sock
# 进程个数
workers=5
pidfile=/home/windblow/Desktop/django/scripts/uwsgi.pid
# 指定IP端口
http=10.241.220.189:8080
# 指定静态文件
static-map=/static=/home/windblow/Desktop/django/Yuwei/yunweimain/static
# 启动uwsgi的用户名和用户组
uid=root
gid=root
# 启用主进程
master=true
# 自动移除unix Socket和pid文件当服务停止的时候
vacuum=true
# 序列化接受的内容,如果可能的话
thunder-lock=true
# 启用线程
enable-threads=true
# 设置自中断时间
harakiri=30
# 设置缓冲
post-buffering=4096
# 设置日志目录
daemonize=/home/windblow/Desktop/django/scripts/uwsgi.logbaocun
ip + 端口访问,成功。
uwsgi配置完成
5 由于uwsgi 的静态请求功能并不是它的强项,而nginx的强项就是静态请求,而且其并发性能很好。所以我们用nginx+uwsgi的方式进行部署。
具体流程是客户端碰请求静态文件时候,交给nginx处理,碰到动态请求时候,nginx交给uwsgi进行处理。所有请求最先交给nginx处理,然后再给uwsgi。
大致的机构如下:
客户端请求-------->nginx--------->uwsgi--------->django项目。
6.安装nginx
apt-get install nginx
安装完成后,运行如下命令:
/etc/init.d/nginx start
得到 欢迎界面。说明nginx安装成功。
7.接下来要将nginx和uwsgi进行联系起来。
cd /etc/nginx
默认配置都在nginx.conf中。
server {
listen 80; # 我要监听那个端口
server_name 10.241.220.189; # 你访问的路径前面的url名称
access_log /var/log/nginx/access.log; # Nginx日志配置
charset utf-8; # Nginx编码
gzip_types text/plain application/x-javascript text/css text/javascript application/x-httpd-php application/json text/json image/jpeg image/gif image/png application/octet-stream; # 支持压缩的类型
error_page 404 /404.html; # 错误页面
error_page 500 502 503 504 /50x.html; # 错误页面
# 指定项目路径uwsgi
location / {
# 这个location就和咱们Django的url(r'^admin/', admin.site.urls)
include uwsgi_params; # 导入一个Nginx模块他是用来和uWSGI进行通讯的
uwsgi_connect_timeout 30; # 设置连接uWSGI超时时间
uwsgi_pass unix:/home/windblow/Desktop/django/scripts/uwsgi.sock; # 指定
uwsgi的sock文件所有动态请求就会直接丢给他
}
# 指定静态文件路径
location /static/ {
alias /home/windblow/Desktop/django/Yuwei/yunweimain/static/;
index index.html index.htm;
}
}
保存重启nginx
/etc/init.d/nginx restart
成功访问到我们的页面。