uWSGI 快速启动服务


uWSGI 快速启动服务

适用于linux 环境

首先确认有python环境

快速安装

# pip 安装
pip install uwsgi

# 原文件下载安装
curl http://uwsgi.it/install | bash -s default /tmp/uwsgi
# (this will install the uWSGI binary into /tmp/uwsgi, feel free to change it).
wget https://projects.unbit.it/downloads/uwsgi-latest.tar.gz
tar zxvf uwsgi-latest.tar.gz
cd <dir>
make

选择 pip 安装 兄弟

最简单的启动服务

一个py文件

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

启动服务

uwsgi --http :9090 --wsgi-file foobar.py

这个简单的例子在实际中不会被使用

添加并发和监测

您可以使用——processes选项添加更多进程,也可以使用——threads选项添加更多线程(或者您可以同时使用这两个选项)。

uwsgi --http :9090 --wsgi-file foobar.py --master --processes 4 --threads 2
# 这将产生4个进程(每个有2个线程),一个主进程(当你的进程死亡时重新启动)和HTTP路由器(之前见过)。

一个重要的任务是监控。理解生产部署中正在发生的事情是至关重要的。stats子系统允许您将uWSGI的内部统计信息导出为JSON

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

放在一个完整的web服务器后面

配合nginx 使用

location / {
    include uwsgi_params;
    uwsgi_pass 127.0.0.1:3031;
}

这意味着通过uwsgi协议将每个请求传递给绑定到3031端口的服务器。现在我们可以衍生uWSGI来本机说uWSGI协议

uwsgi --socket 127.0.0.1:3031 --wsgi-file foobar.py --master --processes 4 --threads 2 --stats 127.0.0.1:9191

前面是作为单独的 服务器 --http 启动 现在和nginx 结合 使用 --socket启动 这时uwsgi 更类似成了nginx 独立扩展

如果你的 代理/web服务器/路由器 通过http ,您必须告诉uWSGI本机使用http协议

uwsgi --http-socket 127.0.0.1:3031 --wsgi-file foobar.py --master --processes 4 --threads 2 --stats 127.0.0.1:9191

一般在webseve 不支持uwsgi 的时候

Django 部署

Django是最常用的Python web框架。部署它非常容易(我们继续配置4个进程,每个进程有2个线程)。

假定项目位置:/home/foobar/myproject

uwsgi --socket 127.0.0.1:3031 --chdir /home/foobar/myproject/ --wsgi-file myproject/wsgi.py --master --processes 4 --threads 2 --stats 127.0.0.1:9191
# 使用——chdir,我们移动到一个特定的目录

命令越来越长了我们生成一个部署文件:

# myuwsgi.ini
[uwsgi]
socket = 127.0.0.1:3031
chdir = /home/foobar/myproject/
wsgi-file = myproject/wsgi.py
processes = 4
threads = 2
stats = 127.0.0.1:9191

清爽的启动

uwsgi myuwsgi.ini

Flask 部署

Flask是一个不怎么好的Python web框架。

下面是一个flask 服务

# myflaskapp.py
from flask import Flask

app = Flask(__name__)

@app.route('/')
def index():
    return "<span style='color:red'>I am app 1</span>"

Flask将它的WSGI函数导出为app,所以我们需要指导uWSGI使用它

uwsgi --socket 127.0.0.1:3031 --wsgi-file myflaskapp.py --callable app --processes 4 --threads 2 --stats 127.0.0.1:9191
# 唯一增加的是——callable选项 当然也可以写成ini 文件启动是一样的