คู่มือการติดตั้ง 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)
# ติดตั้งแพ็กเกจพื้นฐาน
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.gpgecho \
"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_data2.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
- จากนั้นจะพบ 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) สามารถสร้างได้จากคำสั่งต่อไปนี้
sudo 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 มีโครงสร้างต่อไปนี้
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 ดังแสดง