tva
← บทความเชิงลึก

ติดตั้งและดูแล n8n เองบน Hetzner Cloud: คู่มือตั้งค่า Docker ฉบับสมบูรณ์

ระบบอัตโนมัติสำหรับเวิร์กโฟลว์กลายเป็นสิ่งจำเป็นสำหรับธุรกิจสมัยใหม่ แต่โซลูชัน SaaS อาจมีราคาแพงขึ้นเมื่อทีมเติบโต เราจะแสดงวิธีตั้งค่าอินสแตนซ์ n8n ของคุณเองบน Hetzner Cloud ในราคาประมาณ €6/เดือน บวกค่าโดเมน (ณ เดือนตุลาคม 2026) ให้คุณมีเวิร์กโฟลว์ไม่จำกัดและควบคุมแพลตฟอร์มอัตโนมัติของคุณได้อย่างเต็มที่

สิ่งที่คุณจะสร้าง

เมื่อทำตามคู่มือนี้ครบ คุณจะมี:

  • การติดตั้ง n8n ที่ทำงานได้อย่างสมบูรณ์พร้อม HTTPS
  • ใบรับรอง SSL อัตโนมัติผ่าน Let’s Encrypt
  • การเชื่อมต่ออีเมลสำหรับบัญชีผู้ใช้
  • การเริ่มต้นอัตโนมัติหลังจากรีสตาร์ทเซิร์ฟเวอร์
  • การตั้งค่าที่เป็นพื้นฐานที่มั่นคงสำหรับการใช้งานระดับมืออาชีพ ซึ่งคุณสามารถเสริมความปลอดภัยเพิ่มเติมสำหรับสภาพแวดล้อมใช้งานจริงได้

ค่าใช้จ่ายรายเดือน: €5.99 (เซิร์ฟเวอร์ CX23 ไม่รวม VAT รวมที่อยู่ IPv4 หลักหนึ่งที่อยู่ ณ เดือนตุลาคม 2026) + ค่าโดเมน

ข้อกำหนดเบื้องต้น

  • ชื่อโดเมนที่ชี้ไปยัง IP เซิร์ฟเวอร์ของคุณ
  • ความรู้พื้นฐานเกี่ยวกับบรรทัดคำสั่ง
  • บัญชี Hetzner Cloud

ขั้นตอนที่ 1: การตั้งค่าเซิร์ฟเวอร์

สร้างเซิร์ฟเวอร์ Hetzner Cloud

  1. เข้าสู่ระบบ Hetzner Cloud Console
  2. สร้างโครงการใหม่
  3. เพิ่มเซิร์ฟเวอร์ด้วยข้อมูลจำเพาะเหล่านี้:
    • Image: Ubuntu 24.04 LTS
    • ประเภท: CX23 (2 vCPU, 4 GB RAM, ดิสก์ 40 GB) โดย Hetzner ยุติการรับคำสั่งซื้อ CX11 ใหม่ในเดือนกันยายน 2024 และความพร้อมให้บริการของแพ็กเกจที่ปรับต้นทุนให้เหมาะสมจะแตกต่างกันตามที่ตั้ง
    • สถานที่: เลือกที่ใกล้ผู้ใช้ของคุณที่สุด
    • SSH Key: เพิ่มกุญแจสาธารณะของคุณ

การกำหนดค่าเซิร์ฟเวอร์เบื้องต้น

เชื่อมต่อกับเซิร์ฟเวอร์ของคุณ:

ssh root@YOUR_SERVER_IP

อัปเดตระบบ:

apt update && apt upgrade -y

ขั้นตอนที่ 2: ติดตั้ง Docker

ติดตั้ง Docker และ Docker Compose:

# Install dependencies
apt install apt-transport-https ca-certificates curl software-properties-common gnupg -y

# Add Docker GPG key
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg

# Add Docker repository
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | tee /etc/apt/sources.list.d/docker.list > /dev/null

# Install Docker
apt update
apt install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin -y

# Create Docker network for our services
docker network create proxy

ตรวจสอบการติดตั้ง Docker:

docker --version
docker compose version

ขั้นตอนที่ 3: กำหนดค่า Traefik Reverse Proxy

สร้างโครงสร้างไดเรกทอรี:

mkdir -p /opt/traefik/data
cd /opt/traefik

สร้างไฟล์กำหนดค่า Traefik:

nano /opt/traefik/data/traefik.yml

เพิ่มการกำหนดค่านี้:

api:
  dashboard: false

