django 2.0(二)使用uWSGI和Nginx部署线上环境

使用 uWSGI 和 Nginx 的原因

Django 是一个 Web 框架,框架的作用在于处理 request 和 reponse,其他的不是框架所关心的内容。所以怎么部署 Django 不是 Django 所需要关心的。

Django 所提供的是一个开发服务器,这个开发服务器,没有经过安全测试,而且使用的是 Python 自带的 simple HTTPServer 创建的,在安全性和效率上都是不行的。

所以不能用 Django 的 Web 服务器直接部署Web服务,所以就有了 django + uWSGI + Nginx 的 Web 服务器搭建方案。

uWSGI 和 Nginx 介绍

  • WSGI
  • uWSGI
  • uwsgi
  • Nginx

WSGI 是一种协议,不是任何包不是任何服务器,就和 TCP 协议一样。它定义了 Web 服务器和 Web 应用程序之前如何通信的规范。
注:至于为什么和 Python 扯在一起?因为这个协议是由 Python 在 2003 年提出的。(参考:PEP-333 和 PEP-3333 )

uWSGI 是一个全功能的 HTTP 服务器,他要做的就是把 HTTP 协议转化成语言支持的网络协议。比如把 HTTP 协议转化成 WSGI 协议,让 Python 可以直接使用。

uwsgi 是一种 uWSGI 的内部协议,使用二进制方式和其他应用程序进行通信。

Nginx 是一个 Web 服务器其中的 HTTP 服务器功能和 uWSGI 功能很类似,但是 Nginx 还可以用作更多用途,比如最常用的反向代理功能。

之间的联系:
浏览器 <==HTTP协议==> Nginx <==uwsgi协议==> uWSGI <==uwsgi协议==> Python WSGI Module <==WSGI协议==> Python Application

注:Nginx 主要优化的是连接数和静态文件,uWSGI 主要优化的是 wsgi 服务。uWSGI 实际上可以完成 Nginx 的功能,但 Nginx 更强大,能直接在 Nginx 层面就完成很多事情,比如静态文件、反向代理、转发等需求。

uWSGI 安装及配置

1. 安装 uWSGI

$ sudo pip install uwsgi

2. 测试 uWSGI
创建一个 test.py 文件

# test.py 文件内容
def application(env, start_response):
    start_response('200 OK', [('Content-Type','text/html')])
    return [b"Hello World"] # python3
    #return ["Hello World"] # python2

启动 uWSGI 测试服务

uwsgi --http :8000 --wsgi-file test.py

浏览器访问 localhost:8000,显示 hello world 表示成功。

3. 配置 uWSGI
在工程目录下创建uWSGI的配置文件/root/test/mysite/uwsgi.ini

# uwsgi.ini 文件内容
[uwsgi]
socket = 127.0.0.1:8000
chdir=/root/test/mysite
module=mysite.wsgi
master = true
workers=2 
vacuum=true
thunder-lock=true
enable-threads=true
harakiri=30
post-buffering=4096
daemonize =/root/test/mysite/mysite/uwsgi.log
# uwsgi.ini 文件说明
[uwsgi]
socket = 127.0.0.1:8000  
chdir=/root/test/mysite  # 工程的绝对路径
module=mysite.wsgi  # wsgi.py在自己工程中的相对路径,”.”指代一层目录
master = true
workers=2 
vacuum=true
thunder-lock=true
enable-threads=true
harakiri=30
post-buffering=4096
daemonize =/root/test/mysite/mysite/uwsgi.log  # uWSGI日志的存储路径

注:我的 django 项目路径是/root/test/mysite

Nginx 安装及配置

1. 安装 Nginx

$ sudo apt-get install nginx

2. 配置 Nginx
定位 Nginx 配置文件路径

$ sudo nginx -t

会列出以下信息

nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

即 Nginx 默认配置文件的路径是/etc/nginx/conf/nginx.conf
打开配置文件,并在 http {} 内添加 server 字段:

    server {
        listen 80;
        server_name localhost;
        charset     utf-8;
        access_log      /root/test/mysite/nginx_access.log;
        error_log       /root/test/mysite/nginx_error.log;
        client_max_body_size 75M;


        location /static {
            alias /root/test/mysite/mysite/static;
        }

        location / {
            include     /etc/nginx/uwsgi_params;
            uwsgi_pass  127.0.0.1:8000;
        }
    }
# server 字段说明
server {
    listen 80;  # 代表服务器开放80端口
    server_name localhost;  # 服务器地址
    charset     utf-8;
    access_log      /root/test/mysite/nginx_access.log;
    error_log       /root/test/mysite/nginx_error.log;
    client_max_body_size 75M;


    location /static {
        alias /root/test/mysite/mysite/static;  # 自己定义的项目引用静态文件
    }

    location / {
        include     /etc/nginx/conf/uwsgi_params;
        uwsgi_pass  127.0.0.1:8000;  # uWSGI绑定的监听地址,这里使用了8000端口
    }
}

注:我的 django 项目路径是/root/test/mysite

启动 uWSGI 与 Nginx

1. 启动 uWSGI

sudo uwsgi --ini /root/test/mysite/uwsgi.ini

2. 启动 Nginx

nginx -c /etc/nginx/nginx.conf

注:-c 表示加载配置文件启动

3. 你成功了吗
在浏览器输入 localhost 是不是可以正常访问你的项目服务了。

参考资料

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,053评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,527评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,779评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,685评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,699评论 5 366
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,609评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,989评论 3 396
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,654评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,890评论 1 298
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,634评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,716评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,394评论 4 319
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,976评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,950评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,191评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,849评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,458评论 2 342