Skip to content

Hosting n8n on DigitalOcean#

คู่มือนี้จะสอนวิธีติดตั้ง n8n แบบ self-host บน DigitalOcean droplet โดยใช้:

  • Caddy (reverse proxy) สำหรับเปิดให้เข้าถึง n8n จากอินเทอร์เน็ต และจัดการ SSL/TLS certificate ให้อัตโนมัติ
  • Docker Compose สำหรับจัดการ container ของแต่ละ service

ความรู้พื้นฐานที่จำเป็นสำหรับการ Self-hosting

การ Self-hosting n8n จำเป็นต้องมีความรู้ทางเทคนิค รวมถึง:

  • การตั้งค่าและกำหนดค่า Server และ Container
  • การจัดการทรัพยากรของแอปพลิเคชันและการปรับขนาด (Scaling)
  • การรักษาความปลอดภัยของ Server และแอปพลิเคชัน
  • การกำหนดค่า n8n

n8n แนะนำให้ผู้ใช้ที่มีความเชี่ยวชาญทำการ Self-hosting การตั้งค่าผิดพลาดอาจนำไปสู่การสูญเสียข้อมูล ปัญหาด้านความปลอดภัย และ Downtime หากคุณไม่มีประสบการณ์ในการจัดการ Server ทาง n8n แนะนำให้ใช้ n8n Cloud แทน

เวอร์ชั่น Latest และ Next

n8n ออกเวอร์ชั่น Minor ใหม่เกือบทุกสัปดาห์ เวอร์ชั่น latest มีไว้สำหรับใช้งานจริง (Production) ส่วน next คือเวอร์ชั่นล่าสุดที่เพิ่งออกมา คุณควรพิจารณา next ว่าเป็นเวอร์ชั่น Beta ซึ่งอาจยังไม่เสถียร หากต้องการรายงานปัญหา โปรดใช้ forum

Current latest: 1.91.2 Current next: 1.92.1

Create a Droplet#

  1. Log in เข้า DigitalOcean
  2. เลือก project ที่จะใช้ หรือ สร้าง project ใหม่
  3. ใน project ของคุณ เลือก Droplets จากเมนู Manage
  4. สร้าง Droplet ใหม่ โดยเลือก Docker image จากแท็บ Marketplace

Droplet resources

ตอนสร้าง Droplet จะมีให้เลือก plan สำหรับการใช้งานทั่วไป เลือกแบบ shared CPU ธรรมดาก็พอ

SSH key or Password

DigitalOcean ให้เลือกได้ว่าจะใช้ SSH key หรือ password-based authentication แนะนำให้ใช้ SSH key เพราะปลอดภัยกว่า

Log in to your Droplet and create new user#

ขั้นตอนต่อไปต้อง SSH เข้าไปที่ Droplet ผ่าน terminal ดูวิธีได้ที่ How to Connect to Droplets with SSH

แนะนำให้สร้าง user ใหม่ ไม่ควรใช้ root

  1. ล็อกอินเป็น root
  2. สร้าง user ใหม่:
    1
    adduser <username>
    
  3. ทำตามขั้นตอนใน CLI เพื่อสร้าง user ให้เสร็จ
  4. ให้สิทธิ์ admin กับ user ใหม่:
    1
    usermod -aG sudo <username>
    
    จากนี้จะใช้ sudo สั่งงานแบบ admin ได้
  5. ตั้งค่า SSH ให้ user ใหม่: Add Public Key Authentication
  6. logout ออกจาก droplet
  7. login ใหม่ด้วย SSH เป็น user ที่สร้าง

Clone configuration repository#

Docker Compose, n8n, และ Caddy ต้องใช้ไฟล์ config หลายไฟล์ สามารถ clone repo ตัวอย่างจาก ที่นี่ ไปไว้ใน home folder ของ user ที่ล็อกอินอยู่

รันคำสั่งนี้เพื่อ clone:

1
git clone https://github.com/n8n-io/n8n-docker-caddy.git

แล้วเข้าไปที่โฟลเดอร์ที่ clone มา:

1
cd n8n-docker-caddy

