uWsgi 安装配置

如何部署简单的 WSGI 应用和常见的 Web 框架

yum install build-essential gcc python-dev python-devel -y

pip 安装uwsgi ( 安装完后,会放在 /etc/uwsgi.ini )

pip3 install uwsgi

安装 uWsgi

1、获取uwsgi;目前最新版本是2.0.11.1

wget http://projects.unbit.it/downloads/uwsgi-latest.tar.gz

2、编译安装;我是用python 3.6 编译的

tar zxf uwsgi-latest.tar.gz
cd uwsgi-2.0.11.1/
python3 uwsgiconfig.py --build
python3 setup.py install
uwsgi --version

测试uWsgi是否正常

从一个简单的 "Hello World" 开始,当前django项目下创建文件 foobar.py,代码如下

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

uWsgi Python 加载器将会搜索的默认函数 application

接下来我们启动 uWsgi 来运行一个 HTTP 服务器,将程序部署在HTTP端口 8088(端口可以自己选择)

uwsgi --http 127.0.0.1:8088 --wsgi-file foobar.py

添加并发和监控

默认情况下,uWsgi 启动一个单一的进程和一个单一的线程。

你可以用 --processes 选项添加更多的进程,或者使用 --threads 选项添加更多的线程 ,也可以两者同时使用

uwsgi --http 127.0.0.1:8088 --wsgi-file foobar.py --master --processes 4 --threads 2

以上命令将会生成 4 个进程, 每个进程有 2 个线程。

如果你要执行监控任务,可以使用 stats 子系统,监控的数据格式是 JSON

uwsgi --http 127.0.0.1:8088 --wsgi-file foobar.py --master --processes 4 --threads 2 --stats 127.0.0.1:8089

我们可以安装 uwsgitop(类似 Linux top 命令) 来查看监控数据

pip3 install uwsgitop

结合 Web 服务器使用

我们可以将 uWsgi 和 Nginx Web 服务器结合使用,实现更高的并发性能。

一个常用的nginx配置如下

vim /usr/local/nginx/conf/nginx.conf
location / {
    include uwsgi_params;
    uwsgi_pass 127.0.0.1:8088;
}


# uwsgi在Nginx下的配置 
cat -n /usr/local/nginx/conf/nginx.conf
server {
    listen 80;
    server_name 域名;

    location / {
        include  uwsgi_params;             # 包含uwsgi的请求参数
        uwsgi_pass  uwsgi服务器的ip:port;   # 转发请求给uwsgi
                uwsgi_read_timeout 2;
    }
}

特别注意:uwsgi_params在nginx文件夹下自带,uwsgi_pass一定要跟uwsgi_conf.ini中写的地址完全一致,然后启动nginx,以上代码表示使用 nginx 接收的 Web 请求传递给端口为 8088 的 uWSGI 服务来处理。

ls /etc/nginx/ |grep uwsgi
uwsgi_params
uwsgi_params.default

现在,我们可以生成 uWsgi 来本地使用 uwsgi 协议

uwsgi --socket :8088 --wsgi-file foobar.py --master --processes 4 --threads 2 --stats :8090

如果你的 Web 服务器使用 HTTP,那么你必须告诉 uWsgi 本地使用 http 协议 (这与会自己生成一个代理的–http不同)

uwsgi --http-socket :8088 --wsgi-file foobar.py --master --processes 4 --threads 2 --stats :8090

访问 http://域名:8088

提示:IP地址 : 端口 (IP地址看个人需求 可填指定IP访问,填无是开放IP)

部署 Django

Django 是最常使用的 Python web 框架,假设 Django 项目位于 /data/website/website/:

安装uWsgi地址:

uwsgi --socket 127.0.0.1:8088 --chdir  /data/website/website/ --wsgi-file website/test.py --master --processes 4 --threads 2 --stats 127.0.0.1:8089

--chdir 用于指定项目路径

uwsgi.ini 配置文件

# 可以把Django项目,把以上命令弄成一个 uwsgi.ini 配置文件
[uwsgi]
chdir           = /data/pythonData01/pythonTest01/
module          = pythonTest01.wsgi
home            = /data/pythonData01/pythonTest01/venv_data01
processes       = 3
pidfile         = /data/pythonData01/pythonTest01/uwsgi.pid     
socket          = 0.0.0.0:8090    
master          = true
vacuum          = true

接下来你只需要执行以下命令即可

# 启动
uwsgi --ini uwsgi.ini    

# 重启         
uwsgi --reload uwsgi.pid   # ini配置文件,需要添加pidfile = ../uwsgi.pid  pid文件

# 关闭         
uwsgi --stop uwsgi.pid          

uwsgi ini 配置

[uwsgi]
# 指定IP端口  // 直接外部访问
http-socket = 0.0.0.0:8080

#项目目录
chdir = /www/wwwroot/web/

