LOADING
1008 字
5 分鐘
如何在 Linode 用 Docker 架設 n8n

下面是整趟 n8n on Linode + Cloudflare Tunnel 部署旅程完整總整理
包含每一步、每個踩雷點、每個修法。

Linode 上部署:

  • Docker + Docker Compose

  • n8n with persistent volume

  • Cloudflare Tunnel (免開 port、HTTPS、domain)

  • 安全保護(BasicAuth)

最終網址 : https://n8n.stackpenguin.com (根據你自己的網域)

系統前置

SSH 進 Linode → 更新

Terminal window
sudo apt update && sudo apt upgrade -y
Terminal window
sudo apt update && sudo apt upgrade -y

安裝 Docker & Compose(先確認再裝)

檢查 Docker

docker --version
docker --version

沒有就安裝

Terminal window
curl -fsSL https://get.docker.com | sudo bash
sudo usermod -aG docker $USER
Terminal window
curl -fsSL https://get.docker.com | sudo bash
sudo usermod -aG docker $USER

檢查 Compose

docker-compose --version
docker-compose --version

沒有就安裝

Terminal window
sudo apt install docker-compose -y
Terminal window
sudo apt install docker-compose -y

建立 n8n 工作資料夾

Terminal window
mkdir -p ~/n8n
cd ~/n8n
Terminal window
mkdir -p ~/n8n
cd ~/n8n

建立 docker-compose.yml

一開始你用 docker run,後來換 compose(正確)

version: "3.3"
<div></div>
services:
n8n:
image: docker.n8n.io/n8nio/n8n
container_name: n8n
environment:
- GENERIC_TIMEZONE=Asia/Taipei
- TZ=Asia/Taipei
- N8N_PORT=5678
- N8N_HOST=n8n.stackpenguin.com
- N8N_EDITOR_BASE_URL=https://n8n.stackpenguin.com
<div></div>
# secure login
- N8N_BASIC_AUTH_ACTIVE=true
- N8N_BASIC_AUTH_USER=orcajunkai
- N8N_BASIC_AUTH_PASSWORD=<你的密碼>
<div></div>
ports:
- "5678:5678"
volumes:
- ./data:/home/node/.n8n
restart: unless-stopped
version: "3.3"
services:
n8n:
image: docker.n8n.io/n8nio/n8n
container_name: n8n
environment:
- GENERIC_TIMEZONE=Asia/Taipei
- TZ=Asia/Taipei
- N8N_PORT=5678
- N8N_HOST=n8n.stackpenguin.com
- N8N_EDITOR_BASE_URL=https://n8n.stackpenguin.com
# secure login
- N8N_BASIC_AUTH_ACTIVE=true
- N8N_BASIC_AUTH_USER=orcajunkai
- N8N_BASIC_AUTH_PASSWORD=<你的密碼>
ports:
- "5678:5678"
volumes:
- ./data:/home/node/.n8n
restart: unless-stopped

⚠️ 關鍵:不能放 N8N_PROTOCOL=https(那會 crash)

記得要將防火牆設定允許

orcajunkai@localhost:~$ sudo ufw allow 5678
Rule added
Rule added (v6)
orcajunkai@localhost:~$ sudo ufw reload
Firewall reloaded
orcajunkai@localhost:~$ sudo ufw allow 5678
Rule added
Rule added (v6)
orcajunkai@localhost:~$ sudo ufw reload
Firewall reloaded

啟動 n8n

docker-compose up -d
docker ps
curl http://localhost:5678
docker-compose up -d
docker ps
curl http://localhost:5678

Cloudflare Tunnel 登入

安裝 cloudflared

wget https://github.com/cloudflare/cloudflared/releases/latest/download/cloudflared-linux-amd64.deb
sudo dpkg -i cloudflared-linux-amd64.deb
wget https://github.com/cloudflare/cloudflared/releases/latest/download/cloudflared-linux-amd64.deb
sudo dpkg -i cloudflared-linux-amd64.deb

登入

cloudflared tunnel login
cloudflared tunnel login


建 tunnel

cloudflared tunnel create n8n
cloudflared tunnel create n8n

取得 UUID

建 DNS mapping

cloudflared tunnel route dns n8n n8n.stackpenguin.com
cloudflared tunnel route dns n8n n8n.stackpenguin.com

建 Cloudflare config

Terminal window
sudo nano /etc/cloudflared/config.yml
Terminal window
sudo nano /etc/cloudflared/config.yml

貼:

tunnel: <UUID>
credentials-file: /home/orcajunkai/.cloudflared/<UUID>.json
<div></div>
ingress:
- hostname: n8n.stackpenguin.com
service: http://localhost:5678
- service: http_status:404
tunnel: <UUID>
credentials-file: /home/orcajunkai/.cloudflared/<UUID>.json
ingress:
- hostname: n8n.stackpenguin.com
service: http://localhost:5678
- service: http_status:404

