# Hermes Disaster Recovery Plan v2

**Last updated:** July 9, 2026
**Author:** Sho'Nuff + Network Services Team
**Supersedes:** `hermes-standby-deployment` skill's failover logic

---

## Architecture

```
Core (netcup RS 2000 — 152.53.192.33)          app1-bu (Hetzner CPX21 — 5.161.114.8)
┌──────────────────────────────────┐          ┌──────────────────────────────────┐
│  Hermes Agent (active)           │          │  Hermes Gateway (dormant)        │
│  Ollama + llama3.2:3b (fallback) │◄─Tailnet─►│  Ollama + llama3.2:3b (standby)  │
│  state.db (SQLite, ~1.87 GB)     │          │  state.db (synced)               │
│  Telegram gateway (active)       │          │  Telegram gateway (off)          │
│                                  │          │                                  │
│  S3 backup every 15 min ─────────┼─────────►│  S3 sync every 5 min ◄───────────┤
│  Snapshot every 10 min ──────────┼─────────►│                                  │
└──────────────────────────────────┘          └──────────────────────────────────┘
         │                                              │
         ▼                                              ▼
  s3://hermes-vps-backups/live/
  s3://hermes-vps-backups/snapshots/     (standby pulls snapshots on change)
  s3://hermes-vps-backups/ACTIVE_OWNER   (standby writes on takeover only)
```

**Key changes from v1:**
- app1-bu upgraded from CPX11 (2C/2G) to CPX21 (4C/8G, ~$14/mo) to run its own local Ollama
- Both boxes have local Ollama (llama3.2:3b) — health checks never depend on external LLM providers
- Traffic between boxes goes over Tailscale tailnet (not public IPs), avoiding the Hetzner↔netcup routing issue
- No 60-second S3 writes from standby — all cross-box communication uses Tailscale directly
- S3 is backup storage only, not a communication channel

[Full document contents at /root/.hermes/cache/documents/doc_0e07de339e65_hermes-dr-plan-v2.md]
