FastAPI部署指南:從本地開發到雲服務器部署全流程

一、爲什麼需要部署FastAPI?

FastAPI是一個高性能的Python Web框架,適合構建API服務。但開發完成後,需要將代碼部署到雲服務器,才能讓其他設備(如手機、前端項目、其他服務器)訪問你的接口。本文將帶你從本地調試到雲服務器上線,完成全流程部署。

二、本地開發環境準備

1. 安裝FastAPI和Uvicorn

首先在本地安裝FastAPI和Uvicorn(FastAPI需要ASGI服務器運行,Uvicorn是最常用的選擇):

pip install fastapi uvicorn

2. 編寫第一個FastAPI接口

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

from fastapi import FastAPI

app = FastAPI()

@app.get("/")
def read_root():
    return {"message": "Hello, FastAPI!"}

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

3. 本地運行測試

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

uvicorn main:app --reload
  • main:app:表示從main.py文件中導入app對象(FastAPI實例)。
  • --reload:開發模式,代碼修改後自動重啓服務(生產環境需去掉)。

此時訪問http://127.0.0.1:8000,能看到{"message": "Hello, FastAPI!"},說明本地開發成功。

三、雲服務器準備

1. 購買雲服務器

選擇一個雲服務商(如阿里雲、騰訊雲、AWS),購買一臺Linux服務器(推薦Ubuntu 20.04或CentOS 8)。購買後獲取:
- 服務器IP地址(如120.xx.xx.xx
- 登錄用戶名(如ubunturoot
- 登錄密碼/密鑰(用於遠程連接)

2. 遠程連接雲服務器

通過終端或工具(如Xshell、FinalShell)連接服務器:
- Linux/Mac終端:直接用ssh 用戶名@服務器IP,例如ssh ubuntu@120.xx.xx.xx
- Windows:推薦用PuTTY或FinalShell,輸入IP和用戶名密碼即可連接。

四、雲服務器環境搭建

1. 安裝Python環境

FastAPI依賴Python 3.7+,在服務器上安裝Python和包管理工具:

# Ubuntu/Debian系統
sudo apt update && sudo apt install python3 python3-pip python3-venv

# CentOS系統(需先安裝epel-release)
sudo yum install -y epel-release
sudo yum install -y python3 python3-pip

2. 創建項目目錄並上傳代碼

假設項目放在服務器的/var/www/fastapi_demo目錄下:

# 創建目錄
mkdir -p /var/www/fastapi_demo
cd /var/www/fastapi_demo

# 本地代碼上傳到服務器(推薦用scp命令)
# 本地執行(需替換本地路徑和服務器信息):
scp /本地路徑/main.py ubuntu@120.xx.xx.xx:/var/www/fastapi_demo/
scp /本地路徑/requirements.txt ubuntu@120.xx.xx.xx:/var/www/fastapi_demo/
  • requirements.txt:本地項目依賴列表,在本地執行pip freeze > requirements.txt生成,上傳到服務器後安裝。

3. 安裝項目依賴

在服務器上進入項目目錄,安裝依賴:

cd /var/www/fastapi_demo
pip3 install -r requirements.txt

五、啓動FastAPI服務(生產環境配置)

本地開發用uvicorn main:app --reload,但生產環境需穩定運行且支持多用戶訪問,推薦用以下方式:

1. 使用systemd管理服務(開機自啓)

創建systemd服務配置文件,讓服務後臺運行並開機自啓:

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

在文件中寫入:

[Unit]
Description=FastAPI Demo Service
After=network.target  # 網絡啓動後運行

[Service]
User=ubuntu  # 服務器用戶名(需與登錄用戶一致)
WorkingDirectory=/var/www/fastapi_demo  # 項目目錄
ExecStart=/usr/bin/uvicorn main:app --host 0.0.0.0 --port 8000 --workers 4
# --host 0.0.0.0:允許外部訪問;--port 8000:服務端口;--workers 4:4個工作進程(CPU核心數建議爲CPU核心數*2+1)
Restart=always  # 服務崩潰後自動重啓

[Install]
WantedBy=multi-user.target  # 多用戶模式下開機自啓

2. 啓動並設置開機自啓

sudo systemctl daemon-reload  # 重新加載服務配置
sudo systemctl start fastapi   # 啓動服務
sudo systemctl enable fastapi  # 設置開機自啓

3. 驗證服務狀態

sudo systemctl status fastapi  # 查看服務狀態(綠色active(running)表示正常)

六、配置防火牆與安全組

雲服務器默認會有防火牆,需開放服務端口(如8000):
- 阿里雲/騰訊雲:登錄控制檯,進入服務器「安全組」,添加規則:入方向,端口8000,授權對象0.0.0.0/0(生產環境建議限制IP)。
- Linux系統防火牆(Ubuntu/CentOS):

# Ubuntu(ufw防火牆)
sudo ufw allow 8000/tcp  # 允許外部訪問8000端口

# CentOS(firewalld防火牆)
sudo firewall-cmd --add-port=8000/tcp --permanent
sudo firewall-cmd --reload

七、用Nginx反向代理(生產環境推薦)

直接用uvicorn暴露端口不安全,且無法處理靜態資源。推薦用Nginx作爲反向代理,將請求轉發到Uvicorn:

1. 安裝Nginx

# Ubuntu
sudo apt install nginx

# CentOS
sudo yum install nginx

2. 配置Nginx代理

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

寫入以下配置:

server {
    listen 80;
    server_name 120.xx.xx.xx;  # 替換爲你的服務器IP或域名

    location / {
        proxy_pass http://127.0.0.1:8000;  # 轉發到Uvicorn(服務器本地運行端口)
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
    }
}

3. 啓用Nginx配置

sudo ln -s /etc/nginx/sites-available/fastapi_demo /etc/nginx/sites-enabled/
sudo nginx -t  # 測試配置是否有誤
sudo systemctl restart nginx  # 重啓Nginx

八、配置HTTPS(可選但推薦)

用Let’s Encrypt免費獲取SSL證書,實現HTTPS訪問:
1. 安裝Certbot:

sudo apt install certbot python3-certbot-nginx  # Ubuntu
# CentOS需額外安裝snap(略複雜,推薦直接用Ubuntu/CentOS 8+)
  1. 獲取證書並配置Nginx:
sudo certbot --nginx -d 120.xx.xx.xx  # 替換爲服務器IP或域名

Certbot會自動修改Nginx配置,添加HTTPS支持。

九、部署後維護

1. 查看日誌

  • 查看Uvicorn日誌:journalctl -u fastapi -f-f即時刷新)
  • 查看Nginx日誌:tail -f /var/log/nginx/access.log(訪問日誌)和/var/log/nginx/error.log(錯誤日誌)

2. 重啓服務

# 重啓Uvicorn
sudo systemctl restart fastapi

# 重啓Nginx
sudo systemctl restart nginx

3. 代碼更新

若本地代碼修改,重新上傳到服務器並重啓服務:

# 本地更新後上傳
scp /本地路徑/main.py ubuntu@120.xx.xx.xx:/var/www/fastapi_demo/

# 服務器重啓服務
sudo systemctl restart fastapi

十、進階:用Docker容器化部署(可選)

若項目複雜,推薦用Docker簡化部署:
1. 本地創建Dockerfile

FROM python:3.9-slim
WORKDIR /app
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt
COPY . .
CMD ["uvicorn", "main:app", "--host", "0.0.0.0", "--port", "8000"]
  1. 在服務器構建Docker鏡像
docker build -t fastapi_demo .
docker run -d -p 8000:8000 fastapi_demo

總結

從本地開發到雲服務器部署,核心步驟是:本地調試 → 服務器環境搭建 → 代碼上傳 → 啓動服務 → 配置反向代理 → 安全加固。本文用最簡單的方式覆蓋了基礎部署流程,後續可根據項目複雜度(如數據庫、容器化)擴展。

如果遇到問題,可通過官方文檔或搜索關鍵詞(如“Ubuntu安裝Python3”“Uvicorn生產環境配置”)解決,祝部署順利!

小夜