[Docker] VPS 快速部署 n8n 容器服務的方法

本篇文章更新時間:2025/10/13
如有資訊過時或語誤之處,歡迎使用 Contact 功能通知。
一介資男的 LINE 社群開站囉!歡迎入群聊聊~
如果本站內容對你有幫助,歡迎使用 BFX Pay 加密貨幣新台幣 贊助支持。


簡單筆記我這邊快速建立一個 VPS 主機到把 n8n 服務架設起來的處理流程方法。

以 Ubuntu 24.04 Server 作業系統為例

主要分成下面步驟:

  1. 初始化主機
  2. 安裝 Nginx
  3. 處理 SSL 憑證
  4. 安裝 Docker 服務
  5. 啟動 n8n 服務
  6. 安裝 n8n 社群節點服務

初始化主機

設定時區、設定 Hostname、設定慣用編輯器、建立新使用者、調整遠端連線方式..等後。

更新主機套件:

apt update && apt upgrade -y && apt remove -y && apt autoremove -y && apt clean -y && apt autoclean -y && apt update && apt install screen htop -y && reboot

套用防火牆的規則:

#!/bin/bash
iptables -F
iptables -X
iptables -A INPUT -i lo -j ACCEPT
iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
iptables -A INPUT -p tcp --dport 443 -j ACCEPT
iptables -A INPUT -p udp --dport 53 -j ACCEPT
iptables -A INPUT -p tcp --dport 53 -j ACCEPT
iptables -A INPUT -p udp --dport 123 -j ACCEPT
iptables -A INPUT -p icmp -j ACCEPT
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT ACCEPT

只允許基本服務的 Port 對外開放,其他都預設鎖起來。

安裝 Nginx

這邊不打算直接用 Docker 跑 Nginx 服務也是考量日後主機使用的彈性與整合其他服務等。

sudo apt install nginx -y

對版本與模組沒要求的話,走內建套件管理方式安裝即可。

對 n8n 服務來說,處理好憑證與 vhost 後,在 server 區塊的設定只有下面這段:

location / {
        proxy_pass http://127.0.0.1:5678;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;

        # WebSocket support
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
        proxy_cache_bypass $http_upgrade;
}

處理 SSL 憑證

沒意外都是使用 Let's Encrypt 服務,我現在都慣用 [SSL] 一次弄懂 Let’s Encrypt 以及建議使用的工具 – DNSroboCert 這篇筆記的管理方式。

從 DNS 交握的方式取得憑證掛上 Nginx 很方便。

安裝 Docker 容器服務

curl -fsSL https://get.docker.com -o get-docker.sh && sh get-docker.sh

完成後建立一個內網環境: docker network create internal-net

日後有服務可以跑在這容器區網內相連

啟動 n8n 服務

拉取最新的 Image 版本

docker pull docker.n8n.io/n8nio/n8n

建立容器資料存放空間: docker volume create n8n_data

建立容器服務

docker run -d --restart unless-stopped \
 --name n8n \
 -p 5678:5678 \
 --network bridge \
 -e GENERIC_TIMEZONE="Asia/Taipei" \
 -e TZ="Asia/Taipei" \
 -e N8N_SECURE_COOKIE=false \
 -e N8N_HOST="n8n.mxp.tw" \
 -e N8N_RUNNERS_ENABLED=true \
 -e N8N_EXPRESS_TRUST_PROXY=true \
 -e N8N_PROXY_HOPS=1 \
 -e N8N_ENFORCE_SETTINGS_FILE_PERMISSIONS=true \
 -e WEBHOOK_URL="https://n8n.mxp.tw" \
 -v n8n_data:/home/node/.n8n \
 docker.n8n.io/n8nio/n8n

讓容器連上區網: docker network connect internal-net n8n

安裝 n8n 社群節點服務

這邊以 n8n-nodes-browserless 這個爬蟲工具為例。 n8n 設定中安裝社群節點不難,這串關鍵字帶入就好。但是還需要搭配主機上的爬蟲服務運作來處理。

拉取最新的 Image 資料:

docker pull ghcr.io/browserless/chromium

在區網內啟動服務

docker run -d --name browserless \
  --network internal-net \
  -e "CONCURRENT=10000" \
  -e "TOKEN=6R0W53R131229" \
  --restart unless-stopped \
  ghcr.io/browserless/chromium

剩下就是看文件怎麼串上!

這邊一個踩雷點就是,社群節點裡提供的串接版本是對應 Browserless 的 Cloud 版,自己架設定版本要確定存取的 API 路徑有沒有正確。

後記

基本上這些都可以包裝成一個 Shell 來執行,後續更新只需要跑一次重新抓取 Image 的流程來重開就好。


Share:

作者: Chun

資訊愛好人士。主張「人人都該為了偷懶而進步」。期許自己成為斜槓到變進度條 100% 的年輕人。[///////////____36%_________]

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *


文章
Filter
Apply Filters
Mastodon