昨天发布了gunicorn部署python的Web应用,还有另外一个成熟的部署模块uWSGI,也能完成从python的Web应用,到Web服务器之间的连接,它们之间各有千秋。今天风云给大家详细讲讲uWSGI。
uWSGI 是一个功能强大又高效的 WSGI 应用服务器,支持丰富的功能和优化选项,支持多种协议,非常适合高性能的 Python Web 应用部署(如 Flask 和 Django)。结合 Nginx 和 uWSGI 的配置,可以实现高效的 Web 服务架构。
一、uWSGI 的核心概念
- WSGI 标准:uWSGI 是一个 WSGI 服务器,用于运行 Python Web 应用。
- uWSGI 协议:uWSGI 自带高效的专有协议,适用于与 Nginx 的通信。
- 模块化设计:支持插件式架构,可扩展性强。
以下是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