# 保姆级调试手册

## 证书一直不出

```bash
journalctl -u caddy -n 100 --no-pager | grep -i obtain
# DNS 必须有 A 记录指向 13.140.229.90
curl -sS "https://dns.google/resolve?name=你的域名&type=A"
```

NXDOMAIN → 先在 Spaceship 补 A 记录，不要反复 reload 刷 ACME。

当前已知缺 DNS：`4rakazu.ai16.ai`、`docs.ai16.ai`（均为 NXDOMAIN）。文档临时入口：https://1munder.ai16.ai/docs/

## OpenMaus 308 死循环

原因：主机 Caddy 若反代到「会把 HTTP 301/308 到 HTTPS」的内嵌 Caddy，会与外层 TLS 打架。  
现行做法：内嵌 Caddy 改为 **仅监听 :80（HTTP-only）**，主机 Caddy 反代 `127.0.0.1:8081`（映射到容器 80），并带上 `X-Forwarded-Proto https`。

```bash
# 检查内嵌 Caddyfile 是否为 :80 且无 tls
cat /opt/openmausbot/deploy/Caddyfile
# 主机
grep -A6 '2openmaus' /etc/caddy/Caddyfile
```

## 模型调用失败

1. `curl -sS https://api.cleanai.io/v1/models -H "Authorization: Bearer $KEY" | head`  
2. 确认模型名精确为 `gpt-6-luna`（大小写）  
3. Base URL **必须含** `/v1`  
4. Rakazo：`docker compose --env-file .env -f docker-compose.images.yml exec api env | grep -E 'LOCAL_MODELS|OPENAI|PI_DEFAULT'`（不要把密钥贴到聊天）  
5. OpenMaus：检查 `/data/.openmausbot/config.json` 里 `instances.cleanai-luna`  
6. Open Duet：`docker compose exec open-dots python -m app.server doctor` 应显示 `Engine OpenAI-compatible: Ready`  
7. 备选改 `gpt-5.6-luna`；不要用 DeepSeek

冒烟（在服务器上，密钥来自本地文件）：

```bash
KEY=$(cat /root/.secrets/cleanai_api_key)
curl -sS https://api.cleanai.io/v1/chat/completions \
  -H "Authorization: Bearer $KEY" -H 'Content-Type: application/json' \
  -d '{"model":"gpt-6-luna","messages":[{"role":"user","content":"Reply with exactly: OK-LUNA"}],"max_tokens":20}'
```

## 容器不健康

```bash
docker ps -a
docker logs --tail 200 <name>
free -h   # 多电脑容器时盯内存
df -h /
```

## Open Duet doctor

```bash
cd /opt/openduets
docker compose -f compose.yaml exec open-dots python -m app.server doctor
```

口令：`/root/.secrets/openduets_passphrase`。API 前缀为 `/api/v1`（例如 `/api/v1/auth/login`）。

## OpenBot 登录

必须交互式邮箱验证码；无人值守无法替用户完成。

```bash
cd /opt/openbot
docker compose exec openbot openbot status   # 应显示 signed out / Server: unconfigured
docker compose exec openbot openbot login    # 输入邮箱与验证码
```

## 回滚

- Caddy：`/etc/caddy/Caddyfile.bak.*`  
- 各项目：`*.env.bak.*`、`docker-compose.yml.bak.*`  
- `docker compose down` **不要**加 `-v`（会删数据）
