๖06VPS = หน้าบ้าน
VPS: bootstrap the front of house
TL;DR — สรุปใน 30 วินาทีtldr
VPS คือ "หน้าบ้าน" — จุดที่โลกภายนอกเห็น มีหน้าที่ 3 อย่าง: รับ HTTPS, ตรวจกุญแจและงบประมาณ, เก็บฐานข้อมูล/ค้นเว็บ ทั้งหมดนี้รันเป็น Docker containers หกตัวที่ยกขึ้นด้วยคำสั่งเดียว
| Service | หน้าที่ | เหตุผลที่มี |
|---|---|---|
| LiteLLM | ประตู API — กุญแจ/งบ/เส้นทาง/fallback | หัวใจการคุมทุก call บันทึกค่าใช้จ่ายทุกครั้ง |
| Open WebUI | เว็บแชทสำหรับผู้ใช้ | หน้าบ้านที่คนใช้จริงเห็น |
| Postgres 16 | ฐานข้อมูลหลัก | เก็บ spend logs + ข้อมูลผู้ใช้ |
| Qdrant 1.19 | เวกเตอร์สำหรับ RAG | คลังความรู้ภายใน อยู่ localhost เท่านั้น |
| Valkey 8 | แคช | ลดงานซ้ำ |
| SearXNG | เครื่องมือค้นเว็บของตัวเอง | แทนจ่ายค่า search API — localhost เท่านั้น |
เมื่อไหร่ควรใช้ / When to usewhen to use
ทำบทนี้หลังเครือข่าย (บทที่ ๔) พร้อม — VPS สเปกขั้นต่ำ 4 vCPU / 8GB / Debian 12 หรือ Ubuntu ก็เพียงพอ (ของเราคือ 12 vCPU / 47GB เพราะแชร์กับงานอื่น)
- ต้องมี Docker + compose plugin (ติดตั้งตาม docs.docker.com สำหรับ Linux)
- ต้องมี Tailscale บน VPS แล้ว (จด Tailscale IP ของ Mac จากบทที่ ๔ ไว้ใส่ .env ในบทถัดไป)
- ต้องมีโดเมนจด DNS ไว้ที่ Cloudflare แล้ว (สำหรับ tunnel จากบทที่ ๔)
วิธีทำ / How-tohow to
ของดีของ kit นี้คือสคริปต์ bootstrap.sh — ตรวจทุกอย่างให้ก่อน แล้วยกทั้ง stack ด้วยคำสั่งเดียว ปลอดภัยรันซ้ำได้:
# โคลน repo แล้วเตรียมไฟล์ความลับ
git clone https://github.com/siamcafe/bomllm.git
cd bomllm
cp configs/.env.example .env # แล้วเปิดแก้ค่า CHANGE_ME ทุกตัว (บทที่ ๗)
# ยก stack ทั้งหมด (idempotent — รันซ้ำได้)
./scripts/bootstrap.sh
# หรือดูก่อนว่าจะทำอะไร โดยไม่แต๊ะอะไรจริง
./scripts/bootstrap.sh --dry-runสคริปต์จะ: ตรวจ .env chmod 600, ห้ามค่า CHANGE_ME หลงเหลือ, สร้าง litellm.yaml จากตัวอย่าง, seed SearXNG, pull รูปที่ปักเวอร์ชัน, up -d, รอ LiteLLM alive, แล้วรัน smoke gate
สิ่งที่ต้องทำเองหลัง bootstrap (สคริปต์พิมพ์บอกตอนจบ):
- ชี้ Cloudflare Tunnel: chat ชื่อโดเมน → localhost:3000 และ llm ชื่อโดเมน → localhost:4000 (ห้ามเปิดพอร์ตสาธารณะโดยตรง)
- สร้างโมเดลบน Mac ตามบทที่ ๕ (ถ้ายังไม่ทำ)
- สร้างกุญแจรายช่องทาง — บทที่ ๘
- รันชุดตรวจ 6 ข้อเต็ม — บทที่ ๑๖
ผลจากเครื่องจริงหลังยกสำเร็จ:
ที่มา: หน้า components ของคู่มือนี้ (สร้างจากเอกสาร repo ฉบับ sanitized)
ถ้าติดตรงไหน → บทที่ ๑๖
ตัวอย่างการตั้งค่า / Config exampleconfig example
หัวใจของหน้าบ้านคือ docker-compose.yml — ส่วนที่สำคัญที่สุดพร้อมคำอธิบายไทย:
services:
litellm:
image: ghcr.io/berriai/litellm:main-stable # ปักแท็ก ห้าม latest
environment:
# ความลับทุกตัวมาจาก .env ทั้งสิ้น ไม่มีค่าจริงในไฟล์นี้
LITELLM_MASTER_KEY: ${LITELLM_MASTER_KEY:?set in .env}
# Mac ผ่าน Tailscale เท่านั้น — ห้ามเป็น IP สาธารณะเด็ดขาด
MAC_OLLAMA_BASE_URL: ${MAC_OLLAMA_BASE_URL:?e.g. http://100.x.y.z:11434}
volumes:
- ./configs/litellm.yaml:/app/config.yaml:ro # config จริง mount แบบอ่านอย่างเดียว
ports:
- "127.0.0.1:4000:4000" # หน้าบ้านคุมด้วย tunnel ห้าม publish
open-webui:
image: ghcr.io/open-webui/open-webui:v0.11.3
environment:
OPENAI_API_BASE_URLS: "http://litellm:4000/v1" # เดินผ่าน proxy เท่านั้น
OLLAMA_BASE_URLS: "" # ว่างโดยตั้งใจ: ห้าม WebUI ข้าม proxy ไป Mac ตรง ๆ
ENABLE_WEB_SEARCH: "true" # ค้นเว็บใช้ SearXNG ในเครื่อง (ประหยัดค่า API)
RAG_EMBEDDING_ENGINE: ollama
RAG_EMBEDDING_MODEL: bge-m3ฉบับเต็มพร้อมทุก service อยู่ใน repo — ไฟล์นี้ออกแบบให้ copy ไปใช้ได้เลย ไม่มีความลับฝังอยู่
Pro tip — เคล็ดลับจากสนามจริงpro tip
คำถามที่พบบ่อย / FAQfaq
ถาม: รันบน VPS บ้านเรา (ไทย) ได้ไหม? — ได้ แต่แนะนำสิงคโปร์เพราะใกล้ผู้ใช้ไทย หน่วงต่ำ ราคาใกล้กัน ส่วน Mac ที่บ้านก็คุยกับ VPS ผ่าน Tailscale ได้ไม่ว่าอยู่ไหน
ถาม: VPS คือค่าใช้จ่ายลับที่ไม่ได้บวกใน $0.54? — ใช่ ค่า VPS ~$10–15/เดือนคิดแยกเพราะของเราโฮสต์งานอื่นด้วย ถ้าเช่าใหม่เพื่อ BOMLLM ล้วน ๆ ให้บวกเข้าต้นทุนรายวัน ~$0.4
คำถามอื่น ๆ ดูที่ FAQ
ดูเพิ่ม / See alsosee also
- บทที่ ๗ · .env และ litellm.yaml — กรอกค่าจริงทีละบรรทัด
- บทที่ ๘ · Virtual keys — ออกกุญแจรายช่องทาง
- บทที่ ๑๖ · อัปเกรด — วิธีอัปเกรดแต่ละ container อย่างปลอดภัย