ติดตั้งและดูแล 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
- เข้าสู่ระบบ Hetzner Cloud Console
- สร้างโครงการใหม่
- เพิ่มเซิร์ฟเวอร์ด้วยข้อมูลจำเพาะเหล่านี้:
- 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 คุณจะต้อง:
- เปิดใช้งานการยืนยันตัวตนสองขั้นตอน
- สร้าง App Password
- ใช้ 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
ชี้โดเมนของคุณไปยังเซิร์ฟเวอร์:
- ไปที่ผู้ให้บริการโดเมน/DNS ของคุณ
- สร้าง 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 สำหรับข้อมูลเพิ่มเติมเกี่ยวกับบริการของเรา