entryPoints:
  http:
    address: ":80"
    http:
      redirections:
        entryPoint:
          to: https
          scheme: https
  https:
    address: ":443"

providers:
  docker:
    endpoint: "unix:///var/run/docker.sock"
    exposedByDefault: false

certificatesResolvers:
  letsencrypt:
    acme:
      email: [email protected]  # Change this!
      storage: acme.json
      httpChallenge:
        entryPoint: http

สร้างไฟล์ acme.json สำหรับใบรับรอง SSL:

touch /opt/traefik/data/acme.json
chmod 600 /opt/traefik/data/acme.json

สร้างไฟล์ Traefik Docker Compose:

nano /opt/traefik/docker-compose.yml

เพิ่มการกำหนดค่านี้:

version: '3'

services:
  traefik:
    image: traefik:v3.4
    container_name: traefik
    restart: always
    ports:
      - "80:80"
      - "443:443"
    networks:
      - proxy
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock:ro
      - ./data/traefik.yml:/etc/traefik/traefik.yml
      - ./data/acme.json:/acme.json
    labels:
      - "traefik.enable=true"

networks:
  proxy:
    external: true

ขั้นตอนที่ 4: ตั้งค่า SMTP Relay (ไม่บังคับแต่แนะนำ)

สร้างไดเรกทอรี mailserver:

mkdir -p /opt/mailserver
cd /opt/mailserver

สร้างไฟล์ Docker Compose:

nano /opt/mailserver/docker-compose.yml

เพิ่มการกำหนดค่านี้:

version: '3'

services:
  mailserver:
    image: bytemark/smtp
    restart: always
    networks:
      - proxy
    environment:
      - RELAY_HOST=smtp.gmail.com  # Change to your SMTP provider
      - RELAY_PORT=587
      - [email protected]  # Change this
      - RELAY_PASSWORD=your-app-password     # Change this
      - MAILNAME=mail.yourdomain.com         # Change this

networks:
  proxy:
    external: true

หมายเหตุ: n8n เชื่อมต่อกับรีเลย์ผ่านเครือข่าย proxy ที่ใช้ร่วมกัน รีเลย์จึงไม่เผยแพร่พอร์ตใด ๆ พอร์ตที่เผยแพร่ผ่าน Docker จะข้ามกฎของ UFW จึงควรเพิ่มพอร์ตเฉพาะเมื่อมีโฮสต์อื่นที่ต้องส่งข้อความผ่านรีเลย์ MAILNAME ใช้กำหนดชื่อโฮสต์เมลของรีเลย์ สำหรับ Gmail คุณจะต้อง:

  1. เปิดใช้งานการยืนยันตัวตนสองขั้นตอน
  2. สร้าง App Password
  3. ใช้ App Password (ไม่ใช่รหัสผ่านปกติของคุณ)

ขั้นตอนที่ 5: กำหนดค่า n8n

สร้างไดเรกทอรี n8n คอนเทนเนอร์ n8n ทำงานด้วยผู้ใช้ node (UID 1000) ดังนั้นต้องตรวจสอบว่าผู้ใช้นี้มีสิทธิ์เขียนในโฟลเดอร์ data ที่เมานต์แบบ bind mount เช่น ใช้คำสั่ง mkdir -p /opt/n8n/data && chown -R 1000:1000 /opt/n8n/data:

mkdir -p /opt/n8n
cd /opt/n8n

สร้างไฟล์ Docker Compose:

nano /opt/n8n/docker-compose.yml

เพิ่มการกำหนดค่านี้:

version: '3'

services:
  n8n:
    image: n8nio/n8n:1.95.2
    restart: always
    environment:
      - N8N_HOST=n8n.yourdomain.com          # Change this!
      - NODE_ENV=production
      - N8N_PROTOCOL=https
      - N8N_PORT=5678
      - N8N_EDITOR_BASE_URL=https://n8n.yourdomain.com  # Change this!
      
      # Email configuration
      - N8N_EMAIL_MODE=smtp
      - N8N_SMTP_HOST=mailserver
      - N8N_SMTP_PORT=25
      - N8N_SMTP_SSL=false
      - N8N_SMTP_USER=
      - N8N_SMTP_PASS=
      - [email protected]  # Change this!
      
      # Important fixes for proxy setup
      - N8N_PROXY_HOPS=1
      - N8N_RUNNERS_ENABLED=true
      
    volumes:
      - ./data:/home/node/.n8n
    networks:
      - proxy
    labels:
      - "traefik.enable=true"
      - "traefik.http.routers.n8n.rule=Host(`n8n.yourdomain.com`)"  # Change this!
      - "traefik.http.routers.n8n.entrypoints=https"
      - "traefik.http.routers.n8n.tls.certresolver=letsencrypt"
      - "traefik.http.services.n8n.loadbalancer.server.port=5678"

