当咱们在用django开发的web项目时,开发测试过程当中用到的是django自带的测试服务器,因为其安全及稳定等性能方面的局限性,django官方并不建议将测试服务器用在实际生产。前端
nginx+uwsgi+django是咱们经常使用的django部署方式。nginx做为最前端的服务器,他负责接收全部的客户端请求,对于请求的静态文件,由nginx服务器本身完成,由于它具备很好处理静态文件的能力,性能进行过优化,支持高并发量;uWSGI服务器做为支持服务器,是用来服务nginx的,nginx将请求的动态文件交给uWSGI进行处理。uWSGI实现了uwsgi、wsgi和http协议,uwsgi协议是uWSGI自定义的协议,定义的是框架(django)和服务器对接的接口。python
下面以阿里云ubuntu部署为例:nginx
1、 安装python虚拟环境及项目所需python包:web
1.安装virtualenv和virtualenvwrapperdjango
pip install virtualenvubuntu
pip install virtualenvwrappervim
2.建立虚拟环境安全
命令: mkvirtualenv [env_name]服务器
$: mkvirtualenv -p python3 django_env_py3 (可指定用python3)并发
虚拟环境相关命令: workon 进入虚拟环境 deactivate 退出虚拟环境 rmvirtualenv 删除虚拟环境
3. 安装项目所需python包:
按包名单个安装: $: pip install 包名
批量安装:
$: pip freeze > env_requirement.txt
$: pip install -r renv_requirement.txt
2、uWSGI服务器部署:
已经安装好uwsgi后(pip install uwsgi),只须要增长配置, 告诉uWSGI-server的框架入口函数在哪,就能让django和uWSGI服务器对接上。
1. 在django项目的setting.py文件的同级目录下,增长一个配置文件 uwsgi.ini
2. 对配置文件进行配置
[uwsgi]
# 配置服务器的监听ip和端口,让uWSGI做为nginx的支持服务器的话,设置socke就行;若是要让uWSGI做为单独的web-server,用http
# http = 127.0.0.1:3309
socket = 127.0.0.1:3309
# 配置项目目录(此处设置为项目的根目录)
chdir = /home/python/Desktop/my_pro
# 配置入口模块 (django的入口函数的模块,即setting同级目录下的wsgi.py)
wsgi-file = my_pro/wsgi.py
# 开启master, 将会多开一个管理进程, 管理其余服务进程
master = True
# 服务器开启的进程数量
processes = 2
# 以守护进程方式提供服, 输出信息将会打印到log中
daemonize = wsgi.log
# 服务器进程开启的线程数量
threads = 4
# 退出的时候清空环境变量
vacuum = true
# 进程pid
pidfile = uwsgi.pid
# 配uWSGI搜索静态文件目录(及django项目下咱们存放static文件的目录,用uWSGI做为单独服务器时才须要设置,此时咱们是用nginx处理静态文件)
# check-static = /home/python/Desktop/ttsx
3. 启动uWSGI服务器
在配置文件uwsgi.ini所在目录下,用咱们刚才配置好的配置文件启动uWSGI:
$: uwsgi --ini uwsgi.ini
3、nginx服务器部署:
uWSGI服务器已经部署好了,咱们只须要安装并启动nginx,而后将nginx服务器的动态文件请求转发给uWSGI服务器,将静态文件请求交给本身来处理。
1. 安装nginx:
需下载准备好nginx的包文件, 以及nginx安装依赖库的包文件OPENSSL:
a. 首先安装nginx所依赖的库: PCRE
$: sudo apt-get install libpcre3 libpcre3-dev
b. 安装OPENSSL库,下载地址https://www.openssl.org/source/
下载将其解压文件放到/usr/local/lib/openssl-1.0.2l目录下
$: /usr/local/lib/openssl-1.0.2l
c. 在这里咱们使用编译的安装nginx,指定将nginx的安装到/ust/opt/目录下。
解压包文件,进入nginx包文件目录:
配置:
$: ./configure --prefix=/opt/nginx --with-openssl=/usr/local/lib/openssl-1.0.21
(--prefix指定nginx的安装目录, --with-openssl指定咱们要使用的openssl版本,也就是咱们刚才安装的路径)
编译: $: make
安装: $: make install
d. 启动nginx:
$: cd /opt/nginx/sbin/
$: ./nginx
相关命令:./nginx -s stop 强制中止 ./nginx -s quit 处理完当前全部链接后中止
./nginx -s reload 从新加载配置文件进行重启 查看进程: ps -ajx | grep nginx
2. 配置nginx:
1. 修改nginx的配置文件
$: vim /opt/nginx/conf/nginx.conf
修改其收到请求处理的两条配置:
location /
{
include uwsgi_params; # 设置将全部请求转发给uwsgi服务器处理
uwsgi_pass: 127.0.0.1:3309; # 指定uwsgi服务器url
}
location /static
{
alias /hom/xxx/xxx/pro_name/static/; # 设置将/static的静态请求交给nginx,并指定静态文件的目录
}
4、admin后台管理界面静态文件配置:
以上,nginx+uWSGI+django已经能够正常运行了,可是登录django的admin后台管理界面,网页的静态文件没法找到。
那是由于咱们在前面设置nginx的静态文件目录时,static目录下通常只是咱们项目应用开发中本身的静态文件,
可是django后台admin用到的静态文件并不在这,因此找不到。因此咱们须要把全部的静态文件打包放在一个目录下。
1. 在项目的根目录下新建一个目录,能够取名为all_static。
2. 在setting.py文件下增长一行配置,指定全部静态文件的根目录:
STATIC_ROOT = os.path.join(BASE_DIR, 'all_static')
3.执行django管理器命令,会自动将咱们项目全部的静态文件放到上面设置的静态文件根目录下:
./managy.pu collectstatic