uWSGI是一个Web服务器网关接口,用于将Python Web应用与Web服务器连接。它支持多种协议,性能出色,是部署Python Web应用的重要工具。
在开始安装uWSGI之前,需要先安装必要的依赖包。
对于Ubuntu或Debian系统,打开终端执行:
sudo apt-get update
sudo apt-get install build-essential python-dev python-pip这些依赖包为编译和安装uWSGI提供必要环境。
这是最简单的安装方式:
pip install uwsgi如果系统中有多个Python版本,可以使用pip3:
pip3 install uwsgi如果需要最新版本或特定功能,可以从源码编译安装:
# 下载源码
wget https://projects.unbit.it/downloads/uwsgi-latest.tar.gz
# 解压
tar zxvf uwsgi-latest.tar.gz
# 进入目录
cd uwsgi-latest
# 编译
make编译完成后,当前目录会生成uwsgi可执行文件,可以复制到系统路径:
sudo cp uwsgi /usr/local/bin/我们从一个简单的示例开始,创建hello.py文件:
def application(env, start_response):
start_response('200 OK', [('Content-Type', 'text/html')])
return [b"<h1>Hello World from uWSGI!</h1>"]这个简单的应用接收请求后返回"Hello World"。
启动uWSGI服务器:
uwsgi --http :8000 --wsgi-file hello.py现在打开浏览器访问 http://localhost:8000,就能看到Hello World页面。
默认情况下uWSGI使用单进程单线程。对于生产环境,需要配置更多进程和线程。
uwsgi --http :8000 --wsgi-file hello.py --master --processes 4 --threads 2这个命令启动4个工作进程,每个进程有2个线程,适合多核CPU服务器。
uWSGI提供统计信息接口,方便监控运行状态:
uwsgi --http :8000 --wsgi-file hello.py --master --processes 4 --threads 2 --stats 127.0.0.1:9191安装uwsgitop来查看监控数据:
pip install uwsgitop
uwsgitop 127.0.0.1:9191在生产环境中,uWSGI通常与Nginx配合使用。Nginx处理静态文件,uWSGI处理Python动态请求。
在Nginx配置文件中添加:
server {
listen 80;
server_name your_domain.com;
location / {
include uwsgi_params;
uwsgi_pass 127.0.0.1:3031;
}
location /static {
alias /path/to/your/static/files;
}
}使用socket模式与Nginx通信:
uwsgi --socket 127.0.0.1:3031 --wsgi-file hello.py --master --processes 4 --threads 2假设Django项目路径为/home/user/myproject,部署命令如下:
uwsgi --socket 127.0.0.1:3031 --chdir /home/user/myproject --module myproject.wsgi --master --processes 4 --threads 2关键参数说明:
--chdir:指定项目根目录
--module:指定WSGI模块,通常是项目名.wsgi
创建uwsgi.ini配置文件:
[uwsgi]
socket = 127.0.0.1:3031
chdir = /home/user/myproject
module = myproject.wsgi
master = true
processes = 4
threads = 2
vacuum = true
max-requests = 1000然后使用配置文件启动:
uwsgi uwsgi.ini创建Flask应用文件myapp.py:
from flask import Flask
app = Flask(__name__)
@app.route('/')
def hello():
return '<h1>Welcome to Flask with uWSGI</h1>'
@app.route('/about')
def about():
return '<p>This is an about page</p>'
if __name__ == '__main__':
app.run(debug=True)部署Flask应用:
uwsgi --socket 127.0.0.1:3031 --wsgi-file myapp.py --callable app --processes 4 --threads 2注意这里使用了--callable app参数,指定Flask应用实例。
开发时启用热重载,修改代码后自动重启:
uwsgi --socket 127.0.0.1:3031 --wsgi-file myapp.py --callable app --py-auto-reload 2配置访问日志和错误日志:
[uwsgi]
socket = 127.0.0.1:3031
wsgi-file = myapp.py
callable = app
processes = 4
threads = 2
# 日志配置
logto = /var/log/uwsgi/myapp.log
log-format = %(addr) - %(user) [%(ltime)] "%(method) %(uri) %(proto)" %(status) %(size) "%(referer)" "%(uagent)"设置Python路径和环境变量:
[uwsgi]
socket = 127.0.0.1:3031
chdir = /path/to/your/app
wsgi-file = app.py
pythonpath = /path/to/your/app
env = DJANGO_SETTINGS_MODULE=myproject.settings.production进程数设置:通常设置为CPU核心数的2-3倍
线程数设置:根据应用特性,I/O密集型可设置较多线程
内存管理:使用--reload-on-rss限制内存使用
请求超时:设置--harakiri参数处理超时请求
[uwsgi]
socket = 127.0.0.1:3031
wsgi-file = app.py
processes = 8
threads = 4
max-requests = 1000
harakiri = 30
reload-on-rss = 200如果使用低端口,可能需要root权限:
sudo uwsgi --http :80 --wsgi-file app.py确保Python路径正确,可以使用--pythonpath指定:
uwsgi --socket :3031 --wsgi-file app.py --pythonpath /path/to/your/app确保Nginx正确配置静态文件路径,uWSGI不擅长处理静态文件。
uWSGI是部署Python Web应用的强大工具。通过合理配置,可以提供稳定的生产环境服务。从简单的单应用到复杂的多进程部署,uWSGI都能很好胜任。
记住在开发时使用调试模式,在生产环境使用配置文件,并配合Nginx等Web服务器使用,这样才能发挥最佳性能。
本文内容仅供个人学习/研究/参考使用,不构成任何决策建议或专业指导。分享/转载时请标明原文来源,同时请勿将内容用于商业售卖、虚假宣传等非学习用途哦~感谢您的理解与支持!