5-PC Beginner Guide ⏱ Setup: 4-6 hr · Mining: 8-12 hr overnight

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

  1. อ่าน Foundation (Section 0-4) ก่อน — ใช้เวลา ~15 นาที
  2. เริ่มทำที่ PC #1 (Laptop) → ทำตาม section 5 จบครบทุก step
  3. ไป PC #2 (2060) → section 6
  4. ...ทำเรียงลำดับจน PC #5 (i5) → section 9
  5. End-to-End Verify (section 10) → ทุก service ตอบ OK ไหม?
  6. เริ่ม 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
R1Reversible แต่ affects servicerestart service, port change
R2Easy revert · ทำได้สบายdocs edit, test, config tweak

2. Hardware Inventory (5 PCs)

#PCHardwareOSTag
1LaptopRTX 4050 6GB · 32GB RAM · NVMe 88% ⚠️Win 11laptop
2Desktop 2060RTX 2060 6GB · always-on spineWin 112060
3Desktop 5080RTX 5080 16GB GDDR7 · 9800X3D CPUWin 115080
4i3 serveri3 CPU · low-watt · LAN anchorWin/Linuxi3
5i5 mini PC4GB RAM · CPU light · NO DockerWini5

Role per PC

PCPrimary roleServices running
laptop🔴 Secret zone + CockpitDoctrine SOT, Claude Code, TMAO live, Ollama loopback (phi4-mini)
2060Always-on spinel2-hub :8100, LiteLLM :4000, Synapse :8500, AKASHA backend
5080GPU brainSBOS :8200, Qdrant :6333, Ollama 14B, TMAO paper
i3Storage hubPostgres :5432, Portainer, Backup, Uptime Kuma external
i5ESP32 flash rigPlatformIO 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)

  1. เปิด login.tailscale.com/start
  2. Sign in ด้วย Google / GitHub / Microsoft (account เดียวกับที่ใช้บน 5 PCs)
  3. หน้าจะแสดง tailnet name เช่น jaao.tail-xxxx.ts.netจดไว้
  4. ตั้งใน admin panel → DNS → toggle MagicDNS ON

4.2 GitHub access

ใช้ account wt-phatchara ที่มีอยู่ · เตรียม Personal Access Token (PAT) สำหรับ clone repo บน PC อื่น:

  1. ไปที่ github.com/settings/tokens
  2. Generate new token (classic) · scope = repo
  3. Copy token → save ใน password manager (Bitwarden/1Password)

4.3 Decisions (locked)

DecisionValue
Tailnet name(your tailnet name)
Hostname schemelaptop-jaao · desktop-5080 · desktop-2060 · i3-server · i5-flash
Tailscale account1 account สำหรับ 5 PCs
Git accountwt-phatchara (PAT for non-laptop PCs)
Setup orderLaptop → 2060 → 5080 → i3 → i5
1

Laptop laptop

🔴 Secret zone · Doctrine SOT · ETA ~30-45 min
ทำที่ 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

หรือ GUI: Win+I → Update & Security → Check for updates

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

replies + 0% loss = OK · latency <300ms OK

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

⚠️ laptop NVMe 88% เต็ม — ถ้าน้อยกว่า 20 GB → cleanmgr ทำ disk cleanup

6
Tools install
PowerShell · admin
winget install --id Python.Python.3.12 -e
winget install --id Git.Git -e
nvidia-smi  # ตรวจ driver มีไหม

laptop ไม่ต้องติด Docker (secret zone, ใช้ Claude Code + Ollama loopback พอ)

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

Always-on spine · l2-hub + LiteLLM + Synapse · ETA ~60-90 min
ไปนั่งหน้าเครื่อง 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

หลัง Docker ติดตั้ง → reboot → start Docker Desktop → Settings → "Start at login"

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

GPU brain · SBOS + Qdrant + Ollama 14B · ETA ~60-90 min

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

Storage hub · Postgres + Backup + Kuma external · ETA ~40-60 min
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

  1. เปิด http://i3-server:3001 จาก laptop
  2. Create admin account (first-time)
  3. 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

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

ESP32 flash rig only · NO Docker · ETA ~20-30 min
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

SymptomFix
NoStateRestart-Service Tailscale + tailscale up
MagicDNS ไม่ resolveAdmin console → DNS → toggle MagicDNS off → on
Peer offlinePeer PC sleep หรือ network เปลี่ยน · wait หรือ reboot
VISTEC firewall slow pingLatency 200ms+ ปกติ · ใช้งานได้

Ollama

SymptomFix
Connection refusedStart-Service Ollama
Model not foundollama pull qwen2.5-coder:7b
Empty model listใช้ 127.0.0.1 ไม่ใช่ localhost
Cross-PC unreachFirewall + ตรวจ OLLAMA_HOST=0.0.0.0
OOMVRAM ไม่พอ · ใช้ model เล็กลง

Docker

SymptomFix
500 error all commandsdocker context use default
Container restart loopdocker logs <name>
Port in usenetstat -ano | findstr :PORT + taskkill /PID <PID> /F

Git pull conflict

SymptomFix
"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

HostnameServices + 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

VarValueเครื่อง
OPERATOR_SCENARIOS1ทุก PC
OPERATOR_PC_ROLElaptop / 5080 / 2060 / i3 / i5ต่างกัน
OLLAMA_HOST0.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