Nginx+uwsgi部署django应用

部署Nginx

安装nginx

bowen@bowen ~$ brew install nginx

启动nginx

运行nginx或sudo nginx;访问localhost:8080 看到已出现nginx的欢迎页面了。

nginx常用指令

nginx -V 查看版本,以及配置文件地址
nginx -v 查看版本
nginx -c filename 指定配置文件
nginx -h 帮助
nginx -t 测试配置是否有语法错误
nginx -s reload|reopen|stop|quit 重新加载配置|重启|停止|退出 nginx

部署uwsgi

安装uwsgi

bowen@bowen demo$ sudo pip install uwsgi

源码安装

cd ~
wget http://nginx.org/download/nginx-1.5.6.tar.gz
tar xf nginx-1.5.6.tar.gz
cd nginx-1.5.6
./configure --prefix=/usr/local/nginx-1.5.6 \
--with-http_stub_status_module \
--with-http_gzip_static_module
make && make install

测试uwsgi是否正常

在django项目的根目录下创建test.py文件,添加源码如下:

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

然后,Run uWSGI:
uwsgi --http :8000 --wsgi-file test.py
参数含义:
http :8000: 使用http协议,8000端口
wsgi-file test.py: 加载指定文件 test.py
打开下面url,浏览器上应该显示hello world
http://127.0.0.1:8000

uwsgi配置

uwsgi 选项具体可以通过 –help 选项来查看,有上百个可配项。
uwsgi里,就给大家提供了多种配置,省去启动时候,需要敲一长串命令的过程。uwsgi有多种配置可用:ini ,xml ,json,yaml。
选项的格式:
1,命令行参数格式:–
2,配置格式(以ini为例):option = xxxx

ini 格式说明:

1,ini配置为 key=value 形式
2,在ini配置文件里,#号为注释,
3,布尔值为 true 和 false
4,在命令行里,uwsgi myconf.ini 等价于 uwsgi –ini myconf.ini
示例

[uwsgi]
socket = 127.0.0.1:8000
workers = 4

常用配置选项:

socket : 地址和端口号,例如:socket = 127.0.0.1:50000
processes : 开启的进程数量
workers : 开启的进程数量,等同于processes(官网的说法是spawn the specified number ofworkers / processes)
chdir : 指定运行目录(chdir to specified directory before apps loading)
wsgi-file : 载入wsgi-fileload .wsgi file)
stats : 在指定的地址上,开启状态服务(enable the stats server on the specified address
threads : 运行线程。由于GIL的存在,我觉得这个真心没啥用。(run each worker in prethreaded mode with the specified number of threads)
master : 允许主进程存在(enable master process)
daemonize : 使进程在后台运行,并将日志打到指定的日志文件或者udp服务器(daemonize uWSGI)。实际上最常用的,还是把运行记录输出到一个本地文件上。
pidfile : 指定pid文件的位置,记录主进程的pid号。
vacuum : 当服务器退出的时候自动清理环境,删除unix socket文件和pid文件(try to remove all of the generated file/sockets)

部署Django应用

新建wsgi.py

高版本Django会在工程mysite/mysite下自带wsgi.py,内容一样,就不必新建了。

bowen@bowen demo$ touch wsgi.py
bowen@bowen demo$ ll
total 32
-rw-r--r--   1 bowen  staff  12288 May 14 09:54 db.sqlite3
drwxr-xr-x  14 bowen  staff    476 May 15 23:23 demo
-rwxr-xr-x   1 bowen  staff    247 May 14 09:49 manage.py
-rw-r--r--   1 bowen  staff      0 Jun  3 23:32 wsgi.py

wsgi.py内容:

import os
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "mysite.settings")

from django.core.wsgi import get_wsgi_application
application = get_wsgi_application()

配置uwsgi.ini

参照前面的配置说明,我们进行如下配置,协助uwsgi启动。配置文件启动方式比较优雅,总比你敲半天敲错舒服多了,其他启动方式可查看uwsgi官网。
uwsgi.ini 内容如下:

[uwsgi]
socket = 127.0.0.1:8888
chdir = /Users/bowen/python/demo
env = DJANGO_SETTINGS_MODULE=demo.settings
module = demo/wsgi.py
processes = 4
threads = 2
stats = 127.0.0.1:8887

socket = 127.0.0.1:8888 此句,是指明了uwsgi的启动方式和端口。当 uwsgi用socket方式启动时,是不能直接解析http请求的。在它之前还需要有另外一个服务器进行处理,这时就轮到nginx出场了。

配置nginx.conf

/usr/local/etc/nginx目录下,修改nginx.conf中的location,配置上 nginx对 uwsgi的监控端口。

location / {
             #root   html;
             #index  index.html index.htm;
             uwsgi_pass 127.0.0.1:8888;
             include uwsgi_params;
         }

启动服务:

sudo nginx
uwsgi uwsgi.ini

服务器启动后,在浏览器查看127.0.0.1,就能看的你的web页面了。

参考

1.基于nginx和uWSGI在Ubuntu上部署Django
2.uWSGI的安装与配置(官网摘录)
3.uwsgi官方文档
4.Mac os X 配置 django + uWSGI + nginx 简单构建过程分享
5.Django Nginx+uwsgi 安装配置

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值