FastAPI+Uvicorn:本地開發與部署的基礎配置

一、FastAPI和Uvicorn簡介

在Python Web開發領域,FastAPI是近年來非常流行的高性能Web框架,它基於標準Python類型提示,支持異步操作,且自動生成API文檔,開發效率極高。而Uvicorn是一個輕量級的ASGI(異步服務器網關接口)服務器,專爲高性能Python Web應用設計,也是FastAPI官方推薦的服務器之一。

簡單來說,FastAPI負責定義API接口邏輯,Uvicorn負責接收請求、處理併發並返回響應。兩者搭配使用,既能快速開發,又能穩定部署。

二、環境安裝

1. 創建虛擬環境(推薦)

爲避免依賴衝突,建議先創建虛擬環境:

# 創建虛擬環境
python -m venv venv

# 激活虛擬環境(Windows)
venv\Scripts\activate

# 激活虛擬環境(Mac/Linux)
source venv/bin/activate

2. 安裝FastAPI和Uvicorn

在激活的虛擬環境中執行:

pip install fastapi uvicorn

安裝完成後,可通過 pip list 驗證是否成功安裝。

三、本地開發環境配置

1. 編寫第一個FastAPI應用

創建一個名爲 main.py 的文件,寫入以下代碼:

from fastapi import FastAPI

# 初始化FastAPI應用
app = FastAPI()

# 定義一個根路由("/"),返回JSON數據
@app.get("/")
def read_root():
    return {"message": "Hello, FastAPI+Uvicorn!"}

# 定義一個帶參數的路由(如"/items/123")
@app.get("/items/{item_id}")
def read_item(item_id: int, q: str = None):
    return {"item_id": item_id, "query": q}

2. 用Uvicorn啓動應用

在終端執行以下命令啓動服務器:

uvicorn main:app --reload
  • 參數說明
  • main:app:表示從 main.py 文件中導入 app 對象(即FastAPI實例)。
  • --reload:開發模式下自動重載代碼(修改後無需手動重啓)。

3. 驗證接口是否運行

啓動成功後,終端會顯示類似信息:

INFO:     Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to quit)
INFO:     Started reloader process [12345]

此時可通過以下方式測試接口:
- 瀏覽器訪問:打開 http://127.0.0.1:8000,頁面會顯示 {"message": "Hello, FastAPI+Uvicorn!"}
- 調用帶參數接口:訪問 http://127.0.0.1:8000/items/456?query=test,返回 {"item_id": 456, "query": "test"}

四、生產環境部署基礎

本地開發用 --reload 方便調試,但生產環境需關閉自動重載並優化配置。

1. 基礎部署命令

直接使用Uvicorn啓動(無需自動重載):

uvicorn main:app --host 0.0.0.0 --port 8000
  • 參數說明
  • --host 0.0.0.0:允許外部設備訪問(默認僅本地 127.0.0.1 訪問)。
  • --port 8000:指定端口(可改爲其他端口,如 80 需管理員權限)。

2. 多進程部署(提升性能)

若服務器有多個CPU核心,可通過 --workers 參數啓動多進程:

uvicorn main:app --host 0.0.0.0 --port 8000 --workers 4
  • --workers 4:啓動4個工作進程(建議設置爲CPU核心數的2倍)。

3. 部署到服務器(如阿里雲/騰訊雲)

  1. 上傳代碼:將 main.py 和虛擬環境上傳到服務器(或直接在服務器內創建)。
  2. 啓動應用:在服務器終端執行部署命令(需確保服務器開放對應端口,如8000)。
  3. 後臺運行:若需長期運行,可結合 nohupsystemd 管理進程:
   # 使用nohup後臺運行
   nohup uvicorn main:app --host 0.0.0.0 --port 8000 &

五、常見問題與解決

1. 端口被佔用怎麼辦?

  • 檢查佔用進程lsof -i :8000(Mac/Linux)或 netstat -ano | findstr :8000(Windows)。
  • 修改端口:執行 uvicorn main:app --port 8001,更換爲未佔用的端口。

2. 訪問不到接口?

  • 確認host參數:確保 --host 0.0.0.0 而非 127.0.0.1(本地迴環地址僅允許本機訪問)。
  • 檢查防火牆:服務器需開放對應端口(如8000),可通過 ufw allow 8000(Ubuntu)開放端口。

3. 安裝失敗?

  • 更新pippip install --upgrade pip
  • 確認Python版本:FastAPI要求Python 3.6+,建議使用Python 3.9+。

六、總結

FastAPI+Uvicorn的本地開發與部署流程核心步驟:
1. 開發:用 uvicorn main:app --reload 快速調試接口。
2. 部署:用 uvicorn main:app --host 0.0.0.0 --port 8000 --workers 4 啓動生產環境。

通過本文,你已掌握基礎配置和常見問題處理。後續可探索FastAPI的異步接口、數據庫集成或Uvicorn的高級參數(如SSL證書配置)。

動手實踐:嘗試修改 main.py 添加新接口,或部署到雲服務器,體驗完整開發流程吧!

小夜