iT邦幫忙

2025 iThome 鐵人賽

DAY 3
0
DevOps

一個n8n免費仔的踩雷告白系列 第 3

鐵人賽 day3 - 怎麼在本地架設 n8n

  • 分享至 

  • xImage
  •  

Hello,我是 KK,今年的鐵人賽,想跟大家分享架設 n8n 遇到的一些挑戰跟意外,就讓我們一起學習吧。

繼上一篇 [[鐵人賽 day2 - 免費仔的想法 - n8n 的收費機制與 Community 版功能]] 聊的,官方有提供雲端服務,也有提供 Community 讓我們自架,一開始主題就說了是免費仔,所以當然要來講解一下到底怎麼自架。

架設方法

官方提供了幾個方式[^1],讓我們來一一看過:

npm

雖然有點違反直覺,但 n8n 是一個 TypeScript 專案。所以最簡單的一個方式,就是直接在本機 command 下指令

npm install n8n -g

這樣就裝好了,只是要啟動時還要另外下指令

n8n
# or
n8n start

我個人並不喜歡這種做法,因為一來會直接安裝在本機,環境可能會有衝突或污染,而且每次重開機後還要記得啟動 n8n。

另外,如果沒有安裝 npm 的人,要先到Node.js 官網 下載安裝。Windows, Mac 都可以直接下載安裝檔,就不再多提。

Docker

自從 Docker 出現之後,後來比較完整的專案,幾乎都能使用 docker 來安裝。
而且通常都會上傳到 Docker Hub,也不太需要花什麼心思處理環境問題。所以安裝指令就像下面這樣單純:

docker volume create n8n_data

docker run -it --rm --name n8n -p 5678:5678 -v n8n_data:/home/node/.n8n docker.n8n.io/n8nio/n8n

通常下這個指令,你的 n8n 就啟起來了。雖然還有一些小問題,像是重開機後會消失,但這個我們微調一下 docker run 的參數就好了。更重要的是我們現在得到了一個更乾淨的環境 ^2b13bc

PostgreSQL

原生的 n8n 是使用 SQLite 來儲存的,但你高興的話可以另外要求連去 PostgreSQL,只是要加一些參數

docker volume create n8n_data docker run -it --rm \
  --name n8n \
  -p 5678:5678 \
  -e DB_TYPE=postgresdb \
  -e DB_POSTGRESDB_DATABASE=<POSTGRES_DATABASE> \
  -e DB_POSTGRESDB_HOST=<POSTGRES_HOST> \
  -e DB_POSTGRESDB_PORT=<POSTGRES_PORT> \
  -e DB_POSTGRESDB_USER=<POSTGRES_USER> \
  -e DB_POSTGRESDB_SCHEMA=<POSTGRES_SCHEMA> \
  -e DB_POSTGRESDB_PASSWORD=<POSTGRES_PASSWORD> \
  -v n8n_data:/home/node/.n8n \
docker.n8n.io/n8nio/n8n

應該是看名稱就知道,都是用來指定 PostgreSQL 相關的資訊而已。
你或許會想使用 Docker Compose 來同時啟動 PostgreSQL 跟 n8n 的 Docker Container,這裡我先提供一個簡單的範例,可能要再視情況修改。

version: '3.8'

services:
  postgres:
    image: postgres:latest
    container_name: n8n-postgres
    restart: always
    environment:
      - POSTGRES_DB=n8n
      - POSTGRES_USER=n8n
      - POSTGRES_PASSWORD=your_secure_password
    volumes:
      - postgres_data:/var/lib/postgresql/data

  n8n:
    image: docker.n8n.io/n8nio/n8n
    container_name: n8n
    restart: always
    ports:
      - "5678:5678"
    environment:
      - DB_TYPE=postgresdb
      - DB_POSTGRESDB_HOST=postgres
      - DB_POSTGRESDB_DATABASE=n8n
      - DB_POSTGRESDB_USER=n8n
      - DB_POSTGRESDB_PASSWORD=your_secure_password
      - N8N_HOST=localhost
      - N8N_PROTOCOL=http
    volumes:
      - n8n_data:/home/node/.n8n
    depends_on:
      - postgres

volumes:
  n8n_data:
  postgres_data:

當然 PostgreSQL 有它的優點,像是:

  • 支援高併發
  • 更佳的資料一致性與交易處理
  • 可搭配 Redis、水平擴充,讓多台 n8n instance 共用同一 DB
  • 有完整備份、還原、資料檢索優化能力

如果要多人共用 n8n,像是工作上要互相分享 workflow,或是大量的 workflow 要同時執行,是強烈建議使用 PostgreSQL 的。不過在個人使用上,我是覺得沒有明顯的好處,但若有遇到此類瓶頸可以考慮一二。

SQLite 完全不需要我們再去關心它,直接包含在 n8n 專案內就啟動了,也是一大優點。

總結

官方提供的兩種方法,都需要安裝相關的套件 (Node.js, Docker),但後續的操作都不複雜,這兩個套件都相當穩定,只要照著官網[^1]操作,基本上不太會遇到奇怪的環境問題。
現在,我們先假設你已經在本機安裝好 n8n 了。下一篇,我們來聊聊 - [[鐵人賽 day4 - 在本機裝 n8n 官網沒說清楚的事]],像是重啟電腦後 n8n 就停掉、一些需要 webhook 的 node 無法使用的問題。

[^1]: https://docs.n8n.io/hosting/ 自架連結


上一篇
鐵人賽 day2 - 免費仔的想法 - n8n 的收費機制與 Community 版功能
下一篇
鐵人賽 day4 - 在本機裝 n8n 官網沒說清楚的事
系列文
一個n8n免費仔的踩雷告白4
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言