Ubuntu 16.10 下部署Django+uWSGI+Nginx服务器

先说说他们的关系,Nginx和uWSGI都是Web服务器,Nginx负责静态内容,uWSGI负责Python这样的动态内容,二者配合共同提供Web服务以实现提高效率和负载均衡等目的。uWSGI实现了多个协议,如WSGI,HTTP协议,还有它自己的uwsgi协议,想了解更多关于uWSGI和uwsgi协议内容可以查阅这里。这样和fastcgi类似,请求和响应的流程如下:

Request > Nginx > uWSGI > Django > uWSGI > Nginx > Response

请求先交由Nginx,如果是静态内容就自己处理了,如果是动态内容就交给uWSGI服务器,uWSGI服务器处理整个Django项目的Python代码,响应请求,原路返回,但是与fastcgi不同,Nginx、uWSGI和Django可以独立部署,然后整合。那么我们从Django开始,这里的服务器环境是Ubuntu 16.10。

1. 部署Django的项目

安装Python和Django,Ubuntu自带2.7和3.5版本的Python,安装相应的Django版本,注意在Ubuntu中不同版本Python都有相应的命令

www@cloud-vm-ub01:~$ python --version
Python
2.7.12+
www@cloud
-vm-ub01:~$ python3 --version
Python
3.5.2+
www@cloud
-vm-ub01:~$ pip -V
pip
9.0.1 from /home/wisesoe/.local/lib/python2.7/site-packages (python 2.7)
www@cloud
-vm-ub01:~$ pip3 -V
pip
9.0.1 from /home/wisesoe/.local/lib/python3.5/site-packages (python 3.5)

pip3
install django

将已经完成开发的Django项目pro(pro是Django项目名)拷贝到服务器,这里拷贝到了www用户(www是服务器可登录用户名)路径下,最后相对路径是~/work/project/pro,绝对路径是/home/www/project/pro

进入以上目录,使用Django的内置服务器测试看看pro项目是否运行正常。

python3 ./manage.py runserver 127.0.0.1:8080

2. 部署uWSGI服务器

通过pip安装uWSGI。

pip3 install uwsgi

测试uWSGI是否正常,在~/work/project/pro目录中创建一个测试用的Python文件uwsgi_test.py

def application(env, start_response): start_response('200 OK',[('Content-Type', 'text/html')]) #return ['Hello world'] # Python2 return [b'Hello world'] # Python3

在pro项目路径下,基于HTTP协议运行uWSGI,如果uWSGI安装正常的话,可以在浏览器中访问9090端口,看到Hello world字样

uwsgi --http 127.0.0.1:9090 --wsgi-file uwsgi_test.py

接下来启动uWSGI加载Django项目,这里依然使用HTTP协议,将指向具体Python文件--wsgi-file参数替换为指向Django项目的--module参数,参数的值pro.wsgi指向~/work/project/pro/pro/wsgi.py模块,如果正常可以在浏览器:9090端口打开了项目,但是静态文件路径有问题,不过没关系后面再处理。

www@cloud-vm-ub01:~/work/project/pro$ uwsgi --http 127.0.0.1:9090 --module pro.wsgi

对于uWSGI服务器的配置,如上命令加上很多参数非常麻烦,可以写成配置文件的方式,在~/work/project/pro中创建一个配置文件uwsgi.ini,注释掉参数暂时忽略,Django 1.4以前的版本需要配置如env,pythonpath等参数,这里不再深究了。

其中http参数用于以上测试,而与Nginx交互需要使用socket参数,即使用TCP协议,WSGI和uwsgi协议都在TCP协议之上。socket参数也可以配置为网络地址,如socket=127.0.0.1:7070,但如果Nginx和uWSGI同在一个服务器上,可以使用socket文件的形式。chmod-socket是为了动态配置socket文件的权限,因为socket文件会在每次uWSGI启动时被重新创建。

[uwsgi]
http
=127.0.0.1:8000
#socket
=/home/www/work/project/pro/nginx_uwsgi.socket
chdir
=/home/www/work/project/pro/
#chmod-socket
=664
master
=true
processes
=4
threads
=2
module
=pro.wsgi
#wsgi-file
=uwsgi_test.py
#stats
=127.0.0.1:9000

通过下面命令同样可以启动uWSGI加载Djiango项目

uwsgi --ini uwsgi.ini

3. 部署Nginx服务器

通过apt安装Nginx

sudo apt install nginx

Nginx可以通过以下命令控制。正常安装和启动Nginx后,通过:80可以看到Nginx的欢迎页

sudo service nginx start sudo service nginx stop sudo service nginx restart

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/38000480c1200e5eaaf1ddaf46344bb7.html