networks:
  proxy:
    external: true

ขั้นตอนที่ 6: สร้างบริการ Systemd สำหรับการเริ่มต้นอัตโนมัติ

บริการ Traefik

nano /etc/systemd/system/traefik-docker.service

เพิ่มการกำหนดค่านี้:

[Unit]
Description=Traefik Docker Compose
Requires=docker.service
After=docker.service

[Service]
Type=oneshot
RemainAfterExit=yes
WorkingDirectory=/opt/traefik
ExecStart=/usr/bin/docker compose up -d
ExecStop=/usr/bin/docker compose down

[Install]
WantedBy=multi-user.target

บริการเซิร์ฟเวอร์อีเมล

nano /etc/systemd/system/mailserver-docker.service

เพิ่มการกำหนดค่านี้:

[Unit]
Description=Mailserver Docker Compose
Requires=docker.service
After=docker.service
Before=n8n-docker.service

[Service]
Type=oneshot
RemainAfterExit=yes
WorkingDirectory=/opt/mailserver
ExecStart=/usr/bin/docker compose up -d
ExecStop=/usr/bin/docker compose down

[Install]
WantedBy=multi-user.target

บริการ n8n

nano /etc/systemd/system/n8n-docker.service

เพิ่มการกำหนดค่านี้:

[Unit]
Description=n8n Docker Compose
Requires=docker.service
After=docker.service traefik-docker.service mailserver-docker.service
Wants=network-online.target

[Service]
Type=oneshot
RemainAfterExit=yes
WorkingDirectory=/opt/n8n
ExecStartPre=/bin/bash -c 'until docker container inspect traefik > /dev/null 2>&1; do sleep 2; done'
ExecStart=/usr/bin/docker compose up -d
ExecStop=/usr/bin/docker compose down
Restart=on-failure
RestartSec=30
TimeoutStartSec=180

[Install]
WantedBy=multi-user.target

เปิดใช้งานและเริ่มบริการ

# Reload systemd daemon
systemctl daemon-reload

# Enable services to start on boot
systemctl enable traefik-docker.service
systemctl enable mailserver-docker.service
systemctl enable n8n-docker.service

# Start services
systemctl start traefik-docker.service
sleep 10
systemctl start mailserver-docker.service
sleep 10
systemctl start n8n-docker.service

ขั้นตอนที่ 7: การกำหนดค่า DNS

ชี้โดเมนของคุณไปยังเซิร์ฟเวอร์:

  1. ไปที่ผู้ให้บริการโดเมน/DNS ของคุณ
  2. สร้าง A record:
    • ชื่อ: n8n
    • ประเภท: A
    • ค่า: YOUR_SERVER_IP
    • TTL: 300 (หรือค่าต่ำสุดที่อนุญาต)

รอการกระจาย DNS (อาจใช้เวลาถึง 24 ชั่วโมง โดยปกติเร็วกว่ามาก)

ขั้นตอนที่ 8: ทดสอบการติดตั้ง

ตรวจสอบว่าบริการกำลังทำงาน:

docker ps

คุณควรเห็นคอนเทนเนอร์สามตัวที่กำลังทำงาน: traefik, mailserver และ n8n

เปิดอินสแตนซ์ n8n ของคุณ:

https://n8n.yourdomain.com

คุณควรเห็นหน้าตั้งค่า n8n ผ่าน HTTPS โดยเบราว์เซอร์แสดงว่าใบรับรองถูกต้อง

การแก้ไขปัญหาที่พบบ่อย

ใบรับรอง SSL ไม่ทำงาน

ตรวจสอบบันทึกของ Traefik:

docker logs traefik

สาเหตุทั่วไป:

  • DNS ไม่ได้ชี้ไปยังเซิร์ฟเวอร์
  • ไฟร์วอลล์ บล็อกพอร์ต 80/443
  • โดเมนผิดในการกำหนดค่า

เข้าถึง n8n ไม่ได้

ตรวจสอบบันทึกของ n8n:

docker logs n8n-n8n-1

