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