当前位置: 首页 > article >正文

如何用gunicorn部署python的web应用

Gunicorn(Green Unicorn)是一个高性能的 WSGI HTTP 服务器,广泛用于部署 Python Web 应用程序。它负责处理来自客户端的请求,并将这些请求转发给应用程序,同时管理并发和性能问题。下图来源网络,非常清晰地表达了python的web应用与uWSGI协议与web服务器之间的逻辑关系。

一、Gunicorn 的核心概念

  1. WSGI 服务器:gunicorn 实现了 WSGI 标准,用于将客户端请求与 python 应用连接。请注意,gunicorn主要用于在Linux环境下运行。它不能直接运行在Windows平台(可以通过Windows Subsystem for Linux [WSL]来运行)。

  2. 多进程模型:支持多进程工作模式,适合处理多个并发请求。
  3. 易用性:支持各种框架,如 Flask、Django 等,提供灵活的配置选项。

二、安装 Gunicorn

安装 Gunicorn

使用 pip 安装:

pip install gunicorn

验证安装:

gunicorn --version

如果出现:  gunicorn (version 23.0.0)  则表示安装成功

三、用 Gunicorn 部署 Flask 应用

1. 创建 Flask 应用

创建 app.py:

from flask import Flask

app = Flask(__name__)

@app.route('/')

def home():

    return "Hello, Gunicorn!"

if __name__ == "__main__":

    app.run()

2. 使用 Gunicorn 启动 Flask 应用

运行以下命令:

gunicorn -w 4 -b 127.0.0.1:8000 app:app

  • -w 4:指定 4 个工作进程。
  • -b 127.0.0.1:8000:绑定到本地地址和端口。
  • app:app:文件名和 Flask 实例名。

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

四、用 Gunicorn 部署 Django 应用

1. 创建 Django 项目

django-admin startproject myprojectcd myproject

python manage.py runserver

2. 使用 Gunicorn 启动 Django 应用

运行以下命令:

gunicorn -w 4 -b 127.0.0.1:8000 myproject.wsgi:application

  • myproject.wsgi:application:指向 Django 项目的 WSGI 应用。

五、优化 Gunicorn 配置

1. Gunicorn 配置参数

常用参数:

  • -w / --workers:指定工作进程数量,建议为 CPU 核心数 * 2 + 1。
  • -b / --bind:绑定地址和端口。
  • --timeout:设置超时时间(默认 30 秒)。
  • --access-logfile:指定访问日志文件路径。
  • --error-logfile:指定错误日志文件路径。

示例启动命令

gunicorn -w 3 --timeout 120 --access-logfile access.log --error-logfile error.log -b 0.0.0.0:8000 myproject.wsgi:application

2. 使用配置文件

创建 gunicorn_config.py:

bind = "0.0.0.0:8000"

workers = 4

timeout = 120

accesslog = "access.log"

errorlog = "error.log"

loglevel = "info"

使用配置文件启动:

gunicorn -c gunicorn_config.py myproject.wsgi:application

六、与 Nginx 配合部署

安装和配置 Nginx

安装 Nginx:

sudo apt update

sudo apt install nginx

配置 Nginx: 编辑 /etc/nginx/sites-available/myproject:

server {

    listen 80;

    server_name example.com;

    location / {

        proxy_pass http://127.0.0.1:8000;

        proxy_set_header Host $host;

        proxy_set_header X-Real-IP $remote_addr;

        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

        proxy_set_header X-Forwarded-Proto $scheme;

    }

    location /static/ {

        alias /path/to/staticfiles/;

    }

}

启用配置:

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

sudo systemctl restart nginx

七、设置 Gunicorn 为后台服务

使用 systemd 将 Gunicorn 设置为服务。

创建服务文件

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

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

[Service]User=www-dataGroup=www-dataWorkingDirectory=/path/to/myprojectExecStart=/path/to/venv/bin/gunicorn -c /path/to/gunicorn_config.py myproject.wsgi:application

[Install]WantedBy=multi-user.target

启用和启动服务

sudo systemctl start gunicorn

sudo systemctl enable gunicorn

八、性能调优

调整工作进程数量 根据 CPU 核心数设置 workers 参数。

workers = multiprocessing.cpu_count() * 2 + 1

启用线程支持 使用线程提高 IO 密集型应用性能:

gunicorn -w 4 --threads 2 -b 127.0.0.1:8000 myproject.wsgi:application

设置超时 避免长时间任务导致请求失败:

timeout = 120

日志监控 监控访问日志和错误日志,确保服务器运行稳定。

Gunicorn 是一个高性能且易用的 Python WSGI 服务器,结合 Nginx 可以实现高效的 Web 应用部署。根据应用需求选择适当的配置参数,可优化性能和资源使用率。


http://www.kler.cn/a/470021.html

相关文章:

  • 行为模式10.职责链模式
  • 【JAVA】Java开发小游戏 - 简单的2D平台跳跃游戏 基本的2D平台跳跃游戏框架,适合初学者学习和理解Java游戏开发的基础概念
  • 【HarmonyOS 5.0】从0到1开发购物应用App(二):登录页对接口
  • 小程序26-事件绑定和事件对象
  • 十四、Vue 混入(Mixins)详解
  • maven的pom.xml配置详解
  • LLM - 使用 LLaMA-Factory 部署大模型 HTTP 多模态服务 教程 (4)
  • 三甲医院等级评审八维数据分析应用(八)--数据治理的持续改进与反馈机制篇
  • 桌面运维岗面试三十问
  • vue3中onUpdated钩子函数和nextTick的具体使用场景和区别
  • Unix 域协议汇总整理
  • 我用Ai学Android Jetpack Compose之Text
  • Vmware安装centos
  • 在 Ubuntu 22.04 上部署 AppArmor 应用安全教程
  • 芋道源码(无遮羞布版)Spring Boot 全景指南
  • Federation机制的实现
  • b612相机 13.5.5解锁会员hook
  • 【A I应用】1.原理入门以及应用方式
  • 『SQLite』SELECT语句查询数据
  • 机器学习基础-线性回归和逻辑回归
  • OpenGl(四) 提升Shader性能--VBO、EBO、VAO之EBO
  • Reactor测试框架之StepVerifier
  • JavaScript语言的编程范式
  • Python爬虫入门指南:从零开始抓取数据
  • Mysql--基础篇--概述
  • 专业无人机飞手培训,考证、组装、调参、维修全面技术详解