Django虽然自带一个Server,但只能做为开发时测试使用,咱们须要一个能够稳定而持续的服务器对网站进行部署,好比Apache, Nginx, lighttpd等,本篇将利用nginx和uWSGI部署Django网站项目。html
nginx是一个HTTP服务器,也是一个反向代理服务器,由基础模块、核心模块、第三方模块构成,与Apache相比更轻量级,占用更少的内存及资源。前端
WSGI(Python Web Server GateWay Interface): WSGI是一种Web服务器网关接口。它是一个Web服务器(如nginx)与应用服务器(如uWSGI服务器)通讯的一种规范。因为WSGI的通用性,出现了独立的WSGI程序,例如uWSGI和Apacke的mod_wsgi。python
uWSGI: 是一个Web服务器,它实现了WSGI协议、uwsgi、http等协议。用于接收前端服务器转发的动态请求并处理后发给 web 应用程序。nginx
uwsgi: 是uWSGI服务器实现的独有的协议。git
前面4.1小结,咱们利用在/var/www/下git clone了一个空仓库,假设名为”com.test.blog“,其实是一个进行了git初始化的空文件夹。web
$ sudo -s // 得到root权限 $ cd /var/www/com.test.blog // 进入项目文件夹 $ virtualenv env --python=python2.7 \ --no-site-packages // 建立名为env的python空环境
若是产生以下报错,说明服务器语言未设置。数据库
locale.Error: unsupported locale settingdjango
则先执行vim
$ export LC_ALL=C
后再次执行上述命令。浏览器
启用env环境。
$ source env/bin/activate // 启用环境
安装支持python2.7的Django 1.11。
$ pip install Django==1.11 $ django-admin --version
$ django-admin startproject test_nginx // 建立名为“test_nginx”的Django项目
Django会用模板建立一个名为“test_nginx”的默认项目。
利用Django自带的测试服务器来直接处理客户端的http访问请求,测试Django可否正常工做。
注意,首先要修改settings.py配置文件,添加ALLOWED_HOSTS,不然会报错。
进入./test_nginx/test_nginx,利用vim修改settings.py中的“ALLOWED_HOSTS”。
...
ALLOWED_HOSTS = ['*'] // 容许全部地址
...
这样能够在本地直接利用服务器ip和端口访问网页了。
运行Django Server(Ctrl + C 结束运行)。
$ pwd // 当前路径 /var/www/com.test.blog/test_nginx $ python manage.py runserver 0.0.0.0:8000 // 8000端口,启用Django服务器
本地浏览器输入”服务器IP:8000”,显示
在env虚拟环境下使用pip安装。
$ pip install uwsgi $ uwsgi --version // 显示uwsgi安装版本
新建test.py文件,内容以下:
def application(env, start_response): start_response('200 OK', [('Content-Type','text/html')]) return "Hello World from uWSGI"
终端运行:
$ uwsgi --http :8000 --wsgi-file test.py
本地浏览器刷新页面,显示
利用uWSGI做为服务器处理http请求,并经过wsgi传递给Django模块。
终端运行:
$ pwd /var/www/com.test.blog/test_nginx $ uwsgi --http :8000 --module test_nginx.wsgi
本地浏览器刷新页面,显示
$ sudo apt install nginx
启动nginx服务器
$ sudo service nginx start
中止nginx服务器
$ sudo service nginx stop
查看nginx服务的状态
$ sudo service nginx status
重启nginx服务器
$ service nginx restart
启动nginx服务器后,本地浏览器输入”服务器IP:80”,以下图显示说明nginx工做正常。
服务器端nginx,uWSGI和Django彼此之间已经能够独立工做,下半篇将修改配置文件,真正使nginx做为Django网站项目的代理服务器。