Development

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

วิธีการ Self-hosted N8N ด้วย docker อย่างง่าย

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

Related Articles

Simple Paginate
Development

Simple Paginate

Code ตัวอย่างคือการใช้งานใน Express + Typescript + Mongoose
ตั้งค่าให้สามารถเชื่อมต่อ Local Network ได้ ตอนที่เชื่อม openvpn
Development

ตั้งค่าให้สามารถเชื่อมต่อ Local Network ได้ ตอนที่เชื่อม openvpn

แก้ไขไฟล์ openvpn config หากมีการ import เข้าไปใน openvpn gui แล้วสามารถค้นหาไฟล์การตั้งค่าได้ที่
วิธีการลบ .env file ออกจาก git แบบถูกวิธี
Development

วิธีการลบ .env file ออกจาก git แบบถูกวิธี

สมมติว่าเราเผลอ commit ไฟล์ .env ที่มี API key ไปแล้ว และ push ขึ้น GitHub เราต้องรีบลบมันออกทันที เพราะข้อมูลอาจถูกนำไปใช้ได้