คู่มือการติดตั้ง n8n แบบ Self-Host ด้วย Docker + Portainer และเปิดใช้งานผ่าน Cloudflare Tunnel

มาเรียนรู้การใช้งาน n8n แบบ Self-Host ด้วย Docker + Portainer และเปิดใช้งานผ่าน Cloudflare Tunnel
คู่มือการติดตั้ง n8n แบบ Self-Host ด้วย Docker + Portainer และเปิดใช้งานผ่าน Cloudflare Tunnel
ทักษะ (ระบุได้หลายทักษะ)
คู่มือการติดตั้ง n8n แบบ Self-Host ด้วย Docker + Portainer และเปิดใช้งานผ่าน Cloudflare Tunnel

คู่มือการติดตั้ง n8n แบบ Self-Host ด้วย Docker + Portainer และเปิดใช้งานผ่าน Cloudflare Tunnel

คู่มือนี้ให้งานผ่าน Github Repository ซึ่งประกอบด้วย 2 สแตกหลัก

  • automation-stack/.env สแตกหลักของระบบ (n8n + Postgres + Watchtower) พร้อมไฟล์
  • cloudflare-stack/ สแตก Cloudflared (Cloudflare Tunnel) พร้อมไฟล์ .env

ภาพรวมสถาปัตยกรรม

  • รัน n8n บน Docker (เบื้องหลังใช้ฐานข้อมูล Postgres)
  • ใช้ Portainer เป็น Web UI เพื่อจัดการคอนเทนเนอร์/สแตก
  • ใช้ไฟล์ docker-compose.yml + .env (จาก Github Repositor) เพื่อdeploy
  • เปิดบริการสู่ภายนอกด้วย Cloudflare Tunnel (ไม่ต้องเปิดพอร์ตบนไฟร์วอลล์/เราเตอร์)
  • ทุกคอนเทนเนอร์อยู่ในเครือข่าย Docker เดียวกัน iot_net(external network)

1) การติดตั้งDocker

รองรับ Windows, macOS, และ Linux (x86_64/ARM64)

1.1 ติดตั้งบน Windows 10/11

  1. เปิดใช้งาน Virtualization ใน BIOS/UEFI (Intel VT-x หรือ AMD-V)
  2. ติดตั้ง WSL2 (ถ้ายังไม่เคยติดตั้ง)
  • เปิด PowerShell (Run as Administrator)
  • รัน: wsl --install แล้วรีบูต
  1. ดาวน์โหลดและติดตั้ง Docker Desktop for Windows
  2. หลังติดตั้งเสร็จ เปิด Docker Desktop ให้ขึ'นสถานะ Running

1.2 ติดตั้งบน macOS (Intel / Apple Silicon)

  1. ดาวน์โหลด Docker Desktop for Mac ให้ตรงกับสถาปัตยกรรมเครื่อง
  2. ติดตั้งตามขั้นตอนและอนุญาตสิทธิที่ระบบถาม
  3. เปิด Docker Desktop ให้ขึ้นสถานะ *Running

1.3 ติดตั้งบน Linux (ตัวอย่าง Ubuntu/Debian)

# ติดตั้งแพ็กเกจพื้นฐาน
sudo apt-get update
sudo apt-get install -y ca-certificates curl gnupg lsb-release
# เพิ่ม Docker GPG key และ repo
sudo install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/$(. /etc/os-release; echo
$ID)/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
echo \
"deb [arch=$(dpkg --print-architecture) signedby=/
etc/apt/keyrings/docker.gpg] \
https://download.docker.com/linux/$(. /etc/os-release; echo $ID) \
$(lsb_release -cs) stable" | \
sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
# ติดตั้ง Docker Engine + Compose Plugin
sudo apt-get update
sudo apt-get install -y docker-ce docker-ce-cli containerd.io docker-buildxplugin
docker-compose-plugin
# (ทางเลือก) ให้ผู้ใช้ปัจจุบันใช้ docker ได้โดยไม่ต้อง sudo
sudo usermod -aG docker $USER
# แล้วออกเข้า shell ใหม่

ตรวจสอบเวอร์ชันของ Docker ที่ติดตั้ง:

docker --version
docker compose version

ติดตั้ง Portainer (Web Interface)

Portainer จะใช้พอร์ต 9000 (HTTP) และ 9443 (HTTPS) โดยดีฟอลต์

2.1 สร้าง Volume สำ หรับข้อมูล Portainer

sudo docker volume create portainer_data

2.2 รัน Portainer ด้วย Docker (เดสก์ท็อปหรือเซิร์ฟเวอร์)

sudo docker run -d \
-p 8000:8000 \
-p 9443:9443 \
--name portainer \
--restart=always \
-v /var/run/docker.sock:/var/run/docker.sock \
-v portainer_data:/data \
portainer/portainer-ce:latest

เข้าถึง UI:

  • HTTPS: https://<IP-เครื่องคุณ>:9443 (แนะนำ)
  • ครั้งแรกจะให้ตั้ง Admin password สำหรับ Portainer
ครั้งแรกจะให้ตั้ง Admin password สำหรับ Portainer
  • จากนั้นจะพบ Environment Wizard ให้เลือก Get Start
จากนั้นจะพบ Environment Wizard ให้เลือก Get Start
  • จะพบกับ local Environment ให้คลิกเลือกใช้ local Environmet นี้
จะพบกับ local Environment ให้คลิกเลือกใช้ Local Environment นี้

แผนจะให้ Portainer อยู่บนเครือข่ายเดียวกับสแตกอื่น ให้เพิ่มลงเครือข่าย iot_net ภายหลัง (ดูหัวข้อเครือข่ายด้านล่าง)