啟動 Tunnel

Terminal window
sudo cloudflared service install
sudo systemctl enable cloudflared
sudo systemctl start cloudflared
systemctl status cloudflared
Terminal window
sudo cloudflared service install
sudo systemctl enable cloudflared
sudo systemctl start cloudflared
systemctl status cloudflared

遇到的問題 & 解決

Issue解析解法
反引號 ` 在 Ubuntu 不能用Windows copy 的 shellLinux 用 \ 換行
Tunnel 502config path / hostname / protocol 錯config.yml
UUID.json not found<UUID> 沒替換改成真 UUID
curl localhost:5678 failedn8n crashremove HTTPS env
EACCES /home/node/.n8n/configvolume 權限不對chown 1000:1000 data/
container restart loopwrong env / permissionsFix compose & folder perms
Everyone can access n8n公開服務啟 basic auth env

最後驗證

orcajunkai@localhost:~/n8n$ curl http://localhost:5678
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>Error</title>
</head>
<body>
<pre>Cannot GET /</pre>
</body>
</html>
orcajunkai@localhost:~/n8n$ curl http://localhost:5678
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>Error</title>
</head>
<body>
<pre>Cannot GET /</pre>
</body>
</html>

Browser:https://n8n.stackpenguin.com (自己的網域)

跳出 BasicAuth → Login → 看到 n8n UI ✅

Cloudflared 運作原理

你想知道為啥:

https://n8n.stackpenguin.com
可以指到你 Linode 上的 n8n
而且你 沒有開 5678 port、也沒有裝 Nginx/Certbot
卻 magically 有 HTTPS + domain?

🔥 Cloudflare Tunnel 的核心概念

平常網站流程是:

User → Domain → Public IP → Server → App (n8n)

但 Cloudflare Tunnel 是:

User → Cloudflare → Tunnel → Your Server → n8n

你的 server 變成主動連 Cloudflare,不是 Cloudflare 來找你

這樣:

  • 不用開 Port 80/443/5678

  • 不用裝 Nginx

  • 不用 SSL cert

  • 網路封死也能連

超安全又 chill 這就是為什麼 tunnel 是超熱門 DevOps meta hack

那「綁定網址」到底做了什麼?

你做了兩件事:

1. Cloudflare DNS 建立 Route

這條指令:

cloudflared tunnel route dns n8n n8n.stackpenguin.com
cloudflared tunnel route dns n8n n8n.stackpenguin.com

意思:
讓 n8n.stackpenguin.com 指向這條 Cloudflare Tunnel

Cloudflare 幫你塞一條 CNAME 到 DNS:

n8n.stackpenguin.com → <Cloudflare Tunnel endpoint>
不是指向你的 Linode IP
是指向 Cloudflare 的 secure gateway

2. Tunnel config 說「這 domain 對應這 app」

你的 /etc/cloudflared/config.yml

ingress:
- hostname: n8n.stackpenguin.com
service: http://localhost:5678
ingress:
- hostname: n8n.stackpenguin.com
service: http://localhost:5678

意思:

有人打 n8n.stackpenguin.com
→ Cloudflare 收 request
→ 丟給 Tunnel
→ Tunnel 轉給你 Linode
→ 你的 n8n 回應

完全不露 IP
完全不需要開 Port
完全不需要 TLS 憑證


一句話版本

Cloudflare Tunnel 把你 server 變成:

末端加密節點

Cloudflare 當你的「外部大門 + HTTPS + Firewall」
你 server 只是「內部房間」

所以 https://n8n.stackpenguin.com 是 Cloudflare 給 HTTPS
不是你自己做 HTTPS

骨架圖(秒懂)

🌍 User Browser
↓ https://n8n.stackpenguin.com
Cloudflare Edge (SSL / Firewall / CDN)
↓ Tunnel (Secure connection)
Linode VM
↓ localhost:5678
n8n dashboard
🌍 User Browser
↓ https://n8n.stackpenguin.com
Cloudflare Edge (SSL / Firewall / CDN)
↓ Tunnel (Secure connection)
Linode VM
↓ localhost:5678
n8n dashboard

現在有什麼?

已經跑在:

💠 Cloudflare Zero Trust Tunnel
💠 隱藏原始 IP
💠 強制 HTTPS
💠 密碼保護 (Basic Auth)
💠 沒開任何 external port(最安全)

你走的不是傳統 Web Hosting
你走的是 Zero Trust Architecture

如何在 Linode 用 Docker 架設 n8n
/posts/如何在-linode-用-docker-架設-n8n/
作者
鈞凱
發布於
2025-11-05
授權條款
CC BY-NC-SA 4.0

部分資訊可能已經過時