Gunicorn介绍

半兽人 发表于: 2025-05-08   最后更新时间: 2025-05-08 11:34:01  
{{totalSubscript}} 订阅, 17 游览

GunicornGreen 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:编写业务逻辑
更新于 2025-05-08
在线,4小时前登录

查看python更多相关的文章或提一个关于python的问题,也可以与我们一起分享文章