#指定项目的application
module = web.wsgi:application

#uwsgi启动用户名和用户组
uid = www
gid = www

#启用主进程
master = true

#指定Socket路径    
socket = /www/wwwroot/web/script/uwsgi.sock # //内部访问  权限和nginx一样
socket = 0.0.0.0:8080   # 是用于和Nginx结合部署的unix-socket参数,可以nginx.conf配置下添加这IP地址

# socket权限设置
chmod-socket = 755

#进程个数
processes = 5
pidfile = /www/wwwroot/web/script/uwsgi.pid


#自动移除unix Socket 和 Pid 文件 当服务停止的时候
vacuum = true

#序列化接受的内容,如果可能的话
thunder-lock = true

#启用线程
enable-threads = true

#设置自动中断时间
harakiri = 30

#设置缓冲
post-buffering = 4096

#设置静态文件
static-map = /static=//www/wwwroot/mysite/static

#设置日志目录
daemonize = /www/wwwroot/mysite/uwsgi.log  

supervisor管理uWsgi

1、安装supervisor

yum install -y supervisor

2、生成配置

echo_supervisord_conf > ./supervisord.conf

3、修改supervisor的配置文件,添加管理项目的任务

vim ./supervisord.conf
..添加到最下行
[program:pythonTest01]
command=/data/pythonData01/pythonTest01/venv_data01/bin/uwsgi --ini /data/pythonData01/pythonTest01/uwsgi.ini
startsecs=10          # 启动十秒后没有异常退出,表示正常启动。默认是1秒
autostart=true        # 在supervisord启动的时候,也会自动启动
autorestart=true      # 程序退出后自动重启,可选值:[ unexpected,true,false ],默认为unexpected,表示进程意外杀死后才重启
stopasgroup=true      # 默认为 false 进程被杀死时,是否向这个进程组发送stop信号,包括子进程
killasgroup=true      # 默认为 false ,向进程组发送 kill 信号,包括子进程

4、启动,默认就会直接启动uWsgi

supervisord -c ./supervisord.conf

5、检查进程supervisor信息

(venv_data01) [root@node01 pythonTest01]# ps -ef|grep supervisor
root      2400     1  0 11:56 ?        00:00:00 /usr/bin/python /usr/bin/supervisord -c ./supervisord.conf
root      2418 32428  0 11:56 pts/0    00:00:00 grep --color=auto supervisor
(venv_data01) [root@node01 pythonTest01]# ps -ef|grep uwsgi
root      2401  2400  0 11:56 ?        00:00:00 /data/pythonData01/pythonTest01/venv_data01/bin/uwsgi --ini /data/pythonData01/pythonTest01/uwsgi.ini
root      2403  2401  0 11:56 ?        00:00:00 /data/pythonData01/pythonTest01/venv_data01/bin/uwsgi --ini /data/pythonData01/pythonTest01/uwsgi.ini
root      2404  2401  0 11:56 ?        00:00:00 /data/pythonData01/pythonTest01/venv_data01/bin/uwsgi --ini /data/pythonData01/pythonTest01/uwsgi.ini
root      2405  2401  0 11:56 ?        00:00:00 /data/pythonData01/pythonTest01/venv_data01/bin/uwsgi --ini /data/pythonData01/pythonTest01/uwsgi.ini
root      2425 32428  0 11:57 pts/0    00:00:00 grep --color=auto uwsgi

6、进度supervisor任务管理终端

# 进supervisor终端里面
(venv_data01) [root@node01 pythonTest01]# supervisorctl -c ./supervisord.conf 
pythonTest01                     RUNNING   pid 2401, uptime 0:20:33
supervisor> 
status   # 查看进程运行状态
start    # 进程名 启动进程
stop     # 进程名 关闭进程
restart  # 进程名 重启进程
update   # 重新载入配置文件
shutdown # 关闭supervisord
clear    # 进程名 清空进程日志

7、supervisor的客户端部分命令:

# 不进supervisor终端里面,使用命令
supervisorctl status 查看进程运行状态
supervisorctl start 进程名 启动进程
supervisorctl stop 进程名 关闭进程
supervisorctl restart 进程名 重启进程
supervisorctl update 重新载入配置文件
supervisorctl shutdown 关闭supervisord
supervisorctl clear 进程名 清空进程日志
supervisorctl 进入到交互模式下。使用help查看所有命令
start stop restart + all 表示启动,关闭,重启所有进程
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
禁止转载,如需转载请通过简信或评论联系作者。
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 219,110评论 6 508
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,443评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 165,474评论 0 356
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,881评论 1 295
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,902评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,698评论 1 305
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,418评论 3 419
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,332评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,796评论 1 316
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,968评论 3 337
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,110评论 1 351
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,792评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,455评论 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,003评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,130评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,348评论 3 373
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,047评论 2 355

推荐阅读更多精彩内容