Gunicorn(Green Unicorn 的缩写)是一个 Python WSGI HTTP服务器,用于运行Python的Web应用,特别是像 Flask、Django 这类基于WSGI协议的框架。
一句话定义:
Gunicorn 是一个用于将 Python Web 应用部署到生产环境的高性能 HTTP 服务器。
它的作用:
开发时,我们通常使用 Flask 或 Django 自带的开发服务器运行项目,但这些服务器并不适合上线使用,因为它们:
- 不稳定
- 性能差
- 缺乏并发支持
Gunicorn 作为生产环境的服务工具,解决了这些问题。
特点:
- 兼容性好:支持 WSGI,几乎所有主流 Python Web 框架都能搭配它使用。
- 多进程模型:可以设置多个 worker(工作进程),提高并发性能。
- 轻量:依赖少,易于配置和部署。
- 可搭配反向代理:常与 Nginx 搭配使用,处理静态文件、负载均衡等。
基本使用方式(以 Flask 为例):
gunicorn app:app
其中 app:app
表示:
- 第一个
app
是 Python 文件名(不带.py
后缀) - 第二个
app
是 Flask 应用对象名
常见参数:
gunicorn -w 4 -b 127.0.0.1:8000 app:app
-w 4
:开启 4 个 worker 进程-b
:绑定地址和端口(默认是127.0.0.1:8000
)
Gunicorn与Nginx组合
Gunicorn 和 Nginx 的组合是 Python Web 应用上线部署的经典方案。下面是 一步步的部署流程,以 Flask + Gunicorn + Nginx + Ubuntu 为例:
一、项目结构(示例):
myproject/
├── app.py # Flask 应用
├── venv/ # 虚拟环境(可选)
└── requirements.txt
二、安装依赖
在虚拟环境中(或全局)安装 Flask 和 Gunicorn:
pip install flask gunicorn
三、测试 Gunicorn 运行
假设 app.py
内容如下:
from flask import Flask
app = Flask(__name__)
@app.route("/")
def hello():
return "Hello from Flask!"
运行 Gunicorn:
gunicorn -w 4 -b 127.0.0.1:8000 app:app
然后访问 http://127.0.0.1:8000/
,应看到你的应用返回的内容。
四、配置 Nginx
编辑 Nginx 配置文件(如 /etc/nginx/sites-available/myproject
):
server {
listen 80;
server_name your_domain_or_ip;
location / {
proxy_pass http://127.0.0.1:8000;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
}
然后启用配置:
sudo ln -s /etc/nginx/sites-available/myproject /etc/nginx/sites-enabled/
sudo nginx -t
sudo systemctl reload nginx
五、可选:将 Gunicorn 配置为 systemd 服务(守护进程)
创建文件 /etc/systemd/system/myproject.service
:
[Unit]
Description=Gunicorn instance to serve myproject
After=network.target
[Service]
User=www-data
Group=www-data
WorkingDirectory=/home/youruser/myproject
ExecStart=/home/youruser/myproject/venv/bin/gunicorn -w 4 -b 127.0.0.1:8000 app:app
[Install]
WantedBy=multi-user.target
启动并开机自启:
sudo systemctl start myproject
sudo systemctl enable myproject
六、总结结构图:
客户端 ---> Nginx ---> Gunicorn ---> Flask 应用
- Nginx:作为反向代理服务器,负责接收外部请求,转发给 Gunicorn
- Gunicorn:作为 WSGI HTTP 服务器,处理 Python Web 应用
- Flask/Django:编写业务逻辑