今天來講環境的建置。
使用 docker-compose 一鍵起環境:n8n + PostgreSQL + Scraper
當一個小專案同時需要多個服務(工作流排程器 n8n、資料庫 PostgreSQL、自訂爬蟲 Scraper),用「手動安裝+彼此接線」會很痛苦。
Docker Compose 做的事情:
(因為本米現在是架在 Window s上,針對 Linux 就不講細節,網路有許多人分享下載方法可參照)
打開 terminal :
docker --version
docker compose version
docker run hello-world
gu-n8n-starter/
├─ docker-compose.yml
├─ postgres/
│ └─ init.sql
└─ scraper/
├─ Dockerfile
└─ app.py
version: "3.8"
services:
n8n:
image: n8nio/n8n:latest
container_name: n8n
ports:
- "5678:5678"
environment:
- TZ=Asia/Taipei
- N8N_HOST=localhost
- N8N_PORT=5678
- N8N_PROTOCOL=http
- GENERIC_TIMEZONE=Asia/Taipei
- DB_TYPE=postgresdb
- DB_POSTGRESDB_HOST=db
- DB_POSTGRESDB_PORT=5432
- DB_POSTGRESDB_DATABASE=n8n
- DB_POSTGRESDB_USER=gu
- DB_POSTGRESDB_PASSWORD=gu
volumes:
- n8n_data:/home/node/.n8n
depends_on:
- db
- scraper
db:
image: postgres:15-alpine
container_name: pg
environment:
- POSTGRES_USER=gu
- POSTGRES_PASSWORD=gu
- POSTGRES_DB=n8n
- TZ=Asia/Taipei
ports:
- "5432:5432"
volumes:
- pg_data:/var/lib/postgresql/data
- ./postgres/init.sql:/docker-entrypoint-initdb.d/00-init.sql:ro
scraper:
build:
context: ./scraper
dockerfile: Dockerfile
image: gu-scraper:latest
container_name: gu_scraper
environment:
- TZ=Asia/Taipei
ports:
- "8000:8000"
restart: unless-stopped
volumes:
n8n_data:
pg_data:
(暫時 可能之後再n8n資料庫會用關聯式資料庫的特性建構資料庫)
CREATE TABLE IF NOT EXISTS prices (
id BIGSERIAL PRIMARY KEY,
category TEXT NOT NULL,
product_code TEXT,
name TEXT,
price NUMERIC,
original_price NUMERIC,
in_stock TEXT,
url TEXT,
ts TIMESTAMPTZ DEFAULT NOW(),
raw JSONB
);
CREATE INDEX IF NOT EXISTS idx_prices_product_ts ON prices(product_code, ts);
CREATE INDEX IF NOT EXISTS idx_prices_category_ts ON prices(category, ts);
FROM python:3.11-slim
WORKDIR /app
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt
COPY app.py .
EXPOSE 8000
CMD ["uvicorn", "app:app", "--host", "0.0.0.0", "--port", "8000"]
最重要的地方 要抓取商品價格
細節留後面講
打開 terminal :
# Windows PowerShell
cd path\to\gu-n8n-starter
docker compose up -d --build
成功後會看到三個容器:n8n、pg(Postgres)、gu_scraper
因為內容有點多 篇幅會過長 所以留到後面另外再說
[Day 9] GU價格提醒系統 (3) - 什麼是 n8n ?
今天就先到這 特別留 scraper 和 n8n 流程
我們後面幾天再來補 ~