容器化 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.txt Docker 是一個乾淨的環境,它裡面什麼套件都沒有。你必須先在本地終端機執行 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 並自動幫你把服務跑起來,而且有提供免費的方案!

部署步驟:

  1. 推上 GitHub:把你的專案程式碼(包含 Dockerfilerequirements.txt)推送到 GitHub 上。
  2. 登入 Render:前往 Render.com 註冊帳號並授權連接你的 GitHub。
  3. 建立 Web Service
    • 點擊 "New +" -> "Web Service"。
    • 選擇 "Build and deploy from a Git repository"。
    • 選擇你剛剛推上去的 Repo。
  4. 設定部署選項
    • Name: 取個好聽的名字(這會成為你網址的一部分)。
    • Environment: 選擇 Docker(這非常重要,告訴 Render 我們有提供 Dockerfile)。
    • Instance Type: 選擇 Free
  5. 環境變數 (Environment Variables): 如果你有使用 JWT Secret Key 或是資料庫連線字串,請在 Render 頁面下方的 "Environment Variables" 區塊把這些金鑰填進去,絕對不要把 .env 檔案 commit 到 GitHub 上!
  6. 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 前端應用接上這個強大的引擎,讓世界看見你的作品!

更多部署選項

Railway.app

# Railway CLI 部署
railway login
railway init
railway up

Google Cloud Run

gcloud builds submit --tag gcr.io/PROJECT/api
gcloud run deploy api --image gcr.io/PROJECT/api --platform managed

Container 最佳化技巧

  • 使用 .dockerignore 排除不需要的檔案(__pycache__, .git, venv
  • requirements.txt 複製到映像檔中時,先安裝依賴再複製程式碼,利用 Docker 層快取
  • 使用 gunicorn 作為生產環境的 WSGI 伺服器,設定適當的 worker 數量


Container + Render:快速部署微服務

Docker 讓你的應用可以在任何環境一致地執行——不會有「在我電腦可以跑」的問題。Render 提供免費的雲端託管,支援 Docker 部署。

Dockerfile

FROM python:3.11-slim

WORKDIR /app

# 先複製依賴檔案,利用 Docker 快取
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt

# 複製程式碼
COPY . .

# 啟動
CMD ["uvicorn", "main:app", "--host", "0.0.0.0", "--port", "8000"]

Render 部署步驟

  1. 將程式碼推送到 GitHub
  2. 登入 https://render.com
  3. 點選「New +」→「Web Service」
  4. 連結你的 GitHub Repo
  5. 設定 Build Command:pip install -r requirements.txt
  6. 設定 Start Command:uvicorn main:app --host 0.0.0.0 --port $PORT
  7. 設定環境變數(SECRET_KEY、DATABASE_URL 等)
  8. 點選「Create」→ 等待部署完成

課程總結

這堂 FastAPI 微服務課程你從第一支 API、SQLAlchemy、Pydantic、JWT 認證到 Docker 部署——你現在可以獨立開發並上線一個 production-ready 的 Python API 服務了。

解鎖完整教學內容

本章為付費內容。加入專案即可解鎖超過 5000 字的深度解析,包含 10 個以上神級 Prompt 與真實 Source Code 範例!