0. Overview — เริ่มจากไหน?
คุณมี 5 PCs ต้องการเชื่อมเป็น ecosystem เดียว · ตอนนี้ทุก service ทำงานบน laptop เครื่องเดียว (ช้า · เนื้อที่ใกล้เต็ม) · หลัง setup เสร็จ → กระจาย load ออก 5 เครื่อง · มี Ollama 14B รันได้ · zero token cost
What you get at the end
5
PCs meshed
24/7
always-on
$0
Ollama cost
14B
model on tap
How to read this guide
- อ่าน Foundation (Section 0-4) ก่อน — ใช้เวลา ~15 นาที
- เริ่มทำที่ PC #1 (Laptop) → ทำตาม section 5 จบครบทุก step
- ไป PC #2 (2060) → section 6
- ...ทำเรียงลำดับจน PC #5 (i5) → section 9
- End-to-End Verify (section 10) → ทุก service ตอบ OK ไหม?
- เริ่ม PMF Mining (section 11) → ปล่อยรันข้ามคืน
เปิด guide นี้บนมือถือ ขณะนั่งหน้า desktop · ติ๊ก checkbox ตามทำ · progress บันทึกใน browser (localStorage)
1. Newbie Concepts (อ่านก่อน, สำคัญ)
Tailscale คืออะไร
Tailscale = WireGuard VPN mesh ที่ตั้งง่ายมาก. ทุก PC ที่ join "tailnet" เดียวกัน = เห็นกันได้ราวกับอยู่ LAN เดียวกัน ไม่ต้อง port forward · ไม่ต้อง public IP · ใช้ได้ข้าม network (บ้าน + คาเฟ่ + 4G)
- tailnet = network เสมือนของคุณ · ชื่อแบบ
your-name.tail-xxxx.ts.net - MagicDNS = แทนที่จะใช้ IP
100.x.y.zใช้ชื่อdesktop-5080ได้เลย - tailnet IP =
100.x.y.z(range พิเศษ ไม่ชนกับ LAN จริง)
Ollama คืออะไร
Ollama = local LLM runtime. เอา AI model (Llama, Qwen, Gemma) มารันที่เครื่องตัวเอง · ไม่ต้องส่ง data ขึ้น cloud · API ตอบเหมือน OpenAI compatible
Docker คืออะไร
Docker = container runtime. รัน service หลายตัวบนเครื่องเดียว แยกกันสะอาด ไม่ชนกัน · ใช้
docker compose up -d สั่ง start ทุก service ในไฟล์ docker-compose.yml พร้อมกัน
Port คืออะไร
| คำ | หมายถึง |
|---|---|
| Port | เลขช่องที่ service ฟังอยู่ · เช่น 11434 = Ollama, 5432 = Postgres |
| Bind 127.0.0.1 | ฟังแค่ local (loopback) — เครื่องอื่นเรียกไม่ได้ |
| Bind 0.0.0.0 | ฟังจากทุก interface — เครื่องอื่นใน Tailscale เรียกได้ |
| Firewall rule | กฎใน Windows Firewall ว่า port ไหนเข้าได้บ้าง |
Risk tier (สำคัญมาก)
| Tier | ความหมาย | ตัวอย่าง |
|---|---|---|
| R0 | ห้ามพลาด · พลาดแล้วแก้ไม่ได้ | doctrine SOT, TMAO secret keys, schema drop |
| R1 | Reversible แต่ affects service | restart service, port change |
| R2 | Easy revert · ทำได้สบาย | docs edit, test, config tweak |
2. Hardware Inventory (5 PCs)
| # | PC | Hardware | OS | Tag |
|---|---|---|---|---|
| 1 | Laptop | RTX 4050 6GB · 32GB RAM · NVMe 88% ⚠️ | Win 11 | laptop |
| 2 | Desktop 2060 | RTX 2060 6GB · always-on spine | Win 11 | 2060 |
| 3 | Desktop 5080 | RTX 5080 16GB GDDR7 · 9800X3D CPU | Win 11 | 5080 |
| 4 | i3 server | i3 CPU · low-watt · LAN anchor | Win/Linux | i3 |
| 5 | i5 mini PC | 4GB RAM · CPU light · NO Docker | Win | i5 |
Role per PC
| PC | Primary role | Services running |
|---|---|---|
| laptop | 🔴 Secret zone + Cockpit | Doctrine SOT, Claude Code, TMAO live, Ollama loopback (phi4-mini) |
| 2060 | Always-on spine | l2-hub :8100, LiteLLM :4000, Synapse :8500, AKASHA backend |
| 5080 | GPU brain | SBOS :8200, Qdrant :6333, Ollama 14B, TMAO paper |
| i3 | Storage hub | Postgres :5432, Portainer, Backup, Uptime Kuma external |
| i5 | ESP32 flash rig | PlatformIO USB (no Docker · RAM ไม่พอ) |
3. Network Topology
หลัง setup เสร็จ — มอง 5 PCs
┌──────────── Tailscale Mesh ─────────────┐
│ (WireGuard, MagicDNS, ฟรี) │
│ │
┌───────────▼────┐ ┌──────────────┐ ┌─────────────┐ │
│ Laptop │ │ 5080 │ │ 2060 │ │
│ RTX 4050 │ │ RTX 5080 │ │ RTX 2060 │ │
│ 🔴 SECRET │ │ 16GB │ │ 6GB │ │
│ • Doctrine │ │ • SBOS │ │ • l2-hub │ │
│ • Claude Code │ │ • Qdrant │ │ • LiteLLM │ │
│ • TMAO live │ │ • Ollama14B │ │ • Synapse │ │
└────────────────┘ └──────────────┘ └─────────────┘ │
│
┌──────────────┐ ┌─────────────┐ │
│ i3 │ │ i5 │ │
│ always-on │ │ 4GB │ │
│ • Postgres │ │ • Platform │ │
│ • Backup │ │ IO USB │ │
└──────────────┘ └─────────────┘ │
│
MagicDNS hostnames: ▼
- laptop-jaao - desktop-5080 - desktop-2060
- i3-server - i5-flash
4. Account Setup (ทำครั้งเดียว, ทุก PC ใช้ร่วม)
2 account นี้ต้องเตรียมก่อน setup PC ไหนๆ · ใช้ account เดียวทั้ง 5 PCs
4.1 Tailscale account (ฟรี 100 devices)
- เปิด login.tailscale.com/start
- Sign in ด้วย Google / GitHub / Microsoft (account เดียวกับที่ใช้บน 5 PCs)
- หน้าจะแสดง tailnet name เช่น
jaao.tail-xxxx.ts.net— จดไว้ - ตั้งใน admin panel → DNS → toggle MagicDNS ON
4.2 GitHub access
ใช้ account wt-phatchara ที่มีอยู่ · เตรียม Personal Access Token (PAT) สำหรับ clone repo บน PC อื่น:
- ไปที่ github.com/settings/tokens
- Generate new token (classic) · scope =
repo - Copy token → save ใน password manager (Bitwarden/1Password)
4.3 Decisions (locked)
| Decision | Value |
|---|---|
| Tailnet name | (your tailnet name) |
| Hostname scheme | laptop-jaao · desktop-5080 · desktop-2060 · i3-server · i5-flash |
| Tailscale account | 1 account สำหรับ 5 PCs |
| Git account | wt-phatchara (PAT for non-laptop PCs) |
| Setup order | Laptop → 2060 → 5080 → i3 → i5 |
1
Laptop laptop
ทำที่ laptop ตอนนี้. เปิด PowerShell as Admin (Win+X → PowerShell admin) แล้วทำตามลำดับ
5.1 Pre-flight (7 steps)
1
Windows update ใหม่สุด
PowerShell · admin
Install-Module PSWindowsUpdate -Force -Scope CurrentUser
Get-WindowsUpdate
Install-WindowsUpdate -AcceptAll -AutoReboot
2
Verify admin access
PowerShell
[bool](([Security.Principal.WindowsIdentity]::GetCurrent()).Groups -match "S-1-5-32-544")
# ต้องได้ True
3
Internet + DNS check
PowerShell
ping login.tailscale.com
ping github.com
nslookup login.tailscale.com
4
ตั้ง hostname = laptop-jaao
PowerShell · admin
hostname # ดูชื่อปัจจุบัน
Rename-Computer -NewName "laptop-jaao" -Restart -Force
# จะ reboot อัตโนมัติ
5
Disk space ≥ 20 GB
PowerShell
Get-PSDrive C | Select-Object @{N='FreeGB';E={[math]::Round($_.Free/1GB,1)}}
# FreeGB ต้อง ≥ 20
6
Tools install
PowerShell · admin
winget install --id Python.Python.3.12 -e
winget install --id Git.Git -e
nvidia-smi # ตรวจ driver มีไหม
7
Verify Tailscale account พร้อม
เปิด tailscale admin · ต้อง sign in ได้
5.2 Install Tailscale
PowerShell · admin
winget install --id Tailscale.Tailscale -e
# หรือดาวน์โหลด MSI จาก https://pkgs.tailscale.com/stable/#windows
5.3 Join tailnet
PowerShell · admin
tailscale up --hostname=laptop-jaao
# Browser เปิด → sign in → approve
5.4 Verify
PowerShell
tailscale status
tailscale ip -4
# ต้องเห็น 100.x.y.z
5.5 Install Ollama (loopback only)
🔴 R0 ห้ามทำ: ห้าม set
OLLAMA_HOST=0.0.0.0 บน laptop · ห้าม expose port 11434 ผ่าน Tailscale · phi4-mini ของ laptop = secret zone
PowerShell · admin
winget install Ollama.Ollama
# Default OLLAMA_HOST=127.0.0.1:11434 (loopback) — ไม่ต้องเปลี่ยน
ollama pull phi4-mini
# ~2.5 GB
curl http://127.0.0.1:11434/api/tags
5.6 Git verify
PowerShell
cd C:\Users\JA
git status
git log -1 --oneline
# ต้องเห็น branch dev · clean tree
5.7 Checklist Laptop
✅ Laptop พร้อม → ไปต่อที่ PC #2: Desktop 2060
2
Desktop 2060 2060
ไปนั่งหน้าเครื่อง 2060 · เปิด PowerShell as Admin · ทำตามลำดับ
6.1 Pre-flight (7 steps)
1
Windows update
Install-Module PSWindowsUpdate -Force -Scope CurrentUser
Install-WindowsUpdate -AcceptAll -AutoReboot
2
Admin verify
[bool](([Security.Principal.WindowsIdentity]::GetCurrent()).Groups -match "S-1-5-32-544")
3
Internet check
ping login.tailscale.com
ping github.com
4
Hostname = desktop-2060
Rename-Computer -NewName "desktop-2060" -Restart -Force
5
Disk ≥ 20 GB
Get-PSDrive C | Select-Object @{N='FreeGB';E={[math]::Round($_.Free/1GB,1)}}
6
Tools — Python, Git, Docker, NVIDIA
winget install --id Python.Python.3.12 -e
winget install --id Git.Git -e
winget install --id Docker.DockerDesktop -e
nvidia-smi
7
Git config + GitHub PAT
git config --global user.email "wt.inlife@gmail.com"
git config --global user.name "Phatchara"
# Save PAT as Windows Credential
cmdkey /generic:git:https://github.com /user:wt-phatchara /pass:YOUR_PAT_HERE
6.2 Install Tailscale
PowerShell · admin
winget install --id Tailscale.Tailscale -e
tailscale up --hostname=desktop-2060
tailscale status
tailscale ip -4
6.3 Verify mesh from laptop
กลับไปที่ laptop:
PowerShell · on laptop
ping desktop-2060
tailscale status
# ต้องเห็น desktop-2060 active
6.4 Install Ollama (bind 0.0.0.0)
PowerShell · admin · on 2060
winget install Ollama.Ollama
# Bind ทุก interface (so tailnet peers reach)
[Environment]::SetEnvironmentVariable("OLLAMA_HOST","0.0.0.0:11434","Machine")
Restart-Service Ollama
# Verify bind
netstat -ano | findstr :11434
# ต้องเห็น 0.0.0.0:11434
6.5 Pull SLM models (6GB VRAM budget)
PowerShell
ollama pull qwen2.5-coder:7b # 4.7 GB · scoring class
ollama pull llama3.2:1b # 1.3 GB · fallback
ollama list
6.6 Clone operator-os repo
PowerShell
mkdir C:\workspace
cd C:\workspace
git clone https://github.com/wt-phatchara/operator-os.git
# ใส่ PAT จาก step 7
6.7 Start l2-hub + LiteLLM (Docker)
Note: docker-compose ใน repo path
l2-hub/docker-compose.yml · ต้อง .env ไฟล์ที่มี secret (LITELLM_MASTER_KEY, etc.) — copy จาก Bitwarden หรือ laptop
PowerShell
cd C:\workspace\operator-os\l2-hub
# Scenario env
$env:OPERATOR_SCENARIO = "S1"
$env:OPERATOR_PC_ROLE = "2060"
# Start (.env ต้องมี)
docker compose --profile S1 up -d
# Verify
docker ps
curl http://localhost:8100/health
curl http://localhost:4000/health/liveliness
6.8 Firewall (allow Tailscale only)
PowerShell · admin
$ports = @(8100, 4000, 6380, 8500, 8700, 8650, 11434)
foreach ($p in $ports) {
New-NetFirewallRule -DisplayName "Service-$p (Tailscale)" -Direction Inbound `
-InterfaceAlias "Tailscale" -Protocol TCP -LocalPort $p -Action Allow
}
6.9 Disable sleep (always-on spine)
PowerShell · admin
powercfg /change standby-timeout-ac 0
powercfg /change hibernate-timeout-ac 0
powercfg /setactive 8c5e7fda-e8bf-4a96-9a85-a6e23a8c635c
powercfg /query | findstr "Sleep Hibernate"
6.10 Verify cross-PC (from laptop)
PowerShell · on laptop
curl http://desktop-2060:11434/api/tags
curl http://desktop-2060:8100/health
curl http://desktop-2060:4000/health/liveliness
6.11 Checklist 2060
✅ 2060 พร้อม → ไปต่อที่ PC #3: Desktop 5080
3
Desktop 5080 5080
7.1 Pre-flight (7 steps)
เหมือน 2060 · ต่างแค่ hostname
PowerShell · admin · on 5080
# 1. Windows update
Install-Module PSWindowsUpdate -Force -Scope CurrentUser
Install-WindowsUpdate -AcceptAll -AutoReboot
# 2. Admin verify
[bool](([Security.Principal.WindowsIdentity]::GetCurrent()).Groups -match "S-1-5-32-544")
# 3. Internet
ping login.tailscale.com ; ping github.com
# 4. Hostname
Rename-Computer -NewName "desktop-5080" -Restart -Force
# 5. Disk
Get-PSDrive C | Select-Object @{N='FreeGB';E={[math]::Round($_.Free/1GB,1)}}
# 6. Tools (driver ต้อง ≥ 570 สำหรับ RTX 5080)
winget install --id Python.Python.3.12 -e
winget install --id Git.Git -e
winget install --id Docker.DockerDesktop -e
nvidia-smi # ต้องเห็น RTX 5080 + driver ≥ 570
# 7. Git config + PAT
git config --global user.email "wt.inlife@gmail.com"
git config --global user.name "Phatchara"
cmdkey /generic:git:https://github.com /user:wt-phatchara /pass:YOUR_PAT_HERE
7.2 Install Tailscale
PowerShell · admin
winget install --id Tailscale.Tailscale -e
tailscale up --hostname=desktop-5080
tailscale status
7.3 Verify mesh
จาก laptop:
ping desktop-5080
ping desktop-2060
# ทั้ง 2 ตัวต้องเห็น
7.4 Install Ollama (heavy 14B)
PowerShell · admin · on 5080
winget install Ollama.Ollama
[Environment]::SetEnvironmentVariable("OLLAMA_HOST","0.0.0.0:11434","Machine")
Restart-Service Ollama
netstat -ano | findstr :11434 # ต้องเห็น 0.0.0.0:11434
7.5 Pull heavy models (16 GB VRAM budget)
PowerShell
ollama pull qwen2.5:14b # 9 GB · primary
ollama pull qwen2.5-coder:7b # 4.7 GB · PMF mining
ollama pull bge-m3 # 1.2 GB · embedding
ollama pull bge-reranker-v2-m3 # 1.1 GB · reranker
ollama list
nvidia-smi # ดู VRAM
7.6 Clone repo + Start SBOS
PowerShell
mkdir C:\workspace ; cd C:\workspace
git clone https://github.com/wt-phatchara/operator-os.git
cd "C:\workspace\operator-os\Solopreneur Foundation"
# ⚠️ ต้อง copy .env ไฟล์ secret จาก laptop / Bitwarden ก่อน
$env:OPERATOR_SCENARIO = "S1"
$env:OPERATOR_PC_ROLE = "5080"
docker compose up -d
# Verify
curl http://localhost:8200/health
curl http://localhost:6333/collections
7.7 Firewall
PowerShell · admin
$ports = @(8200, 3000, 1200, 6333, 8086, 11434, 8009)
foreach ($p in $ports) {
New-NetFirewallRule -DisplayName "SBOS-$p (Tailscale)" -Direction Inbound `
-InterfaceAlias "Tailscale" -Protocol TCP -LocalPort $p -Action Allow
}
7.8 Disable sleep + power plan
PowerShell · admin
powercfg /change standby-timeout-ac 0
powercfg /change hibernate-timeout-ac 0
powercfg /setactive 8c5e7fda-e8bf-4a96-9a85-a6e23a8c635c
7.9 Verify cross-PC
จาก laptop:
curl http://desktop-5080:11434/api/tags
curl http://desktop-5080:8200/health
curl http://desktop-5080:6333/collections
7.10 Checklist 5080
✅ 5080 พร้อม → ไปต่อที่ PC #4: i3 server (optional · skip ได้ ทำทีหลัง)
4
i3 Server i3
i3 = always-on storage hub · CPU only ไม่มี GPU · เก็บ Postgres data + monitor 5080/2060 + เก็บ backup
8.1 Pre-flight (เหมือนเดิม · hostname = i3-server)
PowerShell · admin · on i3
# 1-3: update + admin verify + internet ping (เหมือนเดิม)
# 4. Hostname
Rename-Computer -NewName "i3-server" -Restart -Force
# 5-6: Tools (NO Python, NO NVIDIA · ใช้แค่ Git + Docker)
winget install --id Git.Git -e
winget install --id Docker.DockerDesktop -e
# 7: Git config
git config --global user.email "wt.inlife@gmail.com"
git config --global user.name "Phatchara"
8.2 Tailscale
PowerShell · admin
winget install --id Tailscale.Tailscale -e
tailscale up --hostname=i3-server
# จด tailnet IP → ต้องเป็นชื่อ i3-server (i3.tailnet) ตามที่อื่นอ้าง
8.3 Storage hub stack
PowerShell
mkdir C:\workspace\storage-hub
cd C:\workspace\storage-hub
@'
services:
postgres:
image: timescale/timescaledb:latest-pg16
container_name: shared-pg
ports: ["5432:5432"]
environment:
POSTGRES_USER: operator
POSTGRES_PASSWORD: ${PG_PASSWORD}
volumes: ["./pgdata:/var/lib/postgresql/data"]
restart: unless-stopped
portainer:
image: portainer/portainer-ce:latest
container_name: portainer
ports: ["9443:9443"]
volumes:
- /var/run/docker.sock:/var/run/docker.sock
- ./portainer-data:/data
restart: unless-stopped
uptime-kuma:
image: louislam/uptime-kuma:1
container_name: uptime-kuma
ports: ["3001:3001"]
volumes: ["./kuma-data:/app/data"]
restart: unless-stopped
'@ | Set-Content docker-compose.yml
"PG_PASSWORD=$(New-Guid)" | Set-Content .env
docker compose up -d
docker ps
8.4 Firewall
PowerShell · admin
$ports = @(5432, 9443, 3001)
foreach ($p in $ports) {
New-NetFirewallRule -DisplayName "Storage-$p (Tailscale)" -Direction Inbound `
-InterfaceAlias "Tailscale" -Protocol TCP -LocalPort $p -Action Allow
}
8.5 Setup Uptime Kuma
- เปิด
http://i3-server:3001จาก laptop - Create admin account (first-time)
- Add HTTP(s) monitors:
- SBOS:
http://desktop-5080:8200/health - Ollama heavy:
http://desktop-5080:11434/api/tags - l2-hub:
http://desktop-2060:8100/health - LiteLLM:
http://desktop-2060:4000/health/liveliness - Ollama light:
http://desktop-2060:11434/api/tags
- SBOS:
8.6 Disable sleep
powercfg /change standby-timeout-ac 0
powercfg /change hibernate-timeout-ac 0
8.7 Checklist i3
✅ i3 พร้อม → ไปต่อที่ PC #5: i5 flash rig
5
i5 Mini PC i5
i5 = 4GB RAM only. ห้ามติดตั้ง Docker. ใช้ PlatformIO CLI เพื่อ flash ESP32 ผ่าน USB เท่านั้น
9.1 Pre-flight (hostname = i5-flash)
PowerShell · admin · on i5
# Standard pre-flight
Install-Module PSWindowsUpdate -Force -Scope CurrentUser
Install-WindowsUpdate -AcceptAll -AutoReboot
ping login.tailscale.com
ping github.com
Rename-Computer -NewName "i5-flash" -Restart -Force
# Tools (Python + Git + PlatformIO · NO Docker · NO NVIDIA)
winget install --id Python.Python.3.12 -e
winget install --id Git.Git -e
pip install platformio
pio --version
9.2 Tailscale
winget install --id Tailscale.Tailscale -e
tailscale up --hostname=i5-flash
9.3 Enable SSH server
PowerShell · admin
Add-WindowsCapability -Online -Name OpenSSH.Server~~~~0.0.1.0
Start-Service sshd
Set-Service -Name sshd -StartupType 'Automatic'
New-NetFirewallRule -DisplayName "SSH (Tailscale)" -Direction Inbound `
-InterfaceAlias "Tailscale" -Protocol TCP -LocalPort 22 -Action Allow
9.4 Clone firmware repos
mkdir C:\firmware
cd C:\firmware
git clone https://github.com/wt-phatchara/SpotWelder_SuperCap_PoC.git
git clone https://github.com/wt-phatchara/JumpStarter_SuperCap_PoC.git
git clone https://github.com/wt-phatchara/HybridPack_SuperCap_PoC.git
git clone https://github.com/wt-phatchara/Zircon_SMOOTH1_UPS_PoC.git
9.5 Verify from laptop
# จาก laptop:
ping i5-flash
ssh i5-flash
# ครั้งแรกจะถาม fingerprint → yes
9.6 Checklist i5
✅ ทุก PC พร้อม → End-to-End Verify
10. End-to-End Verify
ทำที่ laptop หลังทุก PC setup ครบ
10.1 All 5 PCs alive
tailscale status
# ต้องเห็น 5 entries:
# laptop-jaao · desktop-2060 · desktop-5080 · i3-server · i5-flash
# สถานะ "active"
10.2 Service health (cross-PC)
# 2060
curl http://desktop-2060:8100/health
curl http://desktop-2060:4000/health/liveliness
curl http://desktop-2060:11434/api/tags
# 5080
curl http://desktop-5080:8200/health
curl http://desktop-5080:6333/collections
curl http://desktop-5080:11434/api/tags
# i3
curl http://i3-server:3001/api/status-page
# i5
ssh i5-flash "pio --version"
10.3 Routing through l2-hub
# Test that l2-hub routes to 5080 Ollama
curl -X POST http://desktop-2060:8100/route `
-H "Content-Type: application/json" `
-d '{"task":"code","prompt":"say hi"}'
Checklist
11. PMF Mining Run
Script: C:/Users/JA/Documents/research/ollama_mine.py (บน laptop) · target = Ollama บน 5080
Path A: Run on 5080 (recommend)
PowerShell · on 5080
cd C:\workspace\operator-os\research
git pull
# Smoke test 1 file ก่อน
$env:PMF_LIMIT = "1"
python ollama_mine.py
# Full overnight run
Remove-Item Env:\PMF_LIMIT -ErrorAction SilentlyContinue
Start-Process -NoNewWindow python `
-ArgumentList "ollama_mine.py" `
-RedirectStandardOutput "mine.log" `
-RedirectStandardError "mine.err"
Path B: Run from laptop, via Tailscale
cd C:\Users\JA\Documents\research
$env:OLLAMA_HOST = "http://desktop-5080:11434"
python ollama_mine.py
12. Monitor
From laptop ผ่าน SSH
ssh desktop-5080
# Tail log
Get-Content C:\workspace\operator-os\research\_pmf_ollama_mining.log -Wait -Tail 50
# File count
type C:\workspace\operator-os\research\_pmf_ollama_progress.json | python -c "import sys,json; d=json.load(sys.stdin); print(f'{len(d.get(\"processed\",[]))} / 47')"
# Idea count
type C:\workspace\operator-os\research\_pmf_ollama_ideas.json | python -c "import sys,json; d=json.load(sys.stdin); print(f'{len(d)} ideas')"
# GPU
nvidia-smi
Via Uptime Kuma
เปิด http://i3-server:3001 · ดู status page
13. Troubleshoot
Tailscale
| Symptom | Fix |
|---|---|
NoState | Restart-Service Tailscale + tailscale up |
| MagicDNS ไม่ resolve | Admin console → DNS → toggle MagicDNS off → on |
| Peer offline | Peer PC sleep หรือ network เปลี่ยน · wait หรือ reboot |
| VISTEC firewall slow ping | Latency 200ms+ ปกติ · ใช้งานได้ |
Ollama
| Symptom | Fix |
|---|---|
| Connection refused | Start-Service Ollama |
| Model not found | ollama pull qwen2.5-coder:7b |
| Empty model list | ใช้ 127.0.0.1 ไม่ใช่ localhost |
| Cross-PC unreach | Firewall + ตรวจ OLLAMA_HOST=0.0.0.0 |
| OOM | VRAM ไม่พอ · ใช้ model เล็กลง |
Docker
| Symptom | Fix |
|---|---|
| 500 error all commands | docker context use default |
| Container restart loop | docker logs <name> |
| Port in use | netstat -ano | findstr :PORT + taskkill /PID <PID> /F |
Git pull conflict
| Symptom | Fix |
|---|---|
| "Your branch and origin/dev have diverged" | git fetch --all ; git reset --hard origin/dev (R1 destructive) |
| "Authentication failed" | Re-set PAT: cmdkey /generic:git:https://github.com /user:wt-phatchara /pass:NEW_PAT |
14. Reference
Hostname → Services
| Hostname | Services + ports |
|---|---|
laptop-jaao | (none exposed) · 127.0.0.1:11434 Ollama loopback |
desktop-2060 | :8100 l2-hub · :4000 LiteLLM · :6380 Redis · :8500 Synapse · :11434 Ollama light |
desktop-5080 | :8200 SBOS · :6333 Qdrant · :8086 InfluxDB · :11434 Ollama heavy · :8009 TMAO paper |
i3-server | :5432 Postgres · :9443 Portainer · :3001 Kuma |
i5-flash | :22 SSH only |
Env vars
| Var | Value | เครื่อง |
|---|---|---|
OPERATOR_SCENARIO | S1 | ทุก PC |
OPERATOR_PC_ROLE | laptop / 5080 / 2060 / i3 / i5 | ต่างกัน |
OLLAMA_HOST | 0.0.0.0:11434 (5080/2060) · 127.0.0.1:11434 (laptop) | — |
Common commands cheat sheet
# Tailscale
tailscale status # who's on tailnet
tailscale ip -4 # my IP
tailscale ping desktop-5080 # diagnostic
# Ollama
ollama list # installed models
ollama ps # loaded in VRAM
ollama run qwen2.5:14b # chat
curl http://HOST:11434/api/tags
# Docker
docker ps # running containers
docker logs CONTAINER -f # tail logs
docker compose up -d # start all
docker compose down # stop all
# Service health from laptop
curl http://desktop-2060:8100/health # l2-hub
curl http://desktop-5080:8200/health # SBOS
curl http://i3-server:3001 # Kuma
# Power (admin)
powercfg /query | findstr Sleep
powercfg /change standby-timeout-ac 0
Spec references
- Full spec v10:
C:/Users/JA/Documents/specs/2026-06-13-v10-master-parts/21-hardware-scenario-flexibility.md - Pin map:
specs/2026-05-24-v9-master-parts/03-pin-maps.md - Port registry:
Documents/CLAUDE.md §12.2
v3 Beginner Edition · Phatchara Operator OS · 2026-06-17
Public: ollama-setup-guide.pages.dev