
คู่มือการติดตั้ง 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
เปิดใช้งาน Virtualization ใน BIOS/UEFI (Intel VT-x หรือ AMD-V)
ติดตั้ง WSL2 (ถ้ายังไม่เคยติดตั้ง)
เปิด PowerShell (Run as Administrator)
รัน: wsl --install แล้วรีบูต
ดาวน์โหลดและติดตั้ง Docker Desktop for Windows
หลังติดตั้งเสร็จ เปิด Docker Desktop ให้ขึ'นสถานะ Running
1.2 ติดตั้งบน macOS (Intel / Apple Silicon)
ดาวน์โหลด Docker Desktop for Mac ให้ตรงกับสถาปัตยกรรมเครื่อง
ติดตั้งตามขั้นตอนและอนุญาตสิทธิที่ระบบถาม
เปิด Docker Desktop ให้ขึ้นสถานะ *Running
1.3 ติดตั้งบน Linux (ตัวอย่าง Ubuntu/Debian)
Copy# ติดตั้งแพ็กเกจพื้นฐาน
sudo apt-get update
sudo apt-get install -y ca-certificates curl gnupg lsb-release
Copy# เพิ่ม 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
Copyecho \
"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
Copy# ติดตั้ง 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
Copy# (ทางเลือก) ให้ผู้ใช้ปัจจุบันใช้ docker ได้โดยไม่ต้อง sudo
sudo usermod -aG docker $USER# แล้วออกเข้า shell ใหม่
ตรวจสอบเวอร์ชันของ Docker ที่ติดตั้ง:
Copydocker --version
docker compose version
ติดตั้ง Portainer (Web Interface)
Portainer จะใช้พอร์ต 9000 (HTTP) และ 9443 (HTTPS) โดยดีฟอลต์
2.1 สร้าง Volume สำ หรับข้อมูล Portainer
Copysudo docker volume create portainer_data
2.2 รัน Portainer ด้วย Docker (เดสก์ท็อปหรือเซิร์ฟเวอร์)
Copysudo 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

จากนั้นจะพบ Environment Wizard ให้เลือก Get Start

จะพบกับ local Environment ให้คลิกเลือกใช้ local Environmet นี้

แผนจะให้ Portainer อยู่บนเครือข่ายเดียวกับสแตกอื่น ให้เพิ่มลงเครือข่าย iot_net ภายหลัง (ดูหัวข้อเครือข่ายด้านล่าง)
3) เครือข่าย Docker และ Github Repository
3.1 สร้างเครือข่าย Docker ภายนอก (external network)
เครือข่ายที่อยู่ใน docker-compose คือ iot_net (ต้องสร้างก่อน deploy stacks) สามารถสร้างได้จากคำสั่งต่อไปนี้
Copysudo docker network create iot_net
หากมีอยู่แล้วจะขึ้นข้อความ error ได้ ไม่เป็นไร
หรือสามารถสร้างได้จากใน Portainer UI โดยไปที่เพจ Networks จากนั้นกดปุ่ม Add Networks

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

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
เปิด Portainer Web UI
ไปที่ Stacks → Add Stack → Git repository

จากนั้นกดปุ่ม Deploy the Stack จะพบ Containers ที่ต้องการในเพจ Containers

4.2 cloudflare-stack
ก่อน Deploy Stack นี้ให้ไปที่บัญชี Cloudflare ของเราก่อน จากนั้นเลือก Zero Trust

ใน Zero Trust Home เลือก Networks > Tunnels

กด Create a Tunnel จะพบหน้าจอด้านล่าง เลือก Cloudflare

ระบุชื่อ Tunnel ที่ต้องการ

เมื่อเข้าสู่หน้า Overview เลือก Environment เป็น Docker จากนั้น Copy คำ สั่งที่แนะนำ เก็บไว้

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

เลือกแท๊ป Published application routes

เลือกแท๊ป Published application routes

เปิด Portainer Web UI
ไปที่ Stacks → Add Stack → Git repository

กรอกข้อมูล:
Repository URL: https://github.com/phakkhaphong/Stacks-for-Portainer.git
Compose Path: cloudflare-stack/docker-compose.yml

เลือก ป้อน Environment Variables แบบ Advanced Mode จากนั้นนำ text จากไฟล์ .env.example ใน โฟลเดอร์ /`cloudflare-stack ใน Repository หรือจากบล๊อกด้านล่างนี้

นำ Token ที่คัดลอกไว้ไปใส่ใน ตัวแปร CF_TUNNEL_TOKEN

5. ทดสอบการเข้าถึง
เปิด https://n8n.<your-domain> ในเบราว์เซอร์
ควรพบ UI ของ n8n ดังแสดง


