Django + Uwsgi + Nginx 的生产环境部署

  在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项目

2、安装uwsgi:

  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就已经搭建完成了

相关文章
相关标签/搜索