You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Django项目中用Gunicorn运行Web与gRPC两个独立服务器?

用Gunicorn部署Django项目中的gRPC服务

核心结论

没错,你需要创建一个类似wsgi.py的入口文件,但因为gRPC不遵循WSGI协议,建议命名为grpc_server.py这类更直观的文件名。Gunicorn支持自定义应用入口,只要提供符合要求的启动逻辑即可。

步骤1:编写gRPC服务入口文件

在项目根目录(和自动生成的wsgi.py同级)创建grpc_server.py,内容如下:

import os
# 先初始化Django环境,确保gRPC服务能调用Django的模型、配置等资源
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "your_project.settings")
import django
django.setup()

from myapp.management.grpc_downloader import GRPCDownloader

# 定义Gunicorn要执行的启动函数
def run_grpc_server():
    grpc_instance = GRPCDownloader()
    grpc_instance.run_server()

# 也可以将启动函数赋值给application变量,和WSGI格式对齐
application = run_grpc_server

步骤2:用Gunicorn启动gRPC服务

直接通过命令行指定入口文件和启动函数,示例命令:

gunicorn --workers=2 --bind=0.0.0.0:50051 grpc_server:run_grpc_server
  • --workers=2:根据服务器核心数调整,gRPC是长连接模式,worker数量无需像WSGI那样设得过多,通常设为CPU核心数或核心数+1即可
  • --bind=0.0.0.0:50051:指定gRPC服务的监听地址和端口,默认gRPC端口为50051
  • grpc_server:run_grpc_server:指定入口文件(不带.py后缀)和要执行的启动函数

步骤3:配置systemd服务(作为独立服务运行)

创建/etc/systemd/system/django-grpc.service文件,内容如下:

[Unit]
Description=Django gRPC Service
After=network.target

[Service]
User=your_username
Group=your_group
WorkingDirectory=/path/to/your/project
ExecStart=/path/to/your/venv/bin/gunicorn --workers=2 --bind=0.0.0.0:50051 grpc_server:run_grpc_server
Restart=always

[Install]
WantedBy=multi-user.target

执行以下命令启用并启动服务:

sudo systemctl daemon-reload
sudo systemctl start django-grpc
sudo systemctl enable django-grpc

步骤4:Docker容器化配置

在Dockerfile中添加gRPC服务启动命令,示例:

FROM python:3.11-slim

# 省略安装依赖、复制项目代码等步骤
WORKDIR /app

# 启动gRPC服务
CMD ["gunicorn", "--workers=2", "--bind=0.0.0.0:50051", "grpc_server:run_grpc_server"]

如果需要同时运行WSGI和gRPC服务,建议用Docker Compose分别启动两个独立容器,或在单个容器中用supervisord等进程管理工具统一管理。

关键注意事项

  • 必须初始化Django环境:若gRPC服务依赖Django的ORM、配置等资源,入口文件开头一定要设置环境变量并调用django.setup()
  • 分开管理WSGI和gRPC服务:不要用同一个Gunicorn实例同时运行两种服务,分开启动、单独监控更可靠

内容的提问来源于stack exchange,提问作者C4X

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.05 16:42:06