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

  在django框架中,用runserver启动的服务只适合于测试环境。在正式的生产环境中我们需要考虑到静态文件的处理,安全性、效率等问题,本文以uwsgi+Nginx+django为例和大家分享,DJango生产环境的一种部署方式。

   一、基本原理:

  nginx作为服务器最前端,它将接收WEB的所有请求,统一管理请求。nginx把所有静态请求自己来处理(这是NGINX的强项)。然后,NGINX将所有非静态请求通过uwsgi传递给Django,由Django来进行处理,从而完成一次WEB请求。

  uwsgi的作用就类似一个桥接器。起到桥梁的作用。

  准备和环境:

1.本次部署环境使用的Centos7,python3和pip3环境
2.本地可以使用runserver正常启动django项目

二、安装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/

    参数详解:

      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需要可自行权限

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

 

 

转载于:https://www.cnblogs.com/Jack-Kong/p/10120427.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值