ลดความยุ่งยากในการใช้คลาวด์ พูดคุยกับเจ้าหน้าที่

ติดตั้ง n8n ทำระบบอัตโนมัติบน Cloud VPS
Home ติดตั้ง n8n ทำระบบอัตโนมัติบน Cloud VPS

ติดตั้ง n8n ทำระบบอัตโนมัติบน Cloud VPS

n8n คือเครื่องมือเชื่อมระบบต่าง ๆ เข้าด้วยกันแบบลากวาง เช่น เมื่อมีคนกรอกฟอร์มบนเว็บ ให้บันทึกลง Google Sheets ส่งแจ้งเตือนเข้า LINE และสร้างงานใน Trello โดยไม่ต้องเขียนโค้ดเชื่อมเอง

ข้อดีของการติดตั้งบนเซิร์ฟเวอร์ตัวเองเทียบกับบริการสำเร็จรูปคือไม่มีขีดจำกัดจำนวนการทำงานต่อเดือน และข้อมูลที่ไหลผ่านไม่ออกนอกองค์กร ซึ่งสำคัญเมื่อมีข้อมูลลูกค้าเกี่ยวข้อง

สิ่งที่ต้องเตรียม

  • Cloud VPS ที่มี RAM อย่างน้อย 2 GB
  • โดเมนที่ชี้มาที่เซิร์ฟเวอร์แล้ว จำเป็นสำหรับ Webhook
  • Docker และ Docker Compose

ขั้นตอนที่ 1: เตรียมไฟล์

sudo mkdir -p /opt/n8n/{data,db,files}
cd /opt/n8n
sudo nano .env
DOMAIN=n8n.example.com
GENERIC_TIMEZONE=Asia/Bangkok
TZ=Asia/Bangkok

POSTGRES_USER=n8n
POSTGRES_PASSWORD=รหัสผ่านที่ยาวและสุ่ม
POSTGRES_DB=n8n

N8N_BASIC_AUTH_ACTIVE=true
N8N_BASIC_AUTH_USER=admin
N8N_BASIC_AUTH_PASSWORD=รหัสผ่านผู้ดูแล

# กุญแจเข้ารหัสข้อมูลรับรองที่บันทึกไว้ สร้างครั้งเดียวแล้วห้ามเปลี่ยน
N8N_ENCRYPTION_KEY=สตริงสุ่มยาว 32 ตัวอักษรขึ้นไป
openssl rand -hex 32
sudo chmod 600 .env

เก็บ N8N_ENCRYPTION_KEY ไว้นอกเครื่องทันที ข้อมูลรับรองทั้งหมดที่บันทึกไว้ใน n8n ถูกเข้ารหัสด้วยกุญแจนี้ หากหายไปจะต้องกรอกรหัสผ่านของทุกบริการใหม่ทั้งหมด

ขั้นตอนที่ 2: เขียนไฟล์ Compose

sudo nano docker-compose.yml
services:
  db:
    image: postgres:16-alpine
    restart: unless-stopped
    environment:
      POSTGRES_USER: ${POSTGRES_USER}
      POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}
      POSTGRES_DB: ${POSTGRES_DB}
    volumes:
      - ./db:/var/lib/postgresql/data
    healthcheck:
      test: ["CMD-SHELL", "pg_isready -U ${POSTGRES_USER}"]
      interval: 10s
      retries: 5

  n8n:
    image: n8nio/n8n:latest
    restart: unless-stopped
    depends_on:
      db:
        condition: service_healthy
    ports:
      - "127.0.0.1:5678:5678"
    environment:
      DB_TYPE: postgresdb
      DB_POSTGRESDB_HOST: db
      DB_POSTGRESDB_DATABASE: ${POSTGRES_DB}
      DB_POSTGRESDB_USER: ${POSTGRES_USER}
      DB_POSTGRESDB_PASSWORD: ${POSTGRES_PASSWORD}

      N8N_HOST: ${DOMAIN}
      N8N_PORT: 5678
      N8N_PROTOCOL: https
      WEBHOOK_URL: https://${DOMAIN}/
      N8N_EDITOR_BASE_URL: https://${DOMAIN}/

      N8N_BASIC_AUTH_ACTIVE: ${N8N_BASIC_AUTH_ACTIVE}
      N8N_BASIC_AUTH_USER: ${N8N_BASIC_AUTH_USER}
      N8N_BASIC_AUTH_PASSWORD: ${N8N_BASIC_AUTH_PASSWORD}
      N8N_ENCRYPTION_KEY: ${N8N_ENCRYPTION_KEY}

      GENERIC_TIMEZONE: ${GENERIC_TIMEZONE}
      TZ: ${TZ}

      # ลบประวัติการทำงานเก่าอัตโนมัติ ไม่ให้ฐานข้อมูลโตไม่หยุด
      EXECUTIONS_DATA_PRUNE: "true"
      EXECUTIONS_DATA_MAX_AGE: 336
      EXECUTIONS_DATA_SAVE_ON_SUCCESS: none
      EXECUTIONS_DATA_SAVE_ON_ERROR: all
    volumes:
      - ./data:/home/node/.n8n
      - ./files:/files

ค่า EXECUTIONS_DATA_SAVE_ON_SUCCESS: none สำคัญมาก หากเก็บประวัติของทุกการทำงานที่สำเร็จ ฐานข้อมูลจะโตหลายกิกะไบต์ภายในไม่กี่สัปดาห์สำหรับ Workflow ที่ทำงานถี่

