# 188 Legacy Ollama 退場 Gate

## 目的

`192.168.0.188:11434` 已不再是 AWOOOI / AwoooP 的 Ollama provider。正式順序是：

1. GCP-A：`192.168.0.110:11435`
2. GCP-B：`192.168.0.110:11436`
3. Local 111：`192.168.0.110:11437`
4. Gemini / Claude：雲端備援，不是主路徑

188 主機仍承載 PostgreSQL、Redis、SigNoz、OpenClaw 等服務，所以不能把「解除 188 Ollama」誤解成「動 188 主機」。退場只針對 `ollama.service` 與 `:11434`。

## 退場前不變式

- repo runtime 不得再出現 `ollama_188`、`OLLAMA_188`、`Ollama188Provider` 或 `192.168.0.188:11434`。
- `awoooi-prod` 與 `awoooi-dev` live env 不得指向 `192.168.0.188:11434`。
- Prometheus live config 不得再探測 `192.168.0.188:11434`。
- 188 的 Ollama journal 在觀察窗口內不得有 `/api/generate`、`/api/chat`、`/v1/chat/completions` 推理 POST。
- `192.168.0.121` 不得再固定對 188 `/api/tags` 做 dev health check。
- 188 不得以 `0.0.0.0:11434` / `*:11434` 監聽；允許狀態只有 `ollama.service` active 且綁定 `127.0.0.1:11434`。

## 檢查方式

```bash
scripts/ops/ollama188-retirement-gate.sh
```

可調整觀察窗口：

```bash
POST_SINCE="24 hours ago" HEALTH_SINCE="10 minutes ago" scripts/ops/ollama188-retirement-gate.sh
```

## 階段決策

| 階段 | 條件 | 動作 |
| --- | --- | --- |
| Observe | Gate 仍有 failures | 不停止服務，只繼續追來源 |
| Stop | Gate 連續 24 小時綠燈 | 可執行 `systemctl stop ollama`，保留 binary 與模型 |
| Disable | Stop 後 48 小時無回歸 | 可 `systemctl disable ollama` |
| Uninstall | Disable 後 7 天無回歸，且確認無其他專案依賴 | 才評估移除套件與模型資料 |

## 192.168.0.88 的正確判讀

`192.168.0.88` 不是 AWOOOI 的下游專案主機。188 上的路由顯示：

```text
default via 192.168.0.88 dev ens160
```

因此 Ollama journal 中的 `192.168.0.88` 應視為 gateway / NAT / port-forward / hairpin 來源。若看到它打 `/api/generate`、`/api/chat`、`/v1/chat/completions`，代表 188 的 `:11434` 曾經暴露給 gateway 入口，不是正常 tenant 依賴。

## 緊急封口

若發現 188 Ollama 又變成 `*:11434`，可先執行臨時封口：

```bash
scripts/ops/ollama188-localhost-containment.sh
```

臨時封口會：

- kill 目前 `ollama` 使用者的 `/usr/local/bin/ollama serve`。
- 以同一個 `ollama` 使用者重啟一個只綁 `127.0.0.1:11434` 的進程。
- 讓 `192.168.0.188:11434` 從 LAN / gateway 視角拒絕連線。

限制：

- 若 systemd override 尚未完成永久修復，原服務仍可能因 root-owned override 裡的 `OLLAMA_HOST=0.0.0.0` 而反覆 restart 失敗。
- 這是安全封口，不是乾淨的永久狀態。

## 永久修法（已封裝為腳本）

目前採用受控 host 修復腳本，透過 188 上 `ollama` 使用者的 Docker root-equivalent 能力修改 host systemd override，將 `OLLAMA_HOST` 固定為 `127.0.0.1:11434`，再 `daemon-reload` 與重啟 `ollama.service`：

```bash
scripts/ops/ollama188-systemd-localhost-fix.sh
```

腳本會做三件事：

- 備份 `/etc/systemd/system/ollama.service.d/override.conf`。
- 將 `Environment="OLLAMA_HOST=0.0.0.0"` 改為 `Environment="OLLAMA_HOST=127.0.0.1:11434"`。
- 驗證 188 本機 `127.0.0.1:11434` 可用、LAN 入口 `192.168.0.188:11434` 拒絕連線。

若需要人工在 188 上重新操作，等效命令如下：

```bash
sudo install -d /etc/systemd/system/ollama.service.d
sudo cp /etc/systemd/system/ollama.service.d/override.conf \
  /etc/systemd/system/ollama.service.d/override.conf.bak.$(date +%Y%m%d_%H%M%S)

sudo sed -i 's/Environment="OLLAMA_HOST=0.0.0.0"/Environment="OLLAMA_HOST=127.0.0.1:11434"/' \
  /etc/systemd/system/ollama.service.d/override.conf

sudo systemctl daemon-reload
sudo pkill -u ollama -f "/usr/local/bin/ollama serve" || true
sudo systemctl restart ollama
ss -lntp | grep 11434
curl -sS --max-time 3 http://127.0.0.1:11434/api/tags >/dev/null && echo LOCAL_OK
curl -sS --max-time 3 http://192.168.0.188:11434/api/tags || echo LAN_CLOSED
```

## 今日發現

- `awoooi-prod` provider registry 已沒有 `ollama_188`。
- `awoooi-dev` 原本仍使用 `OLLAMA_URL=http://192.168.0.188:11434`，已 live patch 到 GCP-A/GCP-B/111 proxy。
- Prometheus 舊 blackbox target 已移除並 reload，避免退役後誤報。
- 188 journal 中近期少量推理 POST 來源為 `192.168.0.88`；後續確認 `.88` 是 188 的 default gateway，不是下游主機。
- 2026-05-06 14:53 短窗口 Gate 綠燈：repo、K8s env、Prometheus target、dev health check 均已避開 188。
- 24 小時 Gate 尚未綠燈：仍看得到 `192.168.0.88` 在 24 小時內送過推理 POST。
- 2026-05-06 15:14 已執行臨時封口：188 只聽 `127.0.0.1:11434`；從本機、110、K8s Pod 直連 `192.168.0.188:11434` 均拒絕。
- 2026-05-06 15:22 已執行永久 systemd 修復：`ollama.service` active，override 固定 `OLLAMA_HOST=127.0.0.1:11434`，不再有 systemd restart loop。
- 2026-05-12 18:35 重新跑 24 小時 Gate：repo runtime、`awoooi-prod`/`awoooi-dev` live env、Prometheus target、LAN exposure、24 小時推理 POST、dev health check 全部 PASS。判讀：188 Ollama 已是 stop candidate，但仍不直接 uninstall；依階段決策先保留服務、等待明確停用窗口。
