THEN
PART 2 · ติดตั้ง

ฮาร์ดแวร์และเตรียมเครือข่าย

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 ทุกเครื่อง (ฟรีสำหรับใช้ส่วนตัว):

  1. สมัครบัญชีที่ tailscale.com (ใช้ Google/GitHub login ได้)
  2. ติดตั้งบน Mac: brew install --cask tailscale แล้ว login
  3. ติดตั้งบน VPS (Debian/Ubuntu): คำสั่ง curl จากเว็บ tailscale.com/download แล้ว tailscale up
  4. ติดตั้งบน Windows/อื่น ๆ ตามปกติ แล้ว approve ทุกเครื่องในหน้า admin console
  5. ตรวจว่าเห็นกันครบ: tailscale status

นี่คือผลจริงจากเครื่องในฟลีตเรา (ปิดช่อง IP บางส่วนเพื่อความปลอดภัย) ครับ:

เครื่องในเครือข่าย (ตัวอย่างจริง ปิดบังบางหลัก) · tailscale status
100.x.y.z desktop windows -100.x.y.z vps-bomllm linux -100.x.y.z nas-ds725 linux -100.x.y.z macmini-ai macOS -# ทุกเครื่องอยู่ใน mesh เดียว = คุยกันได้ทันที ไม่ต้องเปิดพอร์ตไหนเลย

เครื่องของคุณจะได้ชื่อ+IP ของตัวเอง — จด IP ของ Mac ไว้ใช้ในบทที่ ๓ ครับ

ขั้น 2 — ตั้ง Cloudflare Tunnel สำหรับ 2 ชื่อโดเมน (chat และ llm):

  1. โดเมนของคุณต้องจด DNS ไว้กับ Cloudflare ก่อน (แผนฟรีพอ)
  2. ติดตั้ง cloudflared บน VPS: ตามคู่มือ developers.cloudflare.com/cloudflare-one/connections/connect-networks/
  3. สร้าง tunnel แล้วชี้ 2 เส้นทาง: chat.โดเมนคุณ.com → localhost:3000 และ llm.โดเมนคุณ.com → localhost:4000
  4. เปิดระบบกันซ้ำ Cloudflare Access (เข้าผ่านอีเมล OTP) สำหรับหน้า admin — ดูภาพจริงด้านล่าง

ถ้าติดตรงไหน → บทที่ ๙

ตัวอย่างการตั้งค่า / Config exampleconfig example

ความเร็วที่วัดได้จริงบนเครื่องนี้ (คำสั่งวัดอยู่ใน benchmarks/ ของ repo):

ตัวชี้วัดGGUF Q4_K_MMLX nvfp4ส่วนต่าง
ความเร็ว decode (เฉลี่ย 5 prompt)7.85 tok/s30.23 tok/s+285%
TTFT (อุ่นแล้ว)0.288 วิ0.040 วิเร็วขึ้น 7 เท่า
RAM ที่กิน18 GB23 GB+5 GB (แลกกับความเร็ว — คุ้ม)
Swap00—

สาเหตุที่ 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

★ PRO TIP
ข้ามราคา SSD แบบอัปเกรดในเครื่อง — เก็บโมเดลบน external Thunderbolt SSD แล้วชี้ตัวแปร OLLAMA_MODELS ไปที่ volume นั้น — ประหยัดได้หลายพันบาทเทียบกับการอัปเกรด SSD ในตัว และย้ายไปเครื่องอื่นได้
★ PRO TIP
สิ่งที่ใส่ได้/ใส่ไม่ได้บน 48GB — 27B + embeddings = ✅ ใช้ประจำวัน | 27B + โมเดล vision 7B = ⚠️ แน่น ดู pressure | 27B สองตัว = ❌ swap thrash (เจอมาแล้ว) | 32B mxfp8 = ❓ โหลดได้แต่ไม่เหลือที่หายใจ | 70B ทุก quant = ❌ อย่าคิด
★ PROD LESSON
ประตูคู่ Cloudflare Access — หน้า admin ทั้งหมด (เช่น แผงควบคุม LiteLLM) เราครอบด้วย Cloudflare Access อีกชั้น — ต้องผ่าน OTP อีเมลก่อนถึงจะเห็นหน้า login เดิม แปลว่าแม้ซอฟต์แวร์จะมีช่องโหว่ โลกภายนอกก็ยังเข้าไม่ถึง
★ PRO TIP
Tailscale ไม่ได้ทำให้ช้า — ความหน่วงผ่าน Tailscale ในประเทศเดียวกัน ~ไม่กี่ ms — สัญญาณณ LLM ทั้งเส้นทาง (ผู้ใช้ → VPS → Mac) รวมแล้วยังเร็วกว่าเรียกคลาวด์ต่างประเทศชัดเจน (p50 5.2 วิ vs 35.1 วิ ในผลทดสอบ 50 เคส)

คำถามที่พบบ่อย / 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

ภาพประกอบ / Figuresfigures

หน้ายืนยันตัวตน Cloudflare Access ก่อนเข้าหน้า admin ของระบบจริง
ภาพจริงจากระบบ production — ผู้ไม่มีสิทธิ์เห็นแค่นี้ ไปต่อไม่ได้
แผนภาพแสดงเส้น Tailscale และ Cloudflare Tunnel
เส้นทึบ = mesh VPN, เส้นเข้าจากอินเทอร์เน็ต = ผ่าน tunnel ประตูเดียว

คลิปหน้าจอจริงตามบทเรียน · คลิกเล่นเพื่อฟังสรุป · ไม่ใช่คำแนะนำการลงทุนครับ

▶ ดูวิดีโอคู่มือ: https://youtu.be/O4hM39cgDCY