การแก้ไขทั่วไป:

  • ตรวจสอบว่าการกำหนดค่าโดเมนตรงกันในทุกไฟล์
  • ตรวจสอบว่า คอนเทนเนอร์ ทั้งหมดอยู่ในเครือข่ายเดียวกัน
  • หากบันทึกแสดง ERR_ERL_UNEXPECTED_X_FORWARDED_FOR ให้ตรวจสอบว่าตั้งค่า N8N_PROXY_HOPS=1 ไว้ตามการกำหนดค่าด้านบน ซึ่งเอกสาร n8n ระบุไว้สำหรับการทำงานหลัง reverse proxy

อีเมลไม่ทำงาน

ตรวจสอบบันทึกของ mailserver:

docker logs mailserver-mailserver-1

ตรวจสอบข้อมูลรับรอง SMTP และการตั้งค่า

บริการไม่เริ่มต้นหลังรีบูต

ตรวจสอบสถานะบริการ:

systemctl status traefik-docker.service
systemctl status n8n-docker.service

รีสตาร์ทหากจำเป็น:

systemctl restart traefik-docker.service
systemctl restart n8n-docker.service

การบำรุงรักษาและการอัปเดต

การบำรุงรักษาประจำ

การตรวจสอบรายสัปดาห์:

# Check container status
docker ps

# Check disk space
df -h

# Check logs for errors
docker logs n8n-n8n-1 | grep -i error

การอัปเดตรายเดือน:

# Update container images
cd /opt/n8n && docker compose pull && docker compose up -d
cd /opt/traefik && docker compose pull && docker compose up -d
cd /opt/mailserver && docker compose pull && docker compose up -d

# Clean up old images
docker system prune -f

สำรองข้อมูลของคุณ

สร้างสคริปต์สำรองข้อมูล ฐานข้อมูล SQLite ที่ใช้เป็นค่าเริ่มต้นจะถูกคัดลอกขณะที่ n8n กำลังทำงาน ดังนั้นให้หยุด n8n ชั่วครู่ หรือสำรองข้อมูลในช่วงที่มีกิจกรรมน้อยเพื่อหลีกเลี่ยงสำเนาที่มีข้อมูลไม่สอดคล้องกัน และทดสอบการกู้คืนก่อนพึ่งพาข้อมูลสำรองนี้:

nano /opt/backup-n8n.sh

เพิ่มเนื้อหานี้:

#!/bin/bash
mkdir -p /opt/backups
tar -czf /opt/backups/n8n-backup-$(date +%Y%m%d).tar.gz /opt/n8n/data
find /opt/backups -name "n8n-backup-*.tar.gz" -mtime +30 -delete

ทำให้สามารถรันได้และเพิ่มเข้า cron:

chmod +x /opt/backup-n8n.sh

# Add to crontab (daily backup at 2 AM)
crontab -e
# Add this line:
0 2 * * * /opt/backup-n8n.sh

การเสริมความปลอดภัย

กำหนดค่า ไฟร์วอลล์

# Install UFW
apt install ufw

# Set defaults
ufw default deny incoming
ufw default allow outgoing

# Allow SSH
ufw allow 22

# Allow HTTP/HTTPS
ufw allow 80
ufw allow 443

# Enable firewall
ufw enable

รักษาความปลอดภัย SSH

แก้ไขการกำหนดค่า SSH:

nano /etc/ssh/sshd_config

ทำการเปลี่ยนแปลงเหล่านี้:

PermitRootLogin prohibit-password
PasswordAuthentication no
PubkeyAuthentication yes

รีสตาร์ท SSH:

systemctl restart ssh

ตั้งค่า Fail2Ban

apt install fail2ban

# Copy default configuration
cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local

# Enable and start
systemctl enable fail2ban
systemctl start fail2ban

รายละเอียดค่าใช้จ่าย

ค่าใช้จ่ายรายเดือน:

  • เซิร์ฟเวอร์ Hetzner CX23: €5.99 (ไม่รวม VAT รวมที่อยู่ IPv4 หลักหนึ่งที่อยู่ ณ เดือนตุลาคม 2026)
  • โดเมน (รายปี, แตกต่างกัน): ~€10-15/ปี
  • รวม: ประมาณ €7/เดือน

เทียบกับ n8n Cloud:

  • n8n Starter: €20/เดือน ชำระเป็นรายปี (2,500 ครั้งในการรัน ณ เดือนตุลาคม 2026)
  • n8n Pro: €50/เดือน ชำระเป็นรายปี (10,000 ครั้งในการรัน)
  • ประหยัด: ประมาณ €150–520/ปี

