N8N วิธีการ Setup | Part 1

n8n

April 24, 2025

N8N คืออะไร

คือ Platform สำหรับทำ workflow automation หรือพูดให้เข้าใจง่าย ๆ ก็คือพวกระบบอัตโนมัติต่าง ๆ นั้นแหละครับ ซึ่งจุดเด่นของเครื่องมือตัวนี้คือเป็น Open Source มีทั้ง version cloud และ self-hosted ให้ใช้งานสำหรับคนที่เป็นห่วงเรื่องความปลอดภัยของข้อมูลครับ อีกทั้งยังเป็น platform ที่อยู่ในรูปแบบของ Low Code หรือ No Code เลยก็ได้ (ในบาง workflows)

ซึ่งผมเองในฐานะของคนที่ชอบเขียนโปรแกรมอยู่แล้ว ต้องบอกเลยว่า "ของดีย์" ครับ ทำให้หลาย ๆ ไอเดียสามารถทำออกมาได้เลย ลดเวลาในการพัฒนาลงได้เยอะครับ ผมเองมองว่าการมีสกิล workflows ติดตัวไว้ถือเป็นข้อได้เปรียบนึงเลยครับ โดยซีรีย์นี้ตั้งใจว่าจะทำออกมาแบ่งเป็น EP ย่อย ๆ ครับแชร์ทริคต่าง ๆ ที่ได้ศึกษามา ยังไงก็ฝากติดตตามด้วยนะครับ เย่ ~

Requirements

  • Docker version 25.x.x ขึ้นไป docker --version
  • Docker Compose version 2.24.x ขึ้นไป (docker compose version)
  • ความรู้พื้นฐาน (มาก ๆ) ของ docker cli

วิธีการติดตั้ง

1. สร้าง Directory และ docker compose file สำหรับทดสอบ

mkdir n8n-labs

cd n8n-labs

2. สร้าง docker compose file

nano docker-compose.yml
services:
  n8n:
    image: docker.n8n.io/n8nio/n8n
    restart: unless-stopped
    ports:
      - '127.0.0.1:5678:5678'
    volumes:
      - n8n_data:/home/node/.n8n
      - n8n_local_files:/files
    environment:
      - N8N_HOST=${SUBDOMAIN}.${DOMAIN_NAME}
      - N8N_PORT=5678
      - N8N_PROTOCOL=https
      - NODE_ENV=production
      - WEBHOOK_URL=https://${WEBHOOK_SUBDOMAIN}.${DOMAIN_NAME}/
      - GENERIC_TIMEZONE=${GENERIC_TIMEZONE}
      - N8N_ENFORCE_SETTINGS_FILE_PERMISSIONS=true

  pg-vector:
    image: pgvector/pgvector:pg17
    restart: unless-stopped
    environment:
      POSTGRES_USER: <username>
      POSTGRES_PASSWORD: <password>
      POSTGRES_DB: n8n-pgvector
    ports:
      - '127.0.0.1:5432:5432'
    volumes:
      - db-pgvector-data:/var/lib/postgresql/data

volumes:
  n8n_data:
  n8n_local_files:
  db-data:
  db-pgvector-data:

โดยในส่วนของ POSTGRES_USER และ POSTGRES_PASSWORD ให้แก้ไขเป็นค่าที่ปลอดภัยได้เลย หรือจะ generate ด้วย openssl ก็ได้เช่นกันครับ

openssl rand -base64 32

หน้าตาหลังจากแก้ไขจะเป็นประมาณนี้

environment:
  POSTGRES_USER: username
  POSTGRES_PASSWORD: VygpX7KBx2LsLTLoIk84YPV+gBsVZzgfMqVm+Kv0ltM=

จากนั้น (หากใช้ nano) แก้ไขไฟล์ให้กด CTRL + X -> Y -> Enter จะเป็นการบันทึกและออกจากไฟล์

3. กำหนดค่าให้ .env

สร้างไฟล์ .env และทำการแก้ไขค่าต่าง ๆ

DOMAIN_NAME, SUBDOMAIN, WEBHOOK_SUBDOMAIN ในส่วนนี้อาจจะปล่อยเป็นค่า default แบบนี้ไปก่อนครับ

NODE_ENV="production"
N8N_PROTOCOL="http" # or https
N8N_DIAGNOSTICS_ENABLED=false
GENERIC_TIMEZONE="Asia/Bangkok"
DOMAIN_NAME=localhost
SUBDOMAIN=
WEBHOOK_SUBDOMAIN=
N8N_RUNNERS_ENABLED=true

EXECUTIONS_DATA_PRUNE=true
EXECUTIONS_DATA_MAX_AGE=168
EXECUTIONS_DATA_PRUNE_MAX_COUNT=50000

PG_USER=<username>
PG_PASSWORD=<password>

จากนั้นสามารถ start docker compose ได้เลยด้วยคำสั่ง

docker compose pull

# [+] Pulling 15/29
# ⠧ pg-vector [⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⠀] Pulling                              13.8s
# ⠧ n8n [⣿⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀] Pulling                                         13.8s

docker compose --env-file .env up --build -d
# อย่าลืม --env-file flag นะครับ

ทดสอบเปิดเข้าใช้งาน

จากนั้นเปิด browser แล้วไปที่ http://localhost:5678/setup ได้เลยครับ

โดยในขั้นตอนนี้เป็น optional ครับ แต่แนะนำให้เอากดรับมาครับ

เรียบร้อยครับ เพียงแค่นี้เราก็จะได้ N8N version self-hosted มาใช้งานแล้วครับ

4. ทดสอบเพิ่ม PGVector เข้าไปยัง N8N

ไปที่เมนู Credential

เลือกเป็น Postgres

กรอกข้อมูล โดยผมจะทำการแก้ชื่อด้านซ้ายบนให้เป็น PG-Vector นะครับ ในช่องของ database ถ้า setup ตามที่ผมแนะนำไว้ก็สามารถใส่เป็นpg-vector (service name ใน docker-compose) และใส่ username, password จากไฟล์ .env และ Database เอามาจากไฟล์ docker-compose ได้เลยครับ

ถ้ากด Save แล้วขึ้น Connection Tested Successfully แสดงว่าใช้งานได้แล้วครับ โดยตัว PG Vector อันนี้จะเป็นตัว Postgres ที่มีการเปิดใช้งาน extension vector ซึ่งเดี๋ยวเราจะเอามาใช้ในการเล่นเกี่ยว LLM ต่อไปนะครับ

สามารถอ่าน Part 2 ต่อได้เลย N8N Part 2