Default folders and files#

ฝั่ง host (Droplet) จะมี 2 โฟลเดอร์หลักที่ใช้กับ Docker container:

  • caddy_config: เก็บไฟล์ config ของ Caddy
  • local_files: สำหรับไฟล์ที่อัปโหลดหรือเพิ่มผ่าน n8n

Create Docker volumes#

สร้าง Docker volume สำหรับ cache ของ Caddy เพื่อให้ start เร็วขึ้น:

1
sudo docker volume create caddy_data

สร้าง Docker volume สำหรับข้อมูล n8n:

1
sudo docker volume create n8n_data

Set up DNS#

โดยปกติ n8n จะรันบน subdomain ให้สร้าง DNS record ชนิด "A" ชี้ subdomain ไปที่ IP ของ Droplet วิธีการขึ้นกับผู้ให้บริการ DNS ของคุณ ดูข้อมูลพื้นฐานได้ที่ An Introduction to DNS Terminology, Components, and Concepts

Open ports#

n8n เป็น web app ต้องเปิด port 80 (HTTP) และ 443 (HTTPS) ให้เข้าถึงได้

เปิด firewall ด้วยคำสั่ง:

1
2
sudo ufw allow 80
sudo ufw allow 443

Configure n8n#

n8n ต้องการ environment variable บางตัวใน container ตัวอย่างไฟล์ .env มี placeholder ให้แก้ไข

เปิดไฟล์ด้วย:

1
nano .env

ในไฟล์จะมี comment อธิบายว่าต้องแก้ตรงไหน

ดูรายละเอียด environment variable เพิ่มเติมได้ที่ Environment variables

The Docker Compose file#

ไฟล์ Docker Compose (docker-compose.yml) จะกำหนด service ที่ต้องใช้ (Caddy กับ n8n)

  • Caddy: กำหนด port และ volume ที่จะ mount
  • n8n: กำหนด port, environment variable (บางตัวมาจาก .env), และ volume ที่ต้องใช้

โดยปกติไม่ต้องแก้ไขไฟล์นี้ แต่ถ้าอยากดูให้รัน:

1
nano docker-compose.yml

Configure Caddy#

Caddy ต้องรู้ว่าจะ serve domain ไหน และเปิด port อะไร แก้ไขไฟล์ Caddyfile ในโฟลเดอร์ caddy_config

1
nano caddy_config/Caddyfile

เปลี่ยน subdomain ที่เป็น placeholder ให้เป็นของคุณเอง เช่น ถ้าใช้ n8n.example.com ให้แก้ตามนี้ ส่วน n8n ใน reverse_proxy หมายถึง service ที่กำหนดไว้ใน docker-compose.yml:

1
2
3
4
5
n8n.<domain>.<suffix> {
    reverse_proxy n8n:5678 {
      flush_interval -1
    }
}

ถ้าใช้ automate.example.com ก็จะเป็นแบบนี้:

1
2
3
4
5
automate.example.com {
    reverse_proxy n8n:5678 {
      flush_interval -1
    }
}

Start Docker Compose#

เริ่มรัน n8n กับ Caddy ด้วยคำสั่ง:

1
sudo docker compose up -d

อาจใช้เวลาสักครู่

Test your setup#

เปิด browser แล้วเข้า URL ที่ตั้งไว้ใน DNS ใส่ username/password ที่ตั้งไว้ ก็จะเข้าใช้งาน n8n ได้

Stop n8n and Caddy#

หยุด n8n กับ Caddy ด้วยคำสั่ง:

1
sudo docker compose stop

Updating#

หากคุณรัน n8n โดยใช้ไฟล์ Docker Compose ให้ทำตามขั้นตอนเหล่านี้เพื่ออัปเดต n8n:

1
2
3
4
5
6
7
8
# Pull latest version
docker compose pull

# Stop and remove older version
docker compose down

# Start the container
docker compose up -d

Next steps#

  • เรียนรู้เพิ่มเติมเกี่ยวกับ configuring และ scaling n8n
  • หรือสำรวจการใช้งาน n8n: ลองดู Quickstarts