tva
← Insights

การโฮสต์ n8n ด้วยตัวเองบน Hetzner Cloud: บทเรียนการตั้งค่า Docker ฉบับสมบูรณ์

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

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

เมื่อจบบทเรียนนี้ คุณจะมี:

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

ค่าใช้จ่ายรายเดือน: €4.51 (เซิร์ฟเวอร์ CX11) + ค่าโดเมน

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

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

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

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

  1. เข้าสู่ระบบ Hetzner Cloud Console
  2. สร้างโปรเจกต์ใหม่
  3. เพิ่มเซิร์ฟเวอร์ด้วยข้อมูลจำเพาะเหล่านี้:
    • Image: Ubuntu 24.04 LTS
    • ประเภท: CX11 (1 vCPU, 4 GB RAM, 20 GB disk)
    • สถานที่: เลือกที่ใกล้ผู้ใช้ของคุณที่สุด
    • SSH Key: เพิ่ม public 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: your-email@example.com  # 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:latest
    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
      - RELAY_USERNAME=your-email@gmail.com  # Change this
      - RELAY_PASSWORD=your-app-password     # Change this
      - MAIL_DOMAIN=yourdomain.com           # Change this
    ports:
      - "25:25"

networks:
  proxy:
    external: true

หมายเหตุ: สำหรับ Gmail คุณจะต้อง:

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

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

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

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

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

nano /opt/n8n/docker-compose.yml

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

version: '3'

services:
  n8n:
    image: n8nio/n8n:latest
    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=
      - N8N_SMTP_SENDER=noreply@yourdomain.com  # Change this!
      
      # Important fixes for proxy setup
      - N8N_TRUST_PROXY_HEADER=true
      - 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

บริการ Mailserver

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

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

เยี่ยมชม n8n instance ของคุณ:

https://n8n.yourdomain.com

คุณควรเห็นหน้าตั้งค่า n8n พร้อมไอคอนล็อกสีเขียว (HTTPS ทำงานแล้ว)

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

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

ตรวจสอบ Traefik logs:

docker logs traefik

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

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

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

ตรวจสอบ n8n logs:

docker logs n8n-n8n-1

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

  • ตรวจสอบว่าการกำหนดค่าโดเมนตรงกันในทุกไฟล์
  • ตรวจสอบว่า containers ทั้งหมดอยู่ในเครือข่ายเดียวกัน

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

ตรวจสอบ mailserver logs:

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

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

สร้างสคริปต์สำรองข้อมูล:

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

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

กำหนดค่า Firewall

# 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 CX11: €4.51
  • โดเมน (รายปี, แตกต่างกัน): ~€10-15/ปี
  • รวม: ~€5-6/เดือน

เทียบกับ n8n Cloud:

  • n8n Starter: $20/เดือน
  • n8n Pro: $50/เดือน
  • ประหยัด: $180-540/ปี

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

n8n หลาย Instance

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

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

version: '3'
services:
  n8n-team2:
    image: n8nio/n8n:latest
    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 ของคุณ:

  • CX21: 2 vCPU, 8 GB RAM (€8.46/เดือน)
  • CX31: 2 vCPU, 16 GB RAM (€16.07/เดือน)

สรุป

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

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

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

การกำหนดค่านี้ได้รับการทดสอบในสภาพแวดล้อม production และให้ความน่าเชื่อถือระดับองค์กรในราคาเพียงเศษเสี้ยวของต้นทุน

เกี่ยวกับ tva

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

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