一、爲什麼需要部署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)
- 登錄用戶名(如ubuntu或root)
- 登錄密碼/密鑰(用於遠程連接)
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+)
- 獲取證書並配置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"]
- 在服務器構建Docker鏡像:
docker build -t fastapi_demo .
docker run -d -p 8000:8000 fastapi_demo
總結¶
從本地開發到雲服務器部署,核心步驟是:本地調試 → 服務器環境搭建 → 代碼上傳 → 啓動服務 → 配置反向代理 → 安全加固。本文用最簡單的方式覆蓋了基礎部署流程,後續可根據項目複雜度(如數據庫、容器化)擴展。
如果遇到問題,可通過官方文檔或搜索關鍵詞(如“Ubuntu安裝Python3”“Uvicorn生產環境配置”)解決,祝部署順利!