3) เครือข่าย Docker และ Github Repository

3.1 สร้างเครือข่าย Docker ภายนอก (external network)

เครือข่ายที่อยู่ใน docker-compose คือ iot_net (ต้องสร้างก่อน deploy stacks) สามารถสร้างได้จากคำสั่งต่อไปนี้

sudo docker network create iot_net

หากมีอยู่แล้วจะขึ้นข้อความ error ได้ ไม่เป็นไร

หรือสามารถสร้างได้จากใน Portainer UI โดยไปที่เพจ Networks จากนั้นกดปุ่ม Add Networks

การ Add network เข้า Network list บน Portainer

จะปรากฎ Create Network ป้อน

  • ชื่อ Network ป้อน iot_net
  • IPv4 Subnet ป้อน 172.20.0.0/16 หรือ Subnet ที่ต้องการ
  • IPv4 Gateway ป้อน 172.20.0.1 หรือ Gateway Address ที่ต้องการ (ต้องเป็น Address ที่ Subnet ที่ระบุก่อนหน้า)
การสร้าง Network ใน Portainer

3.2 Github Repository

Github Repository ที่ใช้ตามลิ้งก์ต่อไปนี้ Stacks for Portainerช่วยกดดาวเป็นกำ ลังใจด้วยนะครับ

Repository มีโครงสร้างต่อไปนี้

automation-stack/
├── docker-compose.yml
sudo docker network create iot_net
ชื่อ Network ป้อน iot_net
IPv4 Subnet ป้อน 172.20.0.0/16 หรือ Subnet ที่ต้องการ
IPv4 Gateway ป้อน 172.20.0.1 หรือ Gateway Address ที่ต้องการ (ต้องเป็น Address ที่
Subnet ที่ระบุก่อนหน้า)
├── .env.example
cloudflare-stack/
├── docker-compose.yml
├── .env.example
smart-home-stack/
├── docker-compose.yml
├── .env.example
├── homeassistant_config/
├── mosquitto_config/
└── zigbee2mqtt/
.gitignore
README.md

Stacks ที่มีอยู่

1. Automation Stack

  • สำหรับระบบ Automation (ตัวอย่าง: n8n, scheduler ฯลฯ)
  • ไฟล์สำคัญ: docker-compose.yml , .env.example

2. Cloudflare Stack

  • สำหรับเชื่อมต่อกับ Cloudflare Tunnel
  • ใช้เพื่อให้เข้าถึง Service ต่าง ๆ ผ่าน HTTPS ฟรี
  • ไฟล์สำคัญ: docker-compose.yml , .env.example

3. Smart Home Stack

  • ไม่ได้ใช้สำหรับงานของเรา

4) การ Deploy ผ่าน Portainer

4.1 automation-stack

  1. เปิด Portainer Web UI
  2. ไปที่ Stacks → Add Stack → Git repository
การใส่ค่าใน Environment Variable
  1. จากนั้นกดปุ่ม Deploy the Stack จะพบ Containers ที่ต้องการในเพจ Containers
Deploy the Stack จะพบ Containers ที่ต้องการในเพจ Containers

4.2 cloudflare-stack

  1. ก่อน Deploy Stack นี้ให้ไปที่บัญชี Cloudflare ของเราก่อน จากนั้นเลือก Zero Trust
ก่อน Deploy Stack นี้ให้ไปที่บัญชี Cloudflare ของเราก่อน จากนั้นเลือก Zero Trust
  1. ใน Zero Trust Home เลือก Networks > Tunnels
ใน Zero Trust Home เลือก Networks > Tunnels
  1. กด Create a Tunnel จะพบหน้าจอด้านล่าง เลือก Cloudflare
กด Create a Tunnel จะพบหน้าจอด้านล่าง เลือก Cloudflare
  1. ระบุชื่อ Tunnel ที่ต้องการ
ระบุชื่อ Tunnel ที่ต้องการ
  1. เมื่อเข้าสู่หน้า Overview เลือก Environment เป็น Docker จากนั้น Copy คำ สั่งที่แนะนำ เก็บไว้
เมื่อเข้าสู่หน้า Overview เลือก Environment เป็น Docker จากนั้น Copy คำ สั่งที่แนะนำ เก็บไว้

จากนั้นคัดลอก token ที่ได้รับ

จากนั้นคัดลอก token ที่ได้รับ
  1. เลือกแท๊ป Published application routes
เลือกแท๊ป Published application routes
  1. เลือกแท๊ป Published application routes
เลือกแท๊ป Published application routes
  1. เปิด Portainer Web UI
  2. ไปที่ Stacks → Add Stack → Git repository
ไปที่ Stacks list
  1. กรอกข้อมูล:
ไปที่ Stacks → Add Stack → Git repository
  1. เลือก ป้อน Environment Variables แบบ Advanced Mode จากนั้นนำ text จากไฟล์ .env.example ใน โฟลเดอร์ /`cloudflare-stack ใน Repository หรือจากบล๊อกด้านล่างนี้
เลือก ป้อน Environment Variables แบบ Advanced Mode
  1. นำ Token ที่คัดลอกไว้ไปใส่ใน ตัวแปร CF_TUNNEL_TOKEN
นำ Token ที่คัดลอกไว้ไปใส่ใน ตัวแปร CF_TUNNEL_TOKEN

5. ทดสอบการเข้าถึง

  • เปิด https://n8n.<your-domain> ในเบราว์เซอร์
  • ควรพบ UI ของ n8n ดังแสดง
หน้าเข้าสู่ระบบของ n8n บน Portainer