引言

在开发 Django 项目开发完成后需要进行部署,使用 uWSGI + Nginx 的方式部署,以增加并发

Django

 

测试

1
$ python manage.py runserver

如果可以正常运行,且可访问页面,证明项目环境已配置完全,可以正常使用。

uWSGI

安装

1
sudo apt-get install nginx uwsgi uwsgi-plugin-python

可以使用 uwsgi –version 查看 uwsgi 版本,如果版本过低则

1
2
3
4
$ pip install -U uwsgi
$ cd /usr/bin
$ mv uwsgi uwsgi-old
$ ln -s /usr/local/bin/uwsgi uwsgi

 

配置

为了测试可以先生成一个测试文件 test.py

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

然后使用 8000 端口架设

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

在 django 中项正常运行,nginx 中静态文件能够直接打开后

1
$ uwsgi --http :8000 --module /path/to/file/wsgi.py

如果正常后可以使用 UNIX_SOCK

1
$ uwsgi --socket /tmp/mysite.sock --chmod-socket=664 --module /path/to/file/wsgi.py

如果正常则写配置文件 mysite.ini

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
[uwsgi]
# 项目目录
chdir=/Users/hourong/PycharmProjects/examination
# 从文件夹中找 /your/project/wsgi.py 中的 application
module=examination.wsgi:application
# 设置环境
env=DJANGO_SETTINGS_MODULE=examination.settings
# pid 文件地址
pidfile=/tmp/project-master.pid
# 开放的端口( http, tcp, unix socket )
# http=127.0.0.1:49152
# socket=127.0.0.1:18001
socket=/tmp/mysite.sock
# unix socket 需要指定文件的
chmod-socket=664
# 用于添加 virtualenv 的地址
home=/Users/hourong/venv/examnation
# 当前进程数
processes=1
# 允许多线程
enable-threads=True

启动时只需

1
$ uwsgi --ini mysite.ini

Nginx

安装

1
apt-get install nginx

    

基本命令

1
2
3
/etc/init.d/nginx start         #启动
/etc/init.d/nginx stop          #停止
/etc/init.d/nginx restart       #重启

基本配置

1
vim /etc/nginx/conf.d/mysite.conf

其中 mysite.conf 可替换为 XXX.conf

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
upstream django {
    # 有两种选择,根据 uWSGI 中配置而定
    # server 127.0.0.1:18001;
    server unix:///tmp/mysite.sock;
}

server {
        listen   18090;
        charset utf-8;
        
        # 认证日志
	     
	     access_log /usr/local/var/log/nginx/exam_access_log;
	     
	     # 错误日志
 	     
 	     error_log /usr/local/var/log/nginx/exam_error_log;
 	     
 	     location /static {
     	           # 静态文件链接地址
                alias /your/web/path/static/;
        }

        location / {
                include uwsgi_params;
                uwsgi_pass django;
        }
}