uwsgi启动django以及uwsgi.ini的配置参数详解

前言

主要通过uwsgi来启动django框架

关于uwsgi的详细讲解也可查看:官方文档说明

1. uwsgi的安装

先安装这个uwsgi,主要通过命令如下:

  • pip install uwsgi

或者可通过源码进行安装:

  • 下载安装包,wget http://projects.unbit.it/downloads/uwsgi-latest.tar.gz
  • 解压缩,tar zxvf uwsgi-latest.tar.gz
  • cd uwsgi-latest
  • 编译执行,make

书写一个测试包:(命名为foobar.py)
具体代码如下:

def application(env, start_response):
    start_response('200 OK', [('Content-Type','text/html')])
    return [b"Hello World"]   

本身上面的代码就是一个应用程序,可通过uwsgi加载器加载。
将其启动在一个http服务器上:uwsgi --http 127.0.0.1:9000 --wsgi-file foorbar.py,以9000的端口进行暴露

之后在本地计算机中以:http://127.0.0.1:9000打开网址即可

关uwsgi的参数比较多,可通过uwsgi --help进行查看
加以多个进程或者多个线程执行,可通过如下参数:

  • processes 进程数
  • threads 线程数

2. nginx配置

uwsgi支持多种与Web服务器集成在一起,处理自已的HTTP请求

生产环境中,一般会配合nginx或apache使用

关于nginx的相关知识点可看我之前的文章:
Nginx从入门到精通(全)
Nginx配置静态网页访问(图文界面)

server {
        # 监听端口
        listen 端口号;
        # 域名或者ip
        server_name xxxx.com;
        charset utf-8;

        client_max_body_size 5M;
        root /usr/share/nginx/www;
        set $BASE_DIR "/home/xx/yy/manong";

        error_log /home/xx/logs/nginx_error.log;
        access_log /home/xx/logs/nginx_access.log;
        proxy_intercept_errors on;

        # 动态请求nginx给uwsgi
        location / {
            # 转发端口必须和uwsgi配置文件中socket端口一致
            uwsgi_pass      manong;
            # 转发请求的参数
            uwsgi_param     Host                    $host;
            uwsgi_param     Via                     "nginx";
            uwsgi_send_timeout 600;
            uwsgi_connect_timeout 600;
            uwsgi_read_timeout 600;
            include       uwsgi_params;
        }

        # 静态资源所在位置,nginx自己处理
        location ^~ /static/ {
            alias /home/xx/static/;
            # 过期时间设置
            expires 1d;
        }
    }

nginx安装完毕后,会有自带一个uwsgi_params文件

这些参数文件主要是:转发请求时要携带的内容(比如查询字符串、请求方法、内容类型等)

修改了配置文件,需要重启nginx服务

3. uwsgi.ini配置

由于上面已经和nginx搭配在一起,所以使用的是socket链接方式
除了socket的连接方式之外还有一种是http方式

[uwsgi]
#项目目录
chdir=/home/xx

home=/home/xx/.virtualenvs/manong/

# 引入的环境变量名
env=DJANGO_SETTINGS_MODULE=manong.settings

#项目中wsgi.py文件的目录,也就是项目目录
wsgi-file=%(chdir)/manong/wsgi.py

# 存放进程编号的文件
pidfile=%(chdir)/logs/uwsgi.pid

#使用 Nginx 连接时使用,Django程序所在服务器地址
socket=%(chdir)/logs/manong.sock

#直接做 Web 服务器使用,Django程序所在服务器地址(以上两者二选一)
# http=ip:端口号

# 启动用户名和用户组
uid=xx
gid=xx

# uwsgi服务器的角色,启用主线程
master=true

# 进程数
processes=16
listen=1024

# 权限设置
chmod-socket=666
logfile-chmod=644

# 自动移除unix Socket 和 Pid 文件 当服务停止的时候
vacuum=true
auto-procname=true
procname-prefix-spaced=manong
disable-logging=true
touch-reload=/home/xx/cgi_reload_file/manong

# 日志文件的输出
daemonize=uwsgi.log

# 指定依赖的虚拟环境
virtualenv=/usr/bin/python


# 缓冲区的大小
buffer-size=32678

以上代码模块是通过socket和nginx进行结合

如果通过http进行结合,nginx就使用不到

[uwsgi]
# 项目目录
chdir=/home/xx/manong

home=/home/xx/.virtualenvs/manong

module=manong.wsgi

virtualenv=/home/xx/.virtualenvs/manong
user=@(exec://whoami)
wsgi-file=manong/wsgi.py
pidfile=%(chdir)/logs/uwsgi.pid


master=true
processes=5
listen=16

# 主要的区分点在于这
http=:19866

# 这部分跟上面差不多
chmod-socket=666
logfile-chmod=644
vacuum=true
auto-procname=true
procname-prefix-spaced=manong
disable-logging=true
touch-reload=%(chdir)/manong/wsgi.py
buffer-size=32768
  • uwsgi 启动项目:uwsgi --ini uwsgi.ini
  • 查看进程:ps aux | grep uwsgi或者使用ps -ef | grep uwsgi

如果想停止运行通过:uwsgi --stop uwsgi的进程号即可


版权声明:本文为weixin_47872288原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。