FastAPI + NGINX + Gunicorn:一步一步教你部署一个高性能的Python网页应用

FastAPI 是一个现代的、快速(高性能)的 Web 框架,适用于构建 APIs,尤其是基于 Python 的项目。要让 FastAPI 应用能够处理生产级别的流量,我们通常会使用 Gunicorn 作为 WSGI 服务器,并通过 NGINX 进行反向代理。在这篇文章中,我们将详细讲解如何搭建一个高性能的 FastAPI 应用并部署到生产环境中。

1. 环境准备

在开始之前,请确保你的服务器上安装了 Python 3.7+、pip、NGINX 和 Gunicorn。你可以使用以下命令在 Ubuntu 上安装这些组件:

sudo apt update
sudo apt install python3 python3-pip python3-venv nginx

2. 创建 FastAPI 应用

首先,我们需要创建一个 FastAPI 应用。我们将在一个新的目录中执行所有操作:

mkdir my_fastapi_app
cd my_fastapi_app

接下来创建一个虚拟环境并激活它:

python3 -m venv venv
source venv/bin/activate

安装 FastAPI 和 Uvicorn(因为我们将通过 Gunicorn 启动 Uvicorn Worker):

pip install fastapi uvicorn gunicorn

创建一个简单的 FastAPI 应用 main.py

# main.py
from fastapi import FastAPI

app = FastAPI()

@app.get("/")
async def read_root():
    return {"Hello": "World"}

@app.get("/items/{item_id}")
async def read_item(item_id: int, q: str = None):
    return {"item_id": item_id, "q": q}

3. 启动 Gunicorn

在本地测试应用程序的正确性可以通过直接使用 Uvicorn 运行:

uvicorn main:app --host 0.0.0.0 --port 8000

接下来,我们使用 Gunicorn 来运行应用:

gunicorn -w 4 -k uvicorn.workers.UvicornWorker main:app --bind 0.0.0.0:8000

此命令中的参数解释: - -w 4:表示使用4个工作进程,您可以根据自己的服务器配置调整这个数字。 - -k uvicorn.workers.UvicornWorker:指定使用 Uvicorn 的 worker。 - --bind 0.0.0.0:8000:绑定到所有可用的 IP 地址。

4. 配置 NGINX

接下来,我们需要配置 NGINX 作为反向代理。编辑 NGINX 配置文件:

sudo nano /etc/nginx/sites-available/my_fastapi_app

在配置文件中添加以下内容:

server {
    listen 80;
    server_name your_domain.com;  # 将your_domain.com替换为你的域名或IP

    location / {
        proxy_pass http://127.0.0.1:8000;  # Gunicorn运行在8000端口
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection 'upgrade';
        proxy_set_header Host $host;
        proxy_cache_bypass $http_upgrade;
    }
}

保存并退出编辑器。

现在,我们需要创建一个符号链接,将配置文件链接到 sites-enabled 目录,并重新加载 NGINX:

sudo ln -s /etc/nginx/sites-available/my_fastapi_app /etc/nginx/sites-enabled/
sudo nginx -t  # 测试配置是否正确
sudo systemctl restart nginx  # 重新启动 NGINX

5. 启动 Gunicorn 的后台服务

为了让 Gunicorn 在后台运行,我们可以使用 systemd 创建一个服务文件。创建服务文件:

sudo nano /etc/systemd/system/my_fastapi_app.service

添加以下内容:

[Unit]
Description=Gunicorn instance to serve my_fastapi_app
After=network.target

[Service]
User=your_username  # 替换为你的用户名
Group=www-data
WorkingDirectory=/path/to/my_fastapi_app
Environment="PATH=/path/to/my_fastapi_app/venv/bin"
ExecStart=/path/to/my_fastapi_app/venv/bin/gunicorn -w 4 -k uvicorn.workers.UvicornWorker main:app --bind 127.0.0.1:8000

[Install]
WantedBy=multi-user.target

保存并退出。然后启用服务并启动它:

sudo systemctl start my_fastapi_app
sudo systemctl enable my_fastapi_app

6. 测试应用

打开浏览器,访问你的域名或服务器 IP 地址,应该能看到 FastAPI 返回的 {"Hello": "World"} 的 JSON 响应。

至此,通过 FastAPI、NGINX 和 Gunicorn 的组合,我们成功部署了一个高性能的 Python 网页应用。此架构既适合小型项目,也可以扩展到大型应用,非常适合中小型企业或开发者进行应用部署。希望你能顺利完成部署,并在以后的项目中更好地应用这些技术!

点赞(0) 打赏

微信小程序

微信扫一扫体验

微信公众账号

微信扫一扫加关注

发表
评论
返回
顶部