Bootstrap

使用uWSGI部署Python Web应用完整指南

昨天发布了gunicorn部署python的Web应用,还有另外一个成熟的部署模块uWSGI,也能完成从python的Web应用,到Web服务器之间的连接,它们之间各有千秋。今天风云给大家详细讲讲uWSGI。

uWSGI 是一个功能强大又高效的 WSGI 应用服务器,支持丰富的功能和优化选项,支持多种协议,非常适合高性能的 Python Web 应用部署(如 Flask 和 Django)。结合 Nginx 和 uWSGI 的配置,可以实现高效的 Web 服务架构。

一、uWSGI 的核心概念

  1. WSGI 标准:uWSGI 是一个 WSGI 服务器,用于运行 Python Web 应用。
  2. uWSGI 协议:uWSGI 自带高效的专有协议,适用于与 Nginx 的通信。
  3. 模块化设计:支持插件式架构,可扩展性强。

以下是uWSGI的逻辑关系

二、安装 uWSGI

安装 uWSGI

使用 pip 安装:

pip install uwsgi

验证安装:

uwsgi --version

三、用 uWSGI 部署 Flask 应用

1. 创建 Flask 应用

创建 app.py:

from flask import Flask

app = Flask(__name__)

@app.route('/')def home():

    return "Hello, uWSGI!"

if __name__ == "__main__":

    app.run()

2. 使用 uWSGI 启动 Flask 应用

运行以下命令:

uwsgi --http 127.0.0.1:8000 --wsgi-file app.py --callable app --processes 4 --threads 2

  • --http:指定 HTTP 监听地址和端口。
  • --wsgi-file:指定包含应用的文件。
  • --callable:指定 WSGI 应用的实例名。
  • --processes:工作进程数量。
  • --threads:每个进程的线程数量。

访问 http://127.0.0.1:8000,你会看到 "Hello, uWSGI!"。

四、用 uWSGI 部署 Django 应用

1. 创建 Django 项目

创建 Django 项目并运行开发服务器:

django-admin startproject myprojectcd myproject

python manage.py runserver

2. 配置 uWSGI 启动

运行以下命令:

uwsgi --http :8000 --module myproject.wsgi:application --processes 4 --threads 2

  • --module:指向 Django 项目的 WSGI 模块。

五、优化配置文件

使用 uWSGI 配置文件

创建 uwsgi.ini:

[uwsgi]# 监听地址和端口http = 0.0.0.0:8000

# 指定 WSGI 模块module = myproject.wsgi:application

# 工作进程数processes = 4

# 每个进程的线程数threads = 2

# 启用主进程master = true

# PID 文件pidfile = /tmp/uwsgi.pid

# 日志文件daemonize = /var/log/uwsgi.log

启动 uWSGI:

uwsgi --ini uwsgi.ini

六、与 Nginx 配合部署

1. 安装 Nginx

sudo apt update

sudo apt install nginx

2. 配置 Nginx

编辑 /etc/nginx/sites-available/myproject:

server {

    listen 80;

    server_name example.com;

    location / {

        include uwsgi_params;

        uwsgi_pass 127.0.0.1:8000;

    }

    location /static/ {

        alias /path/to/staticfiles/;

    }

}

启用配置:

sudo ln -s /etc/nginx/sites-available/myproject /etc/nginx/sites-enabled

sudo systemctl restart nginx

七、将 uWSGI 配置为后台服务

使用 systemd 配置服务

创建 /etc/systemd/system/uwsgi.service:

[Unit]Description=uWSGI Daemon for DjangoAfter=network.target

[Service]User=www-dataGroup=www-dataWorkingDirectory=/path/to/myprojectExecStart=/usr/local/bin/uwsgi --ini /path/to/uwsgi.ini

[Install]WantedBy=multi-user.target

启动并启用服务:

sudo systemctl start uwsgi

sudo systemctl enable uwsgi

八、uWSGI 高级功能

1. 热重启应用

uWSGI 支持在不中断服务的情况下重启应用:

kill -HUP $(cat /tmp/uwsgi.pid)

2. 设置超时时间

避免长时间未响应请求导致资源浪费:

harakiri = 30

3. 设置缓存

uWSGI 提供内置缓存功能:

cache2 = name=mycache,items=1000,blocksize=1kcache2-getter = mycache

九、性能调优

调整工作进程和线程数 根据服务器硬件配置选择合适的进程和线程数。

processes = 8threads = 4

使用异步模式 适合 IO 密集型应用:

enable-threads = true

使用 uWSGI 专有协议 配合 Nginx 提高性能:

socket = 127.0.0.1:8000

开启日志记录 监控访问日志和错误日志:

daemonize = /var/log/uwsgi.log

;