下面是整趟 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 → 更新

1
sudo apt update && sudo apt upgrade -y
1
sudo apt update && sudo apt upgrade -y

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

檢查 Docker

1
docker --version
1
docker --version

沒有就安裝

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

檢查 Compose

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

沒有就安裝

1
sudo apt install docker-compose -y
1
sudo apt install docker-compose -y

建立 n8n 工作資料夾

1
2
mkdir -p ~/n8n
cd ~/n8n
1
2
mkdir -p ~/n8n
cd ~/n8n

建立 docker-compose.yml

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
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
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
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)

記得要將防火牆設定允許

1
2
3
4
5
orcajunkai@localhost:~$ sudo ufw allow 5678
Rule added
Rule added (v6)
orcajunkai@localhost:~$ sudo ufw reload
Firewall reloaded
1
2
3
4
5
orcajunkai@localhost:~$ sudo ufw allow 5678
Rule added
Rule added (v6)
orcajunkai@localhost:~$ sudo ufw reload
Firewall reloaded

啟動 n8n

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

Cloudflare Tunnel 登入

安裝 cloudflared

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

登入

1
cloudflared tunnel login
1
cloudflared tunnel login


建 tunnel

1
cloudflared tunnel create n8n
1
cloudflared tunnel create n8n

取得 UUID

建 DNS mapping

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

建 Cloudflare config

1
sudo nano /etc/cloudflared/config.yml
1
sudo nano /etc/cloudflared/config.yml

貼:

1
2
3
4
5
6
7
8
tunnel: <UUID>
credentials-file: /home/orcajunkai/.cloudflared/<UUID>.json
<div></div>
ingress:
- hostname: n8n.stackpenguin.com
service: http://localhost:5678
- service: http_status:404

1
2
3
4
5
6
7
tunnel: <UUID>
credentials-file: /home/orcajunkai/.cloudflared/<UUID>.json

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

啟動 Tunnel

1
2
3
4
sudo cloudflared service install
sudo systemctl enable cloudflared
sudo systemctl start cloudflared
systemctl status cloudflared
1
2
3
4
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

最後驗證

1
2
3
4
5
6
7
8
9
10
11
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>
1
2
3
4
5
6
7
8
9
10
11
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 運作原理

你想知道為啥:

1
2
3
4
5
https://n8n.stackpenguin.com

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

🔥 Cloudflare Tunnel 的核心概念

平常網站流程是:

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

但 Cloudflare Tunnel 是:

1
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

這條指令:

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

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

Cloudflare 幫你塞一條 CNAME 到 DNS:

1
2
3
4
n8n.stackpenguin.com → <Cloudflare Tunnel endpoint>

不是指向你的 Linode IP
是指向 Cloudflare 的 secure gateway

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

你的 /etc/cloudflared/config.yml

1
2
3
ingress:
- hostname: n8n.stackpenguin.com
service: http://localhost:5678
1
2
3
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

骨架圖(秒懂)

1
2
3
4
5
6
7
🌍 User Browser
↓ https://n8n.stackpenguin.com
Cloudflare Edge (SSL / Firewall / CDN)
↓ Tunnel (Secure connection)
Linode VM
↓ localhost:5678
n8n dashboard
1
2
3
4
5
6
7
🌍 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