部署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-file(load .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 安装配置