容器化 Docker 部署與 Render 上線
當你在自己的電腦上(http://127.0.0.1:8000)測試完所有 API 後,你會遇到一個問題:要怎麼把這包程式碼丟到真正的伺服器上跑?
過去,你可能需要租一台 Linux 機器,自己連進去安裝 Python、裝套件庫、設定環境變數,搞得灰頭土臉。而且,一旦換了一台機器,或是要在別人的電腦上跑,你又要重來一次(經典名言:"It works on my machine!")。
為了解決這個問題,業界目前的標準答案就是:Docker。
1. 什麼是 Docker 容器化?
你可以把 Docker 想像成一個「超級貨櫃」。 你把你寫好的 FastAPI 程式碼,連同它需要的 Python 環境、套件版本,全部打包進這個貨櫃裡。 只要伺服器上有安裝 Docker,不管它是什麼作業系統,這個貨櫃放上去就能跑,保證環境 100% 一致。
2. 撰寫 Dockerfile
要打包貨櫃,我們需要寫一張說明書,這張說明書就叫做 Dockerfile(檔名沒有副檔名)。
請在你的 FastAPI 專案根目錄下建立它:
# 步驟 1: 指定基礎映像檔 (基於輕量級的 Python 3.10)
FROM python:3.10-slim
# 步驟 2: 設定工作目錄
WORKDIR /app
# 步驟 3: 將套件清單複製到容器內
COPY requirements.txt .
# 步驟 4: 安裝所有需要的套件
RUN pip install --no-cache-dir -r requirements.txt
# 步驟 5: 將專案內所有的程式碼複製到容器內
COPY . .
# 步驟 6: 對外開放 8000 port
EXPOSE 8000
# 步驟 7: 指定容器啟動時要執行的指令
CMD ["uvicorn", "main:app", "--host", "0.0.0.0", "--port", "8000"]
[!WARNING] 千萬別忘了
requirements.txtDocker 是一個乾淨的環境,它裡面什麼套件都沒有。你必須先在本地終端機執行pip freeze > requirements.txt,把你有用到的套件清單列出來,Docker 才會知道要安裝什麼。 還有,CMD 中的--host 0.0.0.0非常重要,如果不加這個,你的 API 只能在容器內部被呼叫,外部網路連不進來!
3. 本地端測試 Docker Image
如果你有在電腦上安裝 Docker Desktop,你可以先在本地端測試打包:
# 建立一個名為 my-fastapi-app 的映像檔
docker build -t my-fastapi-app .
# 將映像檔跑起來,把本機的 8080 port 映射到容器內的 8000 port
docker run -d -p 8080:8000 my-fastapi-app
現在,打開瀏覽器輸入 http://localhost:8080/docs,如果能看到你的 API 文件,恭喜你打包成功了!
4. 零成本部署至 Render
打包好之後,我們要找一個平台來託管它。
Render 是一個對開發者非常友善的雲端平台,它支援直接從 GitHub 讀取你的 Dockerfile 並自動幫你把服務跑起來,而且有提供免費的方案!
部署步驟:
- 推上 GitHub:把你的專案程式碼(包含
Dockerfile和requirements.txt)推送到 GitHub 上。 - 登入 Render:前往 Render.com 註冊帳號並授權連接你的 GitHub。
- 建立 Web Service:
- 點擊 "New +" -> "Web Service"。
- 選擇 "Build and deploy from a Git repository"。
- 選擇你剛剛推上去的 Repo。
- 設定部署選項:
- Name: 取個好聽的名字(這會成為你網址的一部分)。
- Environment: 選擇
Docker(這非常重要,告訴 Render 我們有提供 Dockerfile)。 - Instance Type: 選擇
Free。
- 環境變數 (Environment Variables):
如果你有使用 JWT Secret Key 或是資料庫連線字串,請在 Render 頁面下方的 "Environment Variables" 區塊把這些金鑰填進去,絕對不要把
.env檔案 commit 到 GitHub 上! - Deploy!
點下建立後,Render 就會開始讀取你的 Dockerfile,拉取 Python 環境,安裝套件,並啟動 Uvicorn。大約等個 3 到 5 分鐘,綠色的 "Live" 亮起,你的 API 伺服器就正式上線了!
你可以得到一個類似 https://my-fastapi-app.onrender.com 的網址,全世界的前端都可以透過這個網址來呼叫你的 API。
5. 架構回顧與未來展望
恭喜你!你已經完成了從零到一打造現代微服務的旅程。 這套由 FastAPI + Pydantic + SQLAlchemy + JWT + Docker 組成的後端架構,正是目前許多 AI 新創公司(甚至包含 OpenAI 的某些服務)正在使用的技術堆疊。
這套武器不僅讓你具備了極佳的開發速度與防護力,更讓你具備了接下大型外包專案、或是自己創業打造 SaaS 的能力。
接下來,就是讓你的 Next.js 前端應用接上這個強大的引擎,讓世界看見你的作品!