ฮาร์ดแวร์และเตรียมเครือข่าย
Hardware and network: Tailscale + Cloudflare Tunnel
TL;DR — สรุปใน 30 วินาทีtldr
สมองของระบบคือ Mac Mini M4 Pro หน่วยความจำ 48GB (CPU 14 คอร์, GPU 20 คอร์, unified memory) — จุดหวานคือรันโมเดลระดับ 27B ได้สบาย พร้อม embeddings เปิดคู่กันตลอดเวลา โดยไม่แตะ swap เลย
กฎเหล็กของ 48GB: โมเดลใหญ่ resident ได้ทีละหนึ่งตัวเท่านั้น — ไม่ใช่สอง ไม่ว่ากรณีใด
ก่อนติดตั้งอะไรทั้งสิ้น ต้องเตรียม "เส้นเลือด" ของระบบก่อน — เครือข่ายส่วนตัว Tailscale (mesh VPN) + ประตูสู่อินเทอร์เน็ต Cloudflare Tunnel หลักคิดง่าย ๆ: เครื่องทุกเครื่องคุยกันผ่าน tunnel ลับ และเปิดสู่โลกภายนอกแค่ประตูเดียวที่มี รป. ตรวจกุญแจ ไม่เปิดพอร์ตใน router เลย
เมื่อไหร่ควรใช้ / When to usewhen to use
คุณจำเป็นต้องมีอะไรบ้าง?
| ชิ้น | จำเป็น? | หมายเหตุ |
|---|---|---|
| Mac Mini M4 Pro 48GB | จำเป็น (แกนระบบ) | 48GB คือจุดหวาน — 36GB ได้ถ้ายอมลด context เหลือ ≤16k, 24GB ไม่พอ |
| VPS เล็ก | จำเป็น (หน้าบ้าน) | 4 vCPU / 8GB ก็เพียงพอ — ~$10–15/เดือน |
| เครื่องการ์ดจอ NVIDIA | เสริม (ภาพ/เสียง) | i9 + 2× RTX 5060 Ti 16GB ของเราคือของเก่าที่มีอยู่ — เริ่ม Mac-only ได้ก่อน |
| NAS / เครื่อง Linux 24/7 | เสริม (ออโตเมชัน) | Synology DS725+ รัน n8n + เฝ้าระวัง |
| Smart plug วัดไฟ | แนะนำ | เพื่อเก็บใบเสร็จค่าไฟของคุณเอง — ~300 บาท/ชิ้น |
ทำขั้นตอนนี้ทันทีที่มีเครื่องตั้งแต่ 2 เครื่องขึ้นไป — และต้องทำ ก่อนติดตั้ง VPS ในบทที่ ๓ เพราะ compose จะเรียก Mac ผ่าน IP ของ Tailscale
- Tailscale ใช้กรณี: เครื่องในบ้านคุยกันเอง (VPS -> Mac, NAS -> i9) ทั้งใน LAN และจากนอกบ้าน — ได้ IP ปลอดภัยหน้าตา 100.x.y.z
- Cloudflare Tunnel ใช้กรณี: เปิดบริการให้คนนอกเรียก HTTPS (เว็บแชท, API ของ bot) โดยไม่มีใครเห็น IP บ้านเรา
- สองอย่างนี้ทำงานร่วมกัน ไม่ได้แทนกัน
วิธีทำ / How-tohow to
แผนที่หน่วยความจำจริงบนเครื่องเรา (โมเดล 27B แบบ nvfp4 + embeddings):
48 GB รวม
- 23 GB โมเดลหลัก 27B nvfp4 (context 32768) — resident ใหญ่กว่าไฟล์ 18GB ครับ
เพราะ KV cache + บัฟเฟอร์รันไทม์อยู่ใน unified memory เดียวกันครับ
- ~1 GB bge-m3 embeddings (+ nomic) ตัวเล็ก อุ่นตลอดครับ
- ~8 GB macOS + Ollama runtime + ส่วนเผื่อครับ
= ~16 GB เหลือ -> memory pressure เขียว, swap = 0ถ้าดูแลกฎ "หนึ่งโมเดลต่อหนึ่งช่วงเวลา" ตารางนี้จะนิ่งมาตลอดครับ
เหตุการณ์ swap ที่สอนเราครั้งใหญ่ — ครั้งหนึ่งเราเก็บโมเดลที่สอง (16GB) resident ไว้ด้วย keep-alive 24 ชม. ผลคือ:
- หน่วยความจำพุ่งไป 47.7GB + swap 3.8GB
- TTFT (เวลาโผล่ตัวอักษรแรก) บานจาก ~0.04 วินาที เป็น 28–60 วินาที
- ไล่โมเดลที่สองออก (keep_alive: 0) ครบ 27 นาที swapout หยุดสนิท
ตั้งแต่วันนั้น kit ทั้งหมดเข้ารหันกันกันไว้แล้ว: KEEP_ALIVE 24 ชม. ได้หนึ่งตัว, health check ห้าม sweep โหลดโมเดลเดิมกลับมา, cron อุ่นเฉพาะโมเดลหลักนะครับ
ถ้าติดตรงไหน → บทที่ ๙
ขั้น 1 — สมัครและติดตั้ง Tailscale ทุกเครื่อง (ฟรีสำหรับใช้ส่วนตัว):
- สมัครบัญชีที่ tailscale.com (ใช้ Google/GitHub login ได้)
- ติดตั้งบน Mac:
brew install --cask tailscaleแล้ว login - ติดตั้งบน VPS (Debian/Ubuntu): คำสั่ง curl จากเว็บ tailscale.com/download แล้ว
tailscale up - ติดตั้งบน Windows/อื่น ๆ ตามปกติ แล้ว approve ทุกเครื่องในหน้า admin console
- ตรวจว่าเห็นกันครบ:
tailscale status
นี่คือผลจริงจากเครื่องในฟลีตเรา (ปิดช่อง IP บางส่วนเพื่อความปลอดภัย) ครับ:
เครื่องของคุณจะได้ชื่อ+IP ของตัวเอง — จด IP ของ Mac ไว้ใช้ในบทที่ ๓ ครับ
ขั้น 2 — ตั้ง Cloudflare Tunnel สำหรับ 2 ชื่อโดเมน (chat และ llm):
- โดเมนของคุณต้องจด DNS ไว้กับ Cloudflare ก่อน (แผนฟรีพอ)
- ติดตั้ง cloudflared บน VPS: ตามคู่มือ developers.cloudflare.com/cloudflare-one/connections/connect-networks/
- สร้าง tunnel แล้วชี้ 2 เส้นทาง:
chat.โดเมนคุณ.com → localhost:3000และllm.โดเมนคุณ.com → localhost:4000 - เปิดระบบกันซ้ำ Cloudflare Access (เข้าผ่านอีเมล OTP) สำหรับหน้า admin — ดูภาพจริงด้านล่าง
ถ้าติดตรงไหน → บทที่ ๙
ตัวอย่างการตั้งค่า / Config exampleconfig example
ความเร็วที่วัดได้จริงบนเครื่องนี้ (คำสั่งวัดอยู่ใน benchmarks/ ของ repo):
| ตัวชี้วัด | GGUF Q4_K_M | MLX nvfp4 | ส่วนต่าง |
|---|---|---|---|
| ความเร็ว decode (เฉลี่ย 5 prompt) | 7.85 tok/s | 30.23 tok/s | +285% |
| TTFT (อุ่นแล้ว) | 0.288 วิ | 0.040 วิ | เร็วขึ้น 7 เท่า |
| RAM ที่กิน | 18 GB | 23 GB | +5 GB (แลกกับความเร็ว — คุ้ม) |
| Swap | 0 | 0 | — |
สาเหตุที่ MLX เร็วกว่า: M4 Pro มีแบนด์วิดท์หน่วยความจำ ~273 GB/s — การอนุมาน LLM คือการอ่านน้ำหนักโมเดลถี่ ๆ ยิ่งอ่านเร็วยิ่งตอบเร็ว (M4 ธรรมดาที่ 120 GB/s จะได้ประมาณครึ่งเดียวของตัวเลขนี้) ดูเพิ่มที่ MLX ในอภิธานศัพท์
หลักการตั้งค่าที่ต้องจำตลอดทั้งคู่มือครับ:
# กฎเหล็กของ BOMLLM เรื่องเครือข่าย
1. ทุก service bind 127.0.0.1 เท่านั้น (ยกเว้น Tailscale interface) ครับ
2. สาธารณะเข้าได้ทางเดียว = Cloudflare Tunnel ครับ
3. Mac เปิด Ollama ให้ Tailscale IP เท่านั้น (pf firewall เปิด) ครับ
4. SSH ใช้พอร์ตไม่มาตรฐาน + key เท่านั้น + ufw DROP เป็นค่าตั้งต้นที่มา: docs/security.md — ตรวจซ้ำทุกรอบ audit ครับ
Pro tip — เคล็ดลับจากสนามจริงpro tip
คำถามที่พบบ่อย / FAQfaq
ถาม: ใช้ PC Windows + การ์ดจอแทน Mac ได้ไหม? — รัน LLM ได้ แต่การ์ด 16GB ใบเดียวใส่โมเดล 27B ไม่พอ ต้องลดขนาดโมเดล แลกกับคุณภาพ — ส่วนใหญ่เราใช้เครื่อง PC เป็น "ครัวภาพ/เสียง" แทน (บทที่ ๖)
ถาม: Mac ดับ bot ตายไหม? — ไม่ตาย Tier 2 บน VPS รับต่อทันที (บทที่ ๑)
คำถามอื่น ๆ ดูที่ FAQ
ถาม: Tailscale ฟรีจริงหรือ แล้วข้อมูลรั่วไหม? — แผนส่วนบุคคลฟรี 100 อุปกรณ์ ตัวเชื่อมต่อเป็น open source traffic ถูกเข้ารหัส WireGuard ตลอดเส้นทาง — เซิร์ฟเวอร์ของ Tailscale แค่ช่วยจัดการ "จับคู่" ไม่ได้อ่านข้อมูล
ถาม: ไม่มีโดเมนเป็นของตัวเอง? — โดเมน .com ปีละ ~300–400 บาท และ Cloudflare แผนฟรีพอสำหรับ tunnel — คือค่าใช้จ่ายที่คุ้มที่สุดของทั้งระบบ
ดูเพิ่ม / See alsosee also
- บทที่ ๓ · Mac Mini + VPS — ติดตั้ง Ollama โมเดล และชั้นหน้าบ้าน
- บทที่ ๖ · สูตรภาษาไทย — จูนพารามิเตอร์บนเครื่องนี้
- บทที่ ๙ · ความปลอดภัย — ตาราง bind ของทุก service
- docs/hardware.md — ฉบับอังกฤษเต็ม
ภาพประกอบ / Figuresfigures

คลิปหน้าจอจริงตามบทเรียน · คลิกเล่นเพื่อฟังสรุป · ไม่ใช่คำแนะนำการลงทุนครับ
▶ ดูวิดีโอคู่มือ: https://youtu.be/O4hM39cgDCY