Uwsgi 生产环境 部署 Nginx + Django

8 篇文章 0 订阅
2 篇文章 0 订阅
Uwsgi

​ 首先弄清下面几个概念:

  • WSGI:全称是 Web Server Gateway Interface,WSGI 不是服务器,python 模块,框架,API 或者任何软件。只是一种规范,描述 。
  • uwsgi:与WSGI一样,是uWSGI服务器的独占通信协议,用于定义传输信息的类型(type of information)。每一个uwsgi packet前4byte为传输信息类型的描述,与WSGI协议是两种东西,据说该协议是fcgi协议的10倍快。
  • uWSGI:是一个全功能的HTTP服务器,实现了 WSGI协议,uwsgi协议,http

​ Django 使用 runserver 可以使我们的 django 项目在本地运行起来,在生产环境部署 django ,需要考虑一些问题,比如静态文件处理、安全、效率等。这样用 Django 自带的服务器效果就不是很好了,我们需要使用 Nginx 通过 Uwsgi 把 Django 跑起来。


安装 uwsgi

​ uwsgi 是 python 的一个模块,安装只需简单的 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"
$ uwsgi --http :8001 --wsgi-file test.py    ##打开浏览器 可以考到对应的效果
Django项目

​ 首先,我们要有一个可以运行的 Django 项目,如果你不知道怎么运行 Django 项目,本博主近期会推出一个介绍 Django的博客,希望大家可以继续关注。

系统环境


  • Centos 7.2

  • python 2.7

  • Django 1.11

  • Nginx 1.12

  • uwsgi 2.0.17

  • IP 192.168.1.211

    已经安装好的 Django 服务器位于 /usr/web 目录下,项目结构如下图所示:

web
├── db.sqlite3
├── deploy
│   ├── admin.py
│   ├── admin.pyc
│   ├── __init__.py
│   ├── __init__.pyc
│   ├── migrations
│   │   ├── __init__.py
│   │   └── __init__.pyc
│   ├── models.py
│   ├── models.pyc
│   ├── tests.py
│   ├── views.py
│   └── views.pyc
├── html
│   └── table.html
├── manage.py
├── static
└── web
    ├── __init__.py
    ├── __init__.pyc
    ├── settings.py
    ├── settings.pyc
    ├── urls.py
    ├── urls.pyc
    ├── wsgi.py
    └── wsgi.pyc

​ 我们在 html 文件 文件夹新建了一个 table.html 文件,下面我们通过 Django 的 runserver 命令来启动这个服务器。

$web python manage.py runserver 0:7000     

​ 我们打开浏览器,输入 192.168.1.211:7000/table.html,如下图我们可以看到页面可以正常显示,如果这一步你都做不出来,建议先去补习一下 Django 方面的知识,接下来我们将用 Uwsgi 启动这个项目。

这里写图片描述

Uwsgi 启动
命令启动
  • 进入 Django 项目

    $web uwsgi --http 192.168.1.211:8080 --file web/wsgi.py --static-map=/static=static
    
    • http :指定端口
    • file :指定文件
    • static-map :静态文件

    我们打开浏览器,如下图所示,可以看到也是可以正常启动的。

这里写图片描述

配置文件启动
  • 在django项目同级目录创建script目录,用于存放配置脚本等等

  • 进入/script目录,创建一个uwsgi.ini文件

    # uwsig使用配置文件启动
    [uwsgi]
    # 项目目录
    chdir=/usr/web/
    # 指定项目的application
    module=web.wsgi:application
    # 指定sock的文件路径       
    socket=/usr/web/script/uwsgi.sock
    # 进程个数       
    workers=5
    pidfile=/usr/web/script/uwsgi.pid
    # 指定IP端口       
    http=192.168.1.211:8080
    # 指定静态文件
    static-map=/static=/usr/web/static
    # 启动uwsgi的用户名和用户组
    uid=root
    gid=root
    # 启用主进程
    master=true
    # 自动移除unix Socket和pid文件当服务停止的时候
    vacuum=true
    # 序列化接受的内容,如果可能的话
    thunder-lock=true
    # 启用线程
    enable-threads=true
    # 设置自中断时间
    harakiri=30
    # 设置缓冲
    post-buffering=4096
    # 设置日志目录
    daemonize=/usr/web/script/uwsgi.log
    
  • $ uwsgi --ini uwsgi.ini
    [uWSGI] getting INI configuration from uwsgi.ini
    [uwsgi-static] added mapping for /static => /usr/web/static
    
  • uwsgi 的日志文件会生成在相应文件夹

Nginx 配置

​ 接下来的工作是我们的最后一步,我们要把 Nginx 与上述服务器 对接起来,其实很简单,只需要修改配置文件就好了。如下图所示,我们添加location。

        location ^~ /table {
            include  uwsgi_params;
            uwsgi_read_timeout 30;
            uwsgi_pass unix:/usr/web/script/uwsgi.sock;
        }
        location /static/ {
        	alias /usr/web/static/;
        	index index.html index.htm;
        }

​ 然后重启 Nginx,接下来打开 Nginx 对应页面,我们就可以看到我们的页面啦。

$ ./sbin nginx -t
$ ./sbin nginx -s reload

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值