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

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

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

Sep 11, 2025

n8ndockercomposecloudflaretunnelself-host

ติดตั้ง n8n แบบ self-hosted บน Docker ใช้ PostgreSQL เป็นฐานข้อมูล และเปิดใช้งานผ่าน Cloudflare Tunnel (ไม่ต้องเปิดพอร์ตสู่สาธารณะ)


สารบัญ

  1. บทนำ
  2. สิ่งที่ต้องเตรียม
  3. ติดตั้ง Docker และ Docker Compose (Ubuntu)
  4. สร้างโฟลเดอร์โปรเจกต์
  5. สร้างไฟล์ .env
  6. ไฟล์ docker-compose.yml
  7. (วิธีเลือก) สร้าง Cloudflare Tunnel — วิธี A: Tunnel Token (ง่าย) | วิธี B: สร้าง Tunnel แบบ credential file
  8. ตัวอย่าง cloudflared/config.yml (optional)
  9. รัน Docker Compose และตรวจสอบ
  10. ทดสอบการเข้าถึง n8n
  11. สำรองข้อมูล และกู้คืน
  12. อัปเดต Container
  13. การแก้ปัญหาพบบ่อย (Troubleshooting)
  14. ความปลอดภัยและคำแนะนำเพิ่มเติม
  15. 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