iT邦幫忙

0

# Day 14 使用 Dockerfile 容器化微服務並免費部署至 Render 雲端

n8n
  • 分享至 

  • xImage
  •  

在昨天的文章中,我們使用 SQLite 與 SQLAlchemy 為美食 Agent 構建了長期記憶資料庫,實現了不重複推薦與個人喜好追蹤的功能。

然而,目前整套系統仍然跑在我們的筆電或桌機上。這意味著:

  1. 一旦電腦睡眠、關機或斷網,LINE 機器人就會直接失聯。
  2. ngrok 免費版的臨時網址每次重啟都會變動,必須重新複製貼上到 LINE Developers 後台。

為了讓身邊的朋友或真實用戶能夠 24 小時隨時使用,今天 Day 14 我們要把 FastAPI 核心微服務 容器化,並部署到支援免費託管的雲端平台——Render,讓微服務擁有永久固定的 HTTPS 公網網址!


一、雲端部署架構概覽

今天我們要將本地的 Python 專案打包上雲端:

[本地程式碼 (agent-backend)]
       │
       ▼ (Git Push)
[GitHub 專案儲存庫 (Repository)]
       │
       ▼ (自動觸發 CI/CD 建置)
[Render 雲端平台]
       │ 1. 讀取 Dockerfile 自動建置 Image
       │ 2. 注入環境變數 (GOOGLE_MAPS_API_KEY)
       │ 3. 啟動 Uvicorn 伺服器
       ▼
[生成永久固定公網網址:[https://food-agent-xxxx.onrender.com](https://food-agent-xxxx.onrender.com)]

二、撰寫容器化設定檔

為了讓程式在雲端伺服器上能有一致的執行環境,我們使用 Docker 進行打包。

Step 1:更新 requirements.txt

請確保虛擬環境已啟用,將目前安裝的所有套件完整導出:

pip freeze > requirements.txt

Step 2:建立 Dockerfile

在 agent-backend/ 根目錄下建立一個名為 Dockerfile 的檔案(無副檔名):

# 1. 採用輕量版 Python 3.11 基礎映像檔
FROM python:3.11-slim

# 2. 設定容器內的工作目錄
WORKDIR /app

# 3. 避免 Python 生成 .pyc 檔案並啟用即時輸出緩衝
ENV PYTHONDONTWRITEBYTECODE=1
ENV PYTHONUNBUFFERED=1

# 4. 複製相依清單並安裝
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt

# 5. 複製專案原始碼到容器內
COPY . .

# 6. 開放 Render 預設連接埠 (8000)
EXPOSE 8000

# 7. 啟動 FastAPI 服務 (使用環境變數中的 PORT,預設為 8000)
CMD ["sh", "-c", "uvicorn app.main:app --host 0.0.0.0 --port ${PORT:-8000}"]

Step 3:建立 .dockerignore 與 .gitignore

在根目錄建立 .dockerignore 與 .gitignore,避免本地的暫存檔、虛擬環境或機密金鑰被上傳到雲端:

.dockerignore 與 .gitignore 內容皆填入:

.venv/
__pycache__/
*.pyc
.env
food_agent_memory.db
.git

三、將專案推送到 GitHub

Render 支援透過 GitHub 自動觸發部署。請在 PowerShell 執行以下步驟:

Step 1:初始化 Git 儲存庫並提交

# 初始化 git
git init

# 將所有變更加入追蹤
git add .

# 建立初次提交
git commit -m "feat: setup Dockerfile and backend core for Render deployment"

Step 2:在 GitHub 建立 Repository 並推送

1.前往 GitHub 登入並點擊 New repository。

2.命名為 food-agent-backend,設定為 Public 或 Private 皆可。

3.建立完成後,複製遠端倉庫網址,在終端機執行關聯與推送:

git branch -M main
git remote add origin [https://github.com/](https://github.com/)<你的GitHub帳號>/food-agent-backend.git
git push -u origin main

四、在 Render 平台建立 Web Service

Step 1:註冊並關聯 GitHub

1.打開瀏覽器前往 Render 官方網站。

2.點擊右上角 Sign up,建議直接使用 GitHub 帳號登入授權。

Step 2:建立新的 Web Service

1.登入後進入 Dashboard,點擊右上角 New + ➜ Web Service。

2.選擇 Build and deploy from a Git repository,點擊 Next。

3.找到剛剛推送的 food-agent-backend 儲存庫,點擊右側的 Connect。

Step 3:配置服務參數與環境變數

在設定頁面中依序設定以下欄位:

Name:輸入服務名稱,例如 food-agent-api。

Region:選擇距離最近的區域(例如 Singapore)。

Runtime:選擇 Docker(Render 會自動偵測我們寫好的 Dockerfile)。

Instance Type:選擇 Free(免費方案)。

往下滑動展開 Environment Variables(環境變數),點擊 Add Environment Variable:

Key:GOOGLE_MAPS_API_KEY

Value:貼上你的 Google Maps API 金鑰。

點擊底部的 Create Web Service!

五、雲端服務建置驗收與端點切換

Step 1:查看部署紀錄

點擊建立後,Render 會自動拉取 GitHub 代碼並開始執行 Docker 建置:

==> Building image from Dockerfile...
==> Running uvicorn app.main:app...
==> Application startup complete.
==> Your service is live 🎉

當狀態變成綠色的 Live 時,代表後端已經在雲端順利運轉!

Step 2:測試永久雲端健康檢查與 Swagger 文件

在 Render 儀表板上方會看到一組專屬的永久 HTTPS 網址,格式如下:

[https://food-agent-api-xxxx.onrender.com](https://food-agent-api-xxxx.onrender.com)

在瀏覽器打開:

[https://food-agent-api-xxxx.onrender.com/docs](https://food-agent-api-xxxx.onrender.com/docs)

確認能夠順利看見 Swagger UI 文件,並測試 GET /api/v1/health 成功回傳 200 OK!

Step 3:更新 n8n 工作流中的請求網址

現在微服務已經有固定的公網網址了,回到本地或雲端的 n8n 工作流中:

1.打開呼叫微服務的 HTTP Request (Call FastAPI Backend) 節點。

2.將原本的本機網址:

[http://host.docker.internal:8000/api/v1/recommend/](http://host.docker.internal:8000/api/v1/recommend/)

3.直接換成 Render 提供的永久雲端網址:

[https://food-agent-api-xxxx.onrender.com/api/v1/recommend/](https://food-agent-api-xxxx.onrender.com/api/v1/recommend/)

4.儲存工作流。


*提醒邦友,使用第三方服務/API 時,請務必評估資安風險與隱私保護
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言