gunicorn启动fastapi项目
知止自律打卡-微信小程序APP
一款微信自律打卡小程序,支持自定义打卡项目、习惯记录、项目日记、专注计时与数据统计。自律打卡、学习打卡、读书打卡、健身打卡、运动打卡、减肥打卡、戒色打卡、养生打卡、戒烟、戒酒、戒熬夜等多种场景。万能打卡模板自由创建。可自定义每日打卡目标,记录习惯连续天数,可视化追踪成长进度。
了解产品详情 →
微信搜索「知止自律打卡」
1 前言
1.1 Gunicorn 是什么?
Gunicorn(Green Unicorn)是一个 Python WSGI HTTP 服务器,用于生产环境运行 Python Web 应用(如 Flask、Django、FastAPI)。
特点:
- 支持多进程(worker)
- 支持日志、信号处理、守护进程等
- 稳定高效,广泛用于部署生产环境服务
1.2 uvicorn 是什么?
Uvicorn 是一个基于 uvloop 和 httptools 的 异步 ASGI 服务器,是 FastAPI 推荐的服务器。
- 支持异步请求处理
- 更适合现代异步框架(如 FastAPI、Starlette)
1.3 uvicorn启动方式 vs Gunicorn 启动
| 项目 | uvicorn.run() 启动 |
gunicorn + UvicornWorker 启动 |
|---|---|---|
| 用途 | 本地开发、调试 | 生产部署 |
| 启动命令 | uvicorn main:app --reload |
gunicorn main:app -w 4 -k uvicorn.workers.UvicornWorker |
| 多进程 | ❌ 单进程 | ✅ 支持多 worker(并发更强) |
| 热重载 | ✅ 开发环境推荐 | ❌ 默认关闭,可结合其它方案 |
| 守护进程 | ❌ | ✅ 支持 --daemon 后台运行 |
| 日志管理 | 简单 | 更专业、更灵活 |
| 健壮性 | 异常自动退出 | 崩溃自动重启 worker,容错强 |
1.4 推荐使用方式
| 场景 | 推荐方式 |
|---|---|
| 本地开发 | uvicorn main:app --reload |
| 生产部署 | gunicorn main:app -w 4 -k uvicorn.workers.UvicornWorker |
本地开发推荐启动程序代码块。
if __name__ == "__main__":
# uvicorn.run(app, host="0.0.0.0", port=8090)
uvicorn.run(
app,
host="0.0.0.0",
# port=8090,
port=Env().port,
timeout_keep_alive=300, # 设置长时间的保持活跃超时(秒)
timeout_graceful_shutdown=60, # 设置优雅关闭的超时
)
在生产部署中,gunicorn 启动方式更推荐通过配置文件启动。
1.5 Gunicorn 是如何支持 FastAPI 的?
Gunicorn 本身是 WSGI 服务器,而 FastAPI 是基于 ASGI 的。
因此我们使用:
gunicorn main:app -k uvicorn.workers.UvicornWorker
这里的 -k uvicorn.workers.UvicornWorker 就是使用 Uvicorn 作为 ASGI worker 适配器,让 Gunicorn 能运行 FastAPI。
2 FastAPI案例
main.py
from fastapi import FastAPI
from app.routes import router
app = FastAPI()
app.include_router(router)
routes.py
from fastapi import APIRouter
router = APIRouter()
@router.get("/")
async def read_root():
return {"message": "Gunicorn案例测试"}
3 requirements.txt
依赖文件
fastapi
uvicorn[standard]
gunicorn
fastapi==0.115.5
uvicorn==0.32.1
gunicorn==23.0.0
4 命令启动参考
gunicorn app.main:app -w 4 -k uvicorn.workers.UvicornWorker --bind 0.0.0.0:8000
| 参数 | 说明 |
|---|---|
app.main:app |
指定 FastAPI 应用位置,模块路径:对象 格式 |
-w 4 |
启动 4 个 worker(根据 CPU 核数调整) |
-k uvicorn.workers.UvicornWorker |
使用 Uvicorn 的异步 worker |
--bind 0.0.0.0:8000 |
绑定端口和 IP 地址 |
5 通过配置文件启动
启动命令(可配合shell脚本进行一键启动)
gunicorn main:app -c gunicorn.conf.py
gunicorn.conf.py
# 应用模块路径
bind = "0.0.0.0:8000"
# worker 数量,建议 = CPU核心数 * 2 + 1
workers = 4
# 使用异步 worker 适配 FastAPI
worker_class = "uvicorn.workers.UvicornWorker"
# 日志等级
loglevel = "info"
# 日志文件(可选)
accesslog = "log/gunicorn_access.log"
errorlog = "log/gunicorn_error.log"
# 设置最大请求处理时间(秒)
timeout = 60
# 设置 pid 文件路径(可选)
pidfile = "gunicorn.pid"
# 设置守护进程(可选)
daemon = True
shell脚本授权
chmod +x start.sh
./start.sh

6 docker配置
6.1 Dockerfile
# 基础镜像
FROM python:3.10-slim
# 设置工作目录
WORKDIR /app
# 复制项目文件
COPY . /app
# 安装依赖
RUN pip install --no-cache-dir -r requirements.txt
# 启动命令
CMD ["gunicorn", "app.main:app", "-c", "gunicorn.conf.py"]
6.2 docker-compose.yml
version: "3"
services:
fastapi:
build: .
ports:
- "8000:8000"
restart: always
6.3 启动
6.3.1 构建镜像
docker build -t fastapi-app .
6.3.2 运行容器
docker run -d -p 8000:8000 --name fastapi-container fastapi-app
或者使用 docker-compose:
docker-compose up -d
标签: