ติดตั้ง Edge Server
คู่มือติดตั้ง TH-Tunnel Edge Server แบบละเอียดทุกขั้นตอน (Zero to Hero)
ติดตั้ง Edge Server
คู่มือนี้จะสอนการติดตั้ง Edge Server อย่างละเอียดที่สุด ตั้งแต่การเตรียม Server, การตั้งค่า DNS, ไปจนถึงการเปิดใช้งานจริง เหมาะสำหรับผู้เริ่มต้นที่ต้องการสร้างระบบ Tunnel ของตัวเอง
Edge Server คืออะไร?
Edge Server คือ "ประตูหน้าบ้าน" ของระบบคุณ ทำหน้าที่:
- รับ Traffic จากคนทั่วไปที่เข้าเว็บ (เช่น
myapp.tunnel.com) - ส่งต่อ ไปยังเครื่องคอมพิวเตอร์ของคุณที่รัน CLI อยู่
- จัดการความปลอดภัย (HTTPS) โดยอัตโนมัติ
สิ่งที่คุณต้องมี (Prerequisites): (#prerequisites)
| รายการ | รายละเอียด | หมายเหตุ |
|---|---|---|
| Server | VPS (Ubuntu 20.04/22.04) | แนะนำ DigitalOcean, Vultr, หรือ AWS |
| Domain | โดเมนส่วนตัว 1 ชื่อ | ต้องเข้าถึง DNS Management ได้ |
| Control API | URL ของระบบหลัก | ต้องติดตั้ง Backend เรียบร้อยแล้ว |
ขั้นตอนที่ 1: เตรียมโดเมนและ DNS
นี่คือขั้นตอนที่สำคัญที่สุด หากตั้งค่า DNS ผิด ระบบจะไม่ทำงาน
สมมติว่าโดเมนของคุณคือ example.com และคุณต้องการให้ระบบ Tunnel อยู่ที่ tunnel.example.com
1.1 สร้าง A Record หลัก
ชี้โดเมนไปยัง IP Address ของ VPS ที่คุณเพิ่งเช่ามา
| Type | Name (Host) | Value (IPv4) | TTL |
|---|---|---|---|
| A | tunnel | XXX.XXX.XXX.XXX (IP ของ Server) | Auto / 300 |
ผลลัพธ์: การเข้าถึง
tunnel.example.comจะวิ่งไปที่ Server ของคุณ
1.2 สร้าง Wildcard A Record (สำคัญมาก)
จำเป็นสำหรับสร้าง Subdomain ให้ผู้ใช้งานแต่ละคน (เช่น user1.tunnel.example.com)
| Type | Name (Host) | Value (IPv4) | TTL |
|---|---|---|---|
| A | *.tunnel | XXX.XXX.XXX.XXX (IP เดิม) | Auto / 300 |
ผลลัพธ์: ไม่ว่าใครจะพิมพ์
อะไรก็ตาม.tunnel.example.comก็จะวิ่งมาที่ Server นี้ ทำให้เราแจก Subdomain ได้ไม่จำกัด
ขั้นตอนที่ 2: เตรียม Server (Server Preparation)
Login เข้า VPS ของคุณผ่าน SSH แล้วทำตามทีละบรรทัด
2.1 อัปเดตเครื่องให้สดใหม่
sudo apt update && sudo apt upgrade -y
sudo apt install -y curl git build-essential
2.2 ติดตั้ง Node.js (เวอร์ชัน 20 LTS)
เราแนะนำเวอร์ชัน 20 เพื่อประสิทธิภาพและความปลอดภัยสูงสุด
# ดาวน์โหลด Script ติดตั้ง
curl -fsSL https://deb.nodesource.com/setup_20.x | sudo -E bash -
# สั่งติดตั้ง
sudo apt install -y nodejs
# ตรวจสอบความถูกต้อง (ต้องขึ้น v20.x.x)
node -v
2.3 ติดตั้ง PM2 (ตัวคุมเซิร์ฟเวอร์)
PM2 จะช่วยให้โปรแกรมทำงานเบื้องหลังได้ตลอดเวลา และเปิดตัวเองใหม่ถ้าเครื่องดับ
sudo npm install -g pm2
ขั้นตอนที่ 3: ติดตั้ง Source Code
3.1 ดึงโค้ดลงเครื่อง
# ไปที่โฟลเดอร์สำหรับลงโปรแกรม
cd /opt
# (สมมติว่าคุณมี Repository)
git clone https://github.com/YOUR_ORG/th-tunnel.git
cd th-tunnel/services/edge-v2
# ติดตั้ง Library ต่างๆ
npm install --production
ขั้นตอนที่ 4: ตั้งค่า Environment Variables
นี่คือขั้นตอนที่ต้อง ระวัง ที่สุด เราจะแยกการตั้งค่าของ Edge ออกมาชัดเจน ไม่ปนกับส่วนอื่น
สร้างไฟล์ .env:
nano .env
ก๊อปปี้ค่าเหล่านี้ไปใส่ แล้วแก้เฉพาะจุดที่บอก:
# =============================================
# การตั้งค่าเฉพาะของ EDGE SERVER
# =============================================
# 1. การเชื่อมต่อ (Networking)
PORT=8080
# ใส่โดเมนหลักที่คุณตั้ง DNS ไว้ในข้อ 1 (ห้ามใส่ http://)
EDGE_HOST=tunnel.example.com
EDGE_REGION=default
# 2. เชื่อมต่อกับระบบหลัก (Control Plane)
# URL ของระบบจัดการหลังบ้าน (Backend)
CONTROL_API_URL=https://api.example.com
# คีย์ลับสำหรับคุยกันระหว่าง Server (ต้องตรงกับฝั่ง Backend)
INTERNAL_API_KEY=change_this_to_be_secure_random_string
# 3. ฐานข้อมูล (Redis - แนะนำให้ใช้เพื่อความเร็ว)
# ถ้ายังไม่มี Redis ให้เว้นว่างไว้ หรือใส่ redis://localhost:6379
REDIS_URL=redis://localhost:6379
# 4. ความปลอดภัย & TCP
# ช่วง Port ที่จะเปิดให้ใช้ TCP Tunnel (ต้องเปิด Firewall ด้วย)
TCP_PORT_MIN=10000
TCP_PORT_MAX=20000
# 5. ประสิทธิภาพ (ไม่ต้องแก้ก็ได้)
MAX_CONNECTIONS_PER_TUNNEL=100
COMPRESSION_ENABLED=true
ตรวจสอบ INTERNAL_API_KEY ให้ดี ต้องเหมือนกันเป๊ะๆ กับที่ตั้งใน services/control-api/.env ไม่อย่างนั้น Edge จะแจ้งสถานะกลับไปไม่ได้
ขั้นตอนที่ 5: เริ่มต้นระบบ
ใช้ PM2 สั่งรันโปรแกรม:
# สั่งรัน
pm2 start src/index.js --name "edge-server"
# สั่งให้ทำงานทุกครั้งที่เปิดเครื่อง
pm2 save
pm2 startup
ตรวจสอบสถานะ:
pm2 list
pm2 logs edge-server
(ถ้าเห็นคำว่า "Edge Server started on port 8080" แสดงว่าสำเร็จ)
ขั้นตอนที่ 6: ตั้งค่า HTTPS (Reverse Proxy)
เราจะไม่ให้ User เข้ามาที่ Port 8080 โดยตรง แต่จะใช้ Caddy หรือ Nginx มาบังหน้าเพื่อทำ HTTPS อัตโนมัติ
วิธีที่ง่ายที่สุด: ใช้ Caddy (แนะนำ)
Caddy จะจัดการ SSL (กุญแจเขียว) ให้เองอัตโนมัติ รวมถึง Subdomain ด้วย
-
ติดตั้ง Caddy:
sudo apt install -y debian-keyring debian-archive-keyring apt-transport-https curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/gpg.key' | sudo gpg --dearmor -o /usr/share/keyrings/caddy-stable-archive-keyring.gpg curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/debian.deb.txt' | sudo tee /etc/apt/sources.list.d/caddy-stable.list sudo apt update sudo apt install caddy -
แก้ไขไฟล์ Config:
sudo nano /etc/caddy/Caddyfile -
ใส่ค่านี้ลงไป (แก้โดเมนเป็นของคุณ):
# จัดการโดเมนหลักและ Subdomain ทั้งหมด tunnel.example.com, *.tunnel.example.com { # ส่งต่อ traffic ไปยัง Edge app reverse_proxy localhost:8080 # เปิดใช้ HTTPS อัตโนมัติ tls { on_demand } } -
รีสตาร์ท Caddy:
sudo systemctl reload caddy
ขั้นตอนที่ 7: ตรวจสอบความเรียบร้อย (Verification)
ทดสอบว่าทุกอย่างทำงานสมบูรณ์:
- เข้าเว็บ: เปิด Browser ไปที่
https://tunnel.example.com/health- ต้องเห็น JSON:
{"status":"healthy",...}
- ต้องเห็น JSON:
- Ping Subdomain มั่วๆ: ลองเข้า
https://test1234.tunnel.example.com- ควรจะขึ้นหน้า 404 ของ Tunnel (เพราะยังไม่มีใครรัน Tunnel นี้) แต่ต้องเป็น HTTPS ที่ถูกต้อง
🎉 ยินดีด้วย! Edge Server ของคุณพร้อมใช้งานแล้ว User สามารถใช้ CLI เชื่อมต่อเข้ามาได้ทันที
การแก้ไขปัญหา (Troubleshooting)
Edge Start ไม่ติด (PM2 Error)
- เช็ค:
INTERNAL_API_KEYตรงกับ Backend ไหม? - เช็ค:
CONTROL_API_URLเข้าถึงได้จริงไหม? ลองcurl -v https://api.example.com/health
SSL (HTTPS) ไม่ขึ้น
- เช็ค DNS: ตรวจสอบว่า A Record ของ
*.tunnel...ชี้มาถูก IP แล้วหรือยัง (รอ DNS อัปเดต 5-10 นาที) - เช็ค Caddy Log:
journalctl -u caddy -f
User เชื่อมต่อไม่ได้ (Connection Refused)
- User ต้องใช้คำสั่ง:
tunnel config set-server https://tunnel.example.com(ใส่ URL ให้ถูก) - ถ้าใช้ TCP Tunnel อย่าลืมเปิด Firewall Port
10000-20000บน VPS ด้วย (ufw allow 10000:20000/tcp)