iT邦幫忙

2026 iThome 鐵人賽

DAY 28
0
AI 自動化

30 天 AI 自動化實戰:用 n8n、FastAPI 與 Gemini 打造 AI 知識管家系列 第 28 篇

Day 28|Docker Compose:讓整套 AI Automation 可以被重現

  • 分享至 

  • xImage
  •  

在過去的 27 天裡,我們打造了負責流程編排的 n8n,以及負責資料萃取與 AI 處理的 FastAPI 伺服器。為了讓這套系統能輕易部署到雲端,或完整交接給其他人,我們需要消除「在我的電腦上可以跑」的窘境。

今天我們將引入 Docker 生態系,用一組 docker-compose.yml 將 n8n 與 FastAPI 完美綁定,達成「一鍵啟動、完美隔離、資料持久化」的終極目標。

很多開發者會疑惑,打包成 Docker 後,Python 套件該怎麼隔離?
答案是:Docker 容器本身就是最強大的隔離空間。 我們不需要在「已經隔離的保險箱(Docker)」裡面,再去放一個「小保險箱(Conda)」。我們只要專心寫好 requirements.txt,Docker 就會給我們一個乾淨、專屬、且絕對不會弄髒本機環境的 Python 運行空間。

專案目錄結構準備

ai-automation/
├── .env                 # 集中存放系統環境變數與 API Key
├── docker-compose.yml   # Docker 管弦樂團指揮中心
└── api/                 
    ├── Dockerfile       # FastAPI 封裝腳本
    ├── requirements.txt # Python 套件清單
    └── main.py          # 您的 FastAPI 主程式

實作步驟與設定檔
Step 1:建立 Python 套件清單
在 api/ 目錄下建立 requirements.txt,告訴 Docker 需要安裝哪些武器:

fastapi
uvicorn
trafilatura
requests
pypdf
youtube-transcript-api
google-generativeai
python-dotenv

Step 2:撰寫 FastAPI 封裝腳本 (Dockerfile)
在 api/ 目錄下建立 Dockerfile(不含副檔名)。我們直接使用官方輕量版 Python 作為基底:

# 使用輕量版 Python 映像檔
FROM python:3.10-slim

# 設定工作目錄
WORKDIR /app

# 複製套件清單並透過原生的 pip 安裝
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt

# 複製主程式
COPY main.py .

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

Step 3:撰寫系統藍圖 (docker-compose.yml)
在專案根目錄建立 docker-compose.yml,將 n8n 與 FastAPI 網路打通,並設定資料持久化(Volume):

version: '3.8'

services:
  fastapi:
    build: ./api
    container_name: ai_fastapi
    restart: always
    env_file: .env
    ports:
      - "8000:8000"

  n8n:
    image: docker.n8n.io/n8nio/n8n
    container_name: ai_n8n
    restart: always
    ports:
      - "5678:5678"
    environment:
      - N8N_HOST=0.0.0.0
      - N8N_PORT=5678
      - N8N_PROTOCOL=http
      - NODE_ENV=production
      - GENERIC_TIMEZONE=Asia/Taipei
    volumes:
      - n8n_data:/home/node/.n8n
    depends_on:
      - fastapi

volumes:
  # 宣告持久化空間:Container 可以消失,但 n8n 流程與資料不能消失!
  n8n_data:

一鍵啟動指令
在根目錄打開終端機,確保 .env 已經寫好 GEMINI_API_KEY 等環境變數後,執行:

docker compose up -d

系統會自動在背景構建映像檔、建立虛擬網路,並同時啟動 FastAPI 與 n8n。

關鍵設定更新:內部網路溝通
因為 n8n 和 FastAPI 現在住在同一個 Docker 內部網路裡,n8n 不需要知道外部的真實 IP 就能呼叫 API。
請打開 n8n,進入所有呼叫 FastAPI 的 HTTP Request 節點,將原本的 URL 改為內部服務名稱:

修改前:http://localhost:8000/...

修改後:http://fastapi:8000/...


上一篇
Day 27|不用等我下指令:打造每週 AI 知識週報
系列文
30 天 AI 自動化實戰:用 n8n、FastAPI 與 Gemini 打造 AI 知識管家 共 28 篇
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言