การขยายขนาดการตั้งค่า

n8n หลายอินสแตนซ์

คุณสามารถรันอินสแตนซ์ n8n ที่แยกจากกันหลายตัวสำหรับทีมที่แตกต่างกัน:

สร้าง /opt/n8n-team2/docker-compose.yml:

version: '3'
services:
  n8n-team2:
    image: n8nio/n8n:1.95.2
    restart: always
    environment:
      - N8N_HOST=team2.yourdomain.com
      # ... rest of configuration
    volumes:
      - ./data:/home/node/.n8n
    networks:
      - proxy
    labels:
      - "traefik.enable=true"
      - "traefik.http.routers.n8n-team2.rule=Host(`team2.yourdomain.com`)"
      - "traefik.http.routers.n8n-team2.entrypoints=https"
      - "traefik.http.routers.n8n-team2.tls.certresolver=letsencrypt"
      - "traefik.http.services.n8n-team2.loadbalancer.server.port=5678"

networks:
  proxy:
    external: true

อัปเกรดทรัพยากรเซิร์ฟเวอร์

หากคุณต้องการพลังมากขึ้น อัปเกรดเซิร์ฟเวอร์ Hetzner ของคุณ:

  • CX33: 4 vCPU, 8 GB RAM (€8.99/เดือน ไม่รวม VAT รวมที่อยู่ IPv4 หลักหนึ่งที่อยู่ ณ เดือนตุลาคม 2026)
  • CX43: 8 vCPU, 16 GB RAM (€16.49/เดือน ไม่รวม VAT รวมที่อยู่ IPv4 หลักหนึ่งที่อยู่)

สรุป

ตอนนี้คุณมีการติดตั้ง n8n ที่ทำงานได้ที่มีค่าใช้จ่ายเพียงเศษเสี้ยวของโซลูชันที่โฮสต์ ในขณะที่ให้คุณควบคุมได้อย่างเต็มที่ การตั้งค่าประกอบด้วย HTTPS อัตโนมัติ ฟังก์ชันอีเมล และการจัดการบริการที่แข็งแกร่ง

ประโยชน์หลักของแนวทางนี้:

  • คุ้มค่า: ประหยัดเงินหลายร้อยยูโรต่อปีเมื่อเทียบกับ n8n Cloud
  • ควบคุมเต็มที่: ไม่มีโควตาจำนวนครั้งในการรัน โดยข้อจำกัดขึ้นอยู่กับทรัพยากรของเซิร์ฟเวอร์และ Sustainable Use License ของ n8n
  • ความเป็นส่วนตัว: ข้อมูลเวิร์กโฟลว์และข้อมูลการรันจะอยู่บนเซิร์ฟเวอร์ของคุณ ยกเว้นข้อมูลที่เวิร์กโฟลว์ส่งไปยังบริการภายนอก
  • ปรับแต่งได้: แก้ไขและขยายตามต้องการ

เราได้ใช้งานการกำหนดค่านี้ในสภาพแวดล้อมใช้งานจริง ตัวอย่างของ n8n และ Traefik ระบุเวอร์ชันอิมเมจแบบเจาะจงไว้ หากต้องการอัปเดต ให้เปลี่ยนแท็กเหล่านี้ใน docker-compose.yml แต่ละไฟล์ก่อนรันคำสั่งอัปเดต สำหรับการใช้งานที่สำคัญต่อธุรกิจ ให้ทดสอบการกู้คืนข้อมูลสำรอง และเพิ่มการเฝ้าติดตามระบบ

เกี่ยวกับ tva

tva ดูแลโครงสร้างพื้นฐานของระบบฐานข้อมูล สภาพแวดล้อมคลาวด์ และห่วงโซ่อุปทานทั่วโลกอย่างครบวงจร แนวทางที่เป็นระบบของเราผสานมาตรการรักษาความปลอดภัยที่เข้มงวดกับการเพิ่มประสิทธิภาพ ขณะที่บริการให้คำปรึกษาเชิงกลยุทธ์ช่วยประสานขีดความสามารถด้านดิจิทัลและสินทรัพย์ทางกายภาพอย่างแม่นยำ โดยรักษามาตรฐานสูงสุดด้านการดำเนินงานและการปฏิบัติตามกฎระเบียบตลอดทุกโครงการ

เยี่ยมชม tva.sg สำหรับข้อมูลเพิ่มเติมเกี่ยวกับบริการของเรา

บทความที่เกี่ยวข้อง

บทความที่เกี่ยวข้อง