n8n Thai
by n8n Thai

ตัวแปร Environment ใน n8n: ตั้งค่า Config อย่างมืออาชีพ

คู่มือตั้งค่า Environment Variables สำคัญใน n8n Self-hosted ผ่าน .env file พร้อมรายการตัวแปรที่ควรรู้และวิธีจัดการ Config อย่างปลอดภัย

ตัวแปร Environment ใน n8n: ตั้งค่า Config อย่างมืออาชีพ

เมื่อ n8n ของคุณเริ่มใช้งานจริงจัง ไม่ใช่แค่ทดลอง การตั้งค่า Environment Variables อย่างถูกต้องคือสิ่งที่แยกระหว่าง “ติดตั้งแล้วใช้ไป” กับ “ระบบที่เสถียรและปลอดภัย”

Environment Variables (หรือที่เรียกสั้นๆ ว่า env vars) คือชุดค่า Configuration ที่ส่งให้ n8n ตอนเริ่มต้นทำงาน ควบคุมได้ทุกอย่างตั้งแต่ฐานข้อมูล, การเข้ารหัส, URL ของ instance, ไปจนถึงขีดจำกัดการทำงาน

โครงสร้าง .env File

วิธีที่นิยมที่สุดในการจัดการ env vars คือไฟล์ .env ในโฟลเดอร์เดียวกับ docker-compose.yml

/opt/n8n/
├── docker-compose.yml
├── .env              ← ไฟล์ตั้งค่าทั้งหมดอยู่ที่นี่
└── data/

ใน docker-compose.yml อ้างอิงไฟล์ .env แบบนี้

services:
  n8n:
    image: n8nio/n8n
    env_file:
      - .env

หรือส่งค่าตรงๆ ก็ได้

    environment:
      - N8N_HOST=${N8N_HOST}
      - N8N_PORT=${N8N_PORT}

ตัวแปรหลักที่ควรตั้งตั้งแต่วันแรก

ความปลอดภัยและการเข้ารหัส

# Key สำหรับเข้ารหัส Credentials ใน Database
# สร้างด้วย: openssl rand -hex 32
N8N_ENCRYPTION_KEY=your-32-char-random-string-here

# ถ้าใช้ Basic Auth ป้องกัน UI
N8N_BASIC_AUTH_ACTIVE=true
N8N_BASIC_AUTH_USER=admin
N8N_BASIC_AUTH_PASSWORD=strong-password-here

N8N_ENCRYPTION_KEY สำคัญมาก ถ้าเปลี่ยนค่านี้ภายหลัง Credentials ที่บันทึกไว้ทั้งหมดจะใช้ไม่ได้ เก็บค่านี้ไว้ให้ดี

Domain และ URL

# URL ของ n8n instance คุณ (ต้องตรงกับ domain จริง)
N8N_HOST=n8n.yourdomain.com
N8N_PORT=5678
N8N_PROTOCOL=https

# URL ที่ใช้อ้างอิงใน Webhook และ Email
WEBHOOK_URL=https://n8n.yourdomain.com/

WEBHOOK_URL สำคัญมากสำหรับ Webhook Node ถ้าตั้งผิด URL ที่สร้างมาจะผิดทั้งหมด

ฐานข้อมูล

n8n ใช้ SQLite โดย default แต่สำหรับ production ควรเปลี่ยนเป็น PostgreSQL

DB_TYPE=postgresdb
DB_POSTGRESDB_HOST=localhost
DB_POSTGRESDB_PORT=5432
DB_POSTGRESDB_DATABASE=n8n
DB_POSTGRESDB_USER=n8n_user
DB_POSTGRESDB_PASSWORD=db-password-here
DB_POSTGRESDB_SCHEMA=public

ถ้ายังใช้ SQLite (เหมาะสำหรับ personal use)

DB_TYPE=sqlite
DB_SQLITE_DATABASE=/home/node/.n8n/database.sqlite

ตัวแปรควบคุมการทำงาน

# จำนวน Executions ที่รันพร้อมกันได้
EXECUTIONS_PROCESS=main
EXECUTIONS_MODE=regular

# เก็บ Execution history ไว้กี่ชั่วโมง
EXECUTIONS_DATA_SAVE_ON_ERROR=all
EXECUTIONS_DATA_SAVE_ON_SUCCESS=all
EXECUTIONS_DATA_MAX_AGE=336

