ติดตั้ง n8n บน Docker พร้อม PostgreSQL และ Cloudflare Tunnel — คู่มือแบบละเอียดทุกขั้นตอน

ติดตั้ง n8n บน Docker พร้อม PostgreSQL และ Cloudflare Tunnel — คู่มือแบบละเอียดทุกขั้นตอน
Sep 11, 2025
n8ndockercomposecloudflaretunnelself-host
ติดตั้ง n8n แบบ self-hosted บน Docker ใช้ PostgreSQL เป็นฐานข้อมูล และเปิดใช้งานผ่าน Cloudflare Tunnel (ไม่ต้องเปิดพอร์ตสู่สาธารณะ)
สารบัญ
- บทนำ
- สิ่งที่ต้องเตรียม
- ติดตั้ง Docker และ Docker Compose (Ubuntu)
- สร้างโฟลเดอร์โปรเจกต์
- สร้างไฟล์
.env - ไฟล์
docker-compose.yml - (วิธีเลือก) สร้าง Cloudflare Tunnel — วิธี A: Tunnel Token (ง่าย) | วิธี B: สร้าง Tunnel แบบ credential file
- ตัวอย่าง
cloudflared/config.yml(optional) - รัน Docker Compose และตรวจสอบ
- ทดสอบการเข้าถึง n8n
- สำรองข้อมูล และกู้คืน
- อัปเดต Container
- การแก้ปัญหาพบบ่อย (Troubleshooting)
- ความปลอดภัยและคำแนะนำเพิ่มเติม
- Appendix — ไฟล์ตัวอย่างทั้งหมดรวมไว้ที่เดียว
1. บทนำ
บทความนี้อธิบายแบบ Step-by-Step ตั้งแต่ติดตั้ง Docker บน Ubuntu, สร้าง Compose, เชื่อม n8n กับ PostgreSQL, และใช้ Cloudflare Tunnel เพื่อเปิดบริการผ่านโดเมนโดยไม่ต้องเปิดพอร์ตสาธารณะ
2. สิ่งที่ต้องเตรียม
- VPS/Server (Ubuntu 24.04 / 25.04 แนะนำ)
- Domain name ที่จัดการผ่าน Cloudflare
- บัญชี Cloudflare (มีสิทธิ์จัดการ Zero Trust / Tunnels)
- สิทธิ์ใช้งาน
sudoบนเซิร์ฟเวอร์
3. ติดตั้ง Docker และ Docker Compose (Ubuntu)
ถ้า server ของคุณมี Docker แล้ว ข้ามมาที่ข้อถัดไปได้เลย
# อัพเดตระบบ
sudo apt update && sudo apt upgrade -y
# ติดตั้ง prerequisite
sudo apt install -y ca-certificates curl gnupg lsb-release
# ติดตั้ง Docker official GPG key และ repo
sudo mkdir -p /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt update
# ติดตั้ง docker engine และ docker compose plugin
sudo apt install -y docker-ce docker-ce-cli containerd.io docker-compose-plugin
# เพิ่ม user ปัจจุบันลงในกลุ่ม docker (ถ้าต้องการ run docker โดยไม่ใช้ sudo)
sudo usermod -aG docker $USER
# หลังรันคำสั่งด้านบน ให้ logout/login อีกครั้ง เพื่อให้สิทธิ์กลุ่มใหม่มีผล
ตรวจสอบ:
docker --version
docker compose version
4. สร้างโฟลเดอร์โปรเจกต์
mkdir -p ~/n8n-docker
cd ~/n8n-docker
mkdir cloudflared
โครงสร้าง:
n8n-docker/
├─ docker-compose.yml
├─ .env
└─ cloudflared/
└─ (config หรือ credential จะถูกวางที่นี่)
5. สร้างไฟล์ .env
# ------------------------
# N8N
# ------------------------
# ใช้ค่าสุ่ม 32 bytes ขึ้นไป (hex/base64 ก็ได้)
# ตัวอย่างสร้างด้วย: openssl rand -hex 32
N8N_ENCRYPTION_KEY=REPLACE_WITH_A_LONG_RANDOM_SECRET
N8N_HOST=n8n.yourdomain.com
TZ=Asia/Bangkok
# ------------------------
# PostgreSQL
# ------------------------
POSTGRES_DB=n8n
POSTGRES_USER=n8n
POSTGRES_PASSWORD=YourStrongPostgresPasswordHere
# ------------------------
# Cloudflare Tunnel
# คัดลอกจาก Cloudflare Zero Trust → Networks → Tunnels → (Tunnel ของคุณ) → Token
# ------------------------
TUNNEL_TOKEN=<YOUR_CLOUDFLARE_TUNNEL_TOKEN>
6. ไฟล์ docker-compose.yml
services:
n8n:
image: docker.n8n.io/n8nio/n8n:latest
restart: unless-stopped
environment:
DB_TYPE: postgresdb
DB_POSTGRESDB_HOST: postgresql
DB_POSTGRESDB_DATABASE: ${POSTGRES_DB}
DB_POSTGRESDB_USER: ${POSTGRES_USER}
DB_POSTGRESDB_PASSWORD: ${POSTGRES_PASSWORD}
NODE_ENV: production
N8N_ENFORCE_SETTINGS_FILE_PERMISSIONS: true
N8N_RUNNERS_ENABLED: true
N8N_HOST: ${N8N_HOST}
GENERIC_TIMEZONE: ${TZ}
TZ: ${TZ}
WEBHOOK_URL: https://${N8N_HOST}
# เพิ่มความปลอดภัยให้ credentials ภายใน n8n (แนะนำอย่างยิ่ง)
N8N_ENCRYPTION_KEY: ${N8N_ENCRYPTION_KEY}
volumes:
- n8n_data:/home/node/.n8n
postgresql:
image: postgres:13
restart: unless-stopped
environment:
POSTGRES_DB: ${POSTGRES_DB}
POSTGRES_USER: ${POSTGRES_USER}
POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}
volumes:
- postgresql_data:/var/lib/postgresql/data
cloudflared:
image: cloudflare/cloudflared:latest
restart: unless-stopped
depends_on:
- n8n
command: tunnel run --token ${TUNNEL_TOKEN}
volumes:
- ./cloudflared:/etc/cloudflared
volumes:
n8n_data:
postgresql_data:
7. รัน Docker Compose
docker compose up -d
docker compose ps
docker compose logs -f cloudflared
8. ทดสอบการเข้าถึง
เปิดเบราว์เซอร์ไปที่ https://n8n.yourdomain.com
9. สำรองข้อมูล
docker compose down
tar -czvf n8n_backup_$(date +%F).tar.gz ./n8n_data ./postgresql_data ./cloudflared
10. อัปเดต Container
docker compose pull
docker compose up -d
11. Troubleshooting
- ตรวจสอบ logs:
docker compose logs -f n8n
docker compose logs -f cloudflared
- ตรวจสอบ DNS ใน Cloudflare ให้ชี้ถูกต้อง
สรุป
คู่มือนี้ครอบคลุมตั้งแต่การติดตั้ง Docker, สร้าง compose สำหรับ n8n + PostgreSQL, และเชื่อม Cloudflare Tunnel เพื่อเข้าถึง n8n ผ่านโดเมนที่ปลอดภัยโดยไม่ต้องเปิด public port