ขั้นตอนที่ 3: เริ่มและตั้ง Nginx

sudo docker compose up -d
sudo docker compose logs -f n8n
sudo nano /etc/nginx/sites-available/n8n
server {
    listen 80;
    server_name n8n.example.com;
    client_max_body_size 100M;

    location / {
        proxy_pass http://127.0.0.1:5678;
        proxy_set_header Host              $host;
        proxy_set_header X-Real-IP         $remote_addr;
        proxy_set_header X-Forwarded-For   $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;

        # จำเป็นสำหรับหน้าจอแก้ไข Workflow ที่ใช้ WebSocket
        proxy_http_version 1.1;
        proxy_set_header Upgrade    $http_upgrade;
        proxy_set_header Connection "upgrade";

        proxy_read_timeout 600s;
        proxy_buffering off;
    }
}
sudo ln -s /etc/nginx/sites-available/n8n /etc/nginx/sites-enabled/
sudo nginx -t && sudo systemctl reload nginx
sudo certbot --nginx -d n8n.example.com --agree-tos -m [email protected] --redirect

ขั้นตอนที่ 4: สร้าง Workflow แรก

เปิด https://n8n.example.com เข้าสู่ระบบด้วยบัญชีที่ตั้งไว้ แล้วสร้าง Workflow ทดสอบ

  • เพิ่ม Node ชนิด Webhook เป็นจุดเริ่ม คัดลอก URL ที่ได้
  • เพิ่ม Node ชนิด Set เพื่อจัดรูปข้อมูล
  • เพิ่ม Node ปลายทาง เช่น ส่งอีเมลหรือบันทึกลงฐานข้อมูล
  • กด Execute Workflow แล้วยิงคำขอเข้ามาทดสอบ
curl -X POST https://n8n.example.com/webhook-test/abc123 \
  -H 'Content-Type: application/json' \
  -d '{"name":"สมชาย","email":"[email protected]"}'

เมื่อทดสอบผ่านแล้วกด Active เพื่อเปิดใช้งานจริง URL จะเปลี่ยนจาก webhook-test เป็น webhook

ขั้นตอนที่ 5: ตั้งสำรองข้อมูล

sudo nano /usr/local/bin/n8n-backup.sh
#!/bin/bash
set -euo pipefail
cd /opt/n8n
source .env

DEST=/var/backups/n8n
STAMP=$(date +%F-%H%M)
mkdir -p "$DEST"

docker compose exec -T db pg_dump -U "$POSTGRES_USER" "$POSTGRES_DB" \
  | gzip > "$DEST/db-$STAMP.sql.gz"

tar czf "$DEST/data-$STAMP.tar.gz" ./data

find "$DEST" -name '*.gz' -mtime +30 -delete
echo "n8n backup ok: $STAMP"

ส่งออก Workflow เป็นไฟล์แยกด้วย เพื่อให้เก็บใน Git ได้

sudo docker compose exec -T n8n n8n export:workflow --all --output=/files/workflows.json
sudo docker compose exec -T n8n n8n export:credentials --all --decrypted=false --output=/files/credentials.json

ขั้นตอนที่ 6: อัปเดต

cd /opt/n8n
sudo /usr/local/bin/n8n-backup.sh
sudo docker compose pull
sudo docker compose up -d
sudo docker compose logs -f n8n

อ่านบันทึกการเปลี่ยนแปลงก่อนอัปเดตเสมอ n8n มีการเปลี่ยนแปลงที่กระทบ Workflow เดิมเป็นครั้งคราว

ปัญหาที่พบบ่อย

Webhook จากภายนอกเรียกไม่ได้

ตรวจว่าตั้ง WEBHOOK_URL เป็นโดเมนจริงแล้ว และตรวจว่า URL ที่คัดลอกไปใช้เป็นแบบ production ไม่ใช่ webhook-test ซึ่งทำงานเฉพาะตอนกด Execute

หน้าจอแก้ไขค้างหรือไม่อัปเดต

Nginx ไม่ได้ส่งต่อ WebSocket ตรวจว่ามี proxy_http_version 1.1 และ header Upgrade กับ Connection ตามคอนฟิกในขั้นตอนที่ 3

ข้อมูลรับรองเปิดไม่ได้หลังย้ายเครื่อง

N8N_ENCRYPTION_KEY ไม่ตรงกับเครื่องเดิม ต้องใช้กุญแจเดียวกันเสมอ หากหายไปจริง ต้องกรอกข้อมูลรับรองใหม่ทั้งหมด

ฐานข้อมูลโตเร็วมาก

ตั้งค่าการลบประวัติตามขั้นตอนที่ 2 และตรวจขนาดด้วย

sudo docker compose exec -T db psql -U n8n -c "SELECT pg_size_pretty(pg_database_size('n8n'));"

ต้องการ Cloud VPS ที่พร้อมรันระบบอัตโนมัติขององค์กร ติดต่อ THAI DATA CLOUD ได้ที่ https://thaidata.cloud/contact/

ผู้ให้บริการคลาวด์ไทย
เพื่อธุรกิจของคนไทย

"มุ่งมั่น" และ "มั่นคง"
พร้อมรับมือทุกการเติบโต
Trust Cloud
คลาว์ที่ปลอดภัย
คือรากฐานที่มั่นคง
cloud security