# Timeout สำหรับแต่ละ Execution (วินาที)
EXECUTIONS_TIMEOUT=3600
EXECUTIONS_TIMEOUT_MAX=7200

# จำกัด Memory ต่อ Execution
NODE_FUNCTION_ALLOW_EXTERNAL=lodash,moment

EXECUTIONS_DATA_MAX_AGE ตั้งเป็น 336 ชั่วโมง (14 วัน) เป็นค่าที่สมดุลระหว่างการ debug กับไม่ให้ Database ใหญ่เกินไป

ตัวแปรสำหรับ Email

ถ้าต้องการให้ n8n ส่ง Email แจ้งเตือนระบบ (เช่น Error notification หรือ Reset password)

N8N_EMAIL_MODE=smtp
N8N_SMTP_HOST=smtp.gmail.com
N8N_SMTP_PORT=465
N8N_SMTP_USER=your-email@gmail.com
N8N_SMTP_PASS=your-app-password
N8N_SMTP_SENDER=your-email@gmail.com
N8N_SMTP_SSL=true

ตัวแปรสำหรับ Queue Mode (Scaling)

สำหรับ instance ที่ต้องรับ load สูง ใช้ Queue mode ร่วมกับ Redis

EXECUTIONS_MODE=queue
QUEUE_BULL_REDIS_HOST=redis
QUEUE_BULL_REDIS_PORT=6379
QUEUE_BULL_REDIS_PASSWORD=redis-password

# จำนวน Worker
QUEUE_WORKER_TIMEOUT=300

ตัวแปร Log และ Debug

# Level: error, warn, info, verbose, debug
N8N_LOG_LEVEL=info

# บันทึก Log ลงไฟล์
N8N_LOG_OUTPUT=file
N8N_LOG_FILE_LOCATION=/home/node/.n8n/logs/n8n.log

# เปิด debug mode (ไม่ควรเปิดใน production)
N8N_LOG_LEVEL=debug

Workflow Variables (ไม่ใช่ Environment Variables)

นอกจาก Environment Variables ที่ตั้งระดับ instance แล้ว n8n ยังมี Workflow Variables ที่ตั้งระดับ Workflow ผ่าน Settings > Variables

ตัวอย่าง Workflow Variables:
- api_base_url = https://api.example.com/v2
- default_language = th
- notify_email = ops@company.com

ใน Expression เรียกใช้ผ่าน {{ $vars.api_base_url }} — ดีกว่า hardcode ค่าซ้ำในหลาย Node เพราะเปลี่ยนที่เดียวได้

แนวปฏิบัติที่ดีในการจัดการ .env

1. ไม่ commit .env ขึ้น Git เด็ดขาด

เพิ่มใน .gitignore

.env
.env.local
.env.production

สร้าง .env.example แทน โดยใส่แค่ชื่อตัวแปรไม่ใส่ค่าจริง

N8N_ENCRYPTION_KEY=
N8N_HOST=
WEBHOOK_URL=
DB_POSTGRESDB_PASSWORD=

2. แยก .env ตาม Environment

.env.development   ← ค่าสำหรับ dev เครื่อง local
.env.staging       ← ค่าสำหรับ test server
.env.production    ← ค่าจริง production

3. ใช้ Secret Manager สำหรับข้อมูลสำคัญ

ถ้า deploy บน Cloud ควรเก็บค่า secrets ใน AWS Secrets Manager, GCP Secret Manager, หรือ Vault แทนไฟล์ .env และดึงมา inject ตอน runtime

4. Reload หลังเปลี่ยนค่า

n8n อ่านค่า env vars ตอน start เท่านั้น ถ้าเปลี่ยนค่าต้อง restart container

docker compose down && docker compose up -d

ตรวจสอบว่า .env โหลดถูกต้อง

ดู Logs ตอน n8n เริ่มต้น จะเห็นว่า config โหลดค่าอะไรบ้าง

docker compose logs n8n | head -50

หรือถ้าต้องการเช็คในทาง debug ชั่วคราว สามารถใช้ Execute Command Node รัน env | grep N8N (แต่อย่าทิ้งไว้ใน production เพราะอาจ leak ข้อมูล)


อยากเรียน n8n แบบเป็นระบบ ตั้งแต่เริ่มต้นจนสร้าง Workflow ใช้งานจริงได้ ลองดู คอร์สสอน n8n ที่ aiunlock.co

Related posts