在django框架中,用runserver启动的服务只适合于测试环境。在正式的生产环境中咱们须要考虑到静态文件的处理,安全性、效率等问题,本文以uwsgi+Nginx+django为例和你们分享,DJango生产环境的一种部署方式。前端
1、基本原理:python
nginx做为服务器最前端,它将接收WEB的全部请求,统一管理请求。nginx把全部静态请求本身来处理(这是NGINX的强项)。而后,NGINX将全部非静态请求经过uwsgi传递给Django,由Django来进行处理,从而完成一次WEB请求。nginx
uwsgi的做用就相似一个桥接器。起到桥梁的做用。web
准备和环境:django
1. | 本次部署环境使用的Centos7,python3和pip3环境 |
2. | 本地可使用runserver正常启动django项目 |
uwsgi是python的一个模块,安装uwsgi只需简单的pip命令就能够了浏览器
pip3 install uwsgi安全
uwsgi 有两种启动django的方式:1.用命令直接启动,2.用配置文件启动服务器
1.用命令直接启动框架
uwsgi --http :8090 --wsgi-file future/wsgi.py --chdir /data/operational_background/background/future/socket
参数详解:
1. --http: 和runserver相似能够指定监听端口
2. --wsgi-file: 指定uwsgi的加载的文件
3. --chdir: 指定uwsgi的运行目录
当访问服务器的8090端口,返回以下结果时表示已经启动成功了。下图由于将django的DEBUG 设置成了 False才出现的结果,若是出现外网端IP没法访问该端口的状况,请将django中的settings.py文件中的ALLOWED_HOSTS = [] 改为ALLOWED_HOSTS = ['*']
2.手动添加配置文件启动django:
咱们能够在django的同级目录上新建script目录,在script目录下面新建uwsgi.ini文件
编辑uwsgi.ini文件内容以下:
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
|
# uwsig使用配置文件启动
[uwsgi]
# 项目目录
chdir=/data/operational_background/background/future
# 指定项目的加载文件
module=future.wsgi
# 指定socket的监听端口
socket=127.0.0.1:8100
# 设置进程个数
processes = 2
pidfile=/data/operational_background/log/uwsgi.pid
# 指定IP端口(在使用nginx作代理时要注销)
http=192.168.2.108:8090
# 启动uwsgi的用户名和用户组
uid=www
gid=www
# 启用主进程
master=
true
# 自动移除unix Socket和pid文件当服务中止的时候
vacuum=
true
#最大响应数
max-requests = 5000
# 设置日志目录
daemonize=/data/operational_background/log/uwsgi.log
#uwsgi自动重载
py-autoreload=1
|
使用命令/usr/local/python3/bin/uwsgi --ini uwsgi.ini。
当页面能够正常访问则说明启动完成,用命令启停服务并非很方便,这时咱们能够编写配置文件用以控制。在/etc/init.d/目录下新建uwsgi文件,文件具体信息以下:
#! /bin/sh PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin DESC="uwsgi daemon" NAME=uwsgi DAEMON=/usr/local/python3/bin/uwsgi CONFIGFILE=/data/operational_background/background/script/uwsgi.ini PIDFILE=/data/operational_background/log/uwsgi.pid SCRIPTNAME=/etc/init.d/$NAME set -e [ -x "$DAEMON" ] || exit 0 do_start() { $DAEMON $CONFIGFILE || echo -n "uwsgi already running" } do_stop() { $DAEMON --stop $PIDFILE || echo -n "uwsgi not running" rm -f $PIDFILE echo "$DAEMON STOPED." } do_reload() { $DAEMON --reload $PIDFILE || echo -n "uwsgi can't reload" } do_status() { ps aux|grep $DAEMON } case "$1" in status) echo -en "Status $NAME: \n" do_status ;; start) echo -en "Starting $NAME: \n" do_start ;; stop) echo -en "Stopping $NAME: \n" do_stop ;; reload|graceful) echo -en "Reloading $NAME: \n" do_reload ;; *) echo "Usage: $SCRIPTNAME {start|stop|reload}" >&2 exit 3 ;; esac exit 0
这时咱们即可以使用 service uwsgi start/stop 来启停uwsgi了 (注:在/etc/init.d/uwsgi须要可自行权限)
3、nginx + uwsgi+django 相结合:
1.安装nginx
1
|
yum -y install nginx
|
测试是否安装完成,命令启动nginx
1
|
/etc/init.d/nginx start
|
打开浏览器,访问115.159.40.122出现以下页面即表明nginx安装完成且能够正常启动
2.添加nginx虚拟主机
1.建立配置文件,nginx的默认配置目录为/etc/nginx/conf.d
1
|
cd /etc/nginx/conf.d/
|
建立website.conf文件,website的具体信息以下:
server { listen 80; server_name operation.liumang.xyz; proxy_buffer_size 64k; proxy_buffers 32 32k; proxy_busy_buffers_size 128k; location /static { alias /data/operational_background/background/future/static; #设置django的静态文件路径 } location /static/admin { alias /usr/local/python3/lib/python3.6/site-packages/django/contrib/admin/static/admin; #设置django、admin的静态文件路径 } location / { include uwsgi_params;#导入一个nginx的模块,用来处理与uwsgi通信 uwsgi_connect_timeout 30; # 设置链接uWSGI超时时间 uwsgi_pass 127.0.0.1:8100;#指定uwsgi的sock,将全部请求都交给他处理 } }
重启nginx,经过域名operation.liumang.xyz能够访问到django中的内容了,这样咱们的nginx + uwsgi+django就已经搭建完成了