Disaster Recovery — plán obnovy
Princip
Argus zálohuje, Sentinel kontroluje. Každý server musí být obnovitelný z nuly.
Sentinel (tento server)
Kritičnost: VYSOKÁ — bez Sentinelu nelze nasazovat, monitorovat, ani koordinovat.
Co zálohovat
| Cesta | Obsah | Priorita |
|---|---|---|
/root/secrets/ |
Credentials všech služeb (env soubory, DB hesla, API klíče) | KRITICKÁ |
/root/projects/sentinel/ |
Dashboard, docs, testy, docker-compose | VYSOKÁ |
/root/projects/n8n/ |
N8N compose config | STŘEDNÍ |
/root/.claude/ |
Agent memory, settings, project config | VYSOKÁ |
/root/.ssh/ |
SSH klíče (přístup na hub/prod/cerebro) | KRITICKÁ |
/root/.env |
Relay API key | KRITICKÁ |
/etc/fail2ban/ |
Fail2ban konfigurace | NÍZKÁ |
/root/.config/zellij/ |
Zellij config (theme) | NÍZKÁ |
Co NENÍ potřeba zálohovat
/root/projects/auth/,pulse/,s60-mail/,badwolf/,venom/,billit/— klonovatelné z GitHubu- Docker images — stáhnou se znovu
- Nginx config — je v
/root/projects/sentinel/nginx.conf
Obnova Sentinelu (krok za krokem)
- Nový VPS (Hetzner, Ubuntu 24.04)
- Tailscale:
curl -fsSL https://tailscale.com/install.sh | sh && tailscale up - SSH klíče: obnovit z Argus zálohy (
/root/.ssh/) - Secrets: obnovit
/root/secrets/z Argus zálohy - Relay API key: obnovit
/root/.env - Docker:
apt-get install docker.io docker-compose-v2 - Git repos:
mkdir -p /root/projects cd /root/projects git clone git@github.com:studio60-cz/s60-auth.git auth git clone git@github.com:studio60-cz/s60-mail.git s60-mail git clone git@github.com:websterlibor/s60-pulse.git pulse git clone git@github.com:studio60-cz/badwolf.git git clone git@github.com:studio60-cz/venom.git git clone git@github.com:studio60-cz/billit.git - Sentinel projekt: obnovit z Argus zálohy (dashboard, docs, testy, n8n config)
- Claude agent: obnovit
/root/.claude/(memory, settings) - Dashboard:
cd /root/projects/sentinel && docker compose up -d - MkDocs:
pip install mkdocs-material && cd docs && mkdocs build - Fail2ban:
apt-get install fail2ban+ obnovit config - DNS: sentinel.studio60.cz → nová IP (Cloudflare)
- Ověření: smoke test, Relay API komunikace, SSH na hub/prod
Odhadovaný čas obnovy: 30–60 minut (pokud jsou zálohy aktuální)
Hub-alfa (staging)
Kritičnost: STŘEDNÍ — staging, lze přebudovat z nuly.
Co zálohovat
| Co | Jak | Kam |
|---|---|---|
| PostgreSQL (s60_auth_hub, s60_pulse_hub, s60_mail_hub, s60_n8n_hub) | pg_dump (Argus cron) | Argus |
| N8N workflows + credentials | n8n volume nebo n8n export API | Argus |
Obnova
- Nový VPS + Docker + Tailscale
- Sentinel nasadí služby (
rsync+docker compose up) - Sentinel obnoví DB z Argus zálohy (
pg_restore) - Nginx + certbot pro SSL
- Smoke test
Odhadovaný čas: 30–45 minut
Prod-alfa (produkce)
Kritičnost: VYSOKÁ — živá produkce.
Co zálohovat
| Co | Jak | Kam |
|---|---|---|
| PostgreSQL (s60_auth_prod, s60_pulse_prod, s60_mail_prod, s60_n8n_prod) | pg_dump (Argus cron) | Argus |
| N8N workflows + credentials | n8n volume nebo n8n export API | Argus |
Obnova
Stejný postup jako hub-alfa, ale s prod env soubory a prod DB zálohou.
Odhadovaný čas: 30–45 minut
Cerebro (dev server)
Kritičnost: STŘEDNÍ — dev prostředí, agenti, Relay API.
Co zálohovat
| Co | Jak | Kam |
|---|---|---|
| PostgreSQL dev DB | pg_dump (Argus cron) | Argus |
| Redis (Relay API data) | RDB snapshot nebo AOF | Argus |
| Agent konfigurace | rsync /root/projects/ | Argus |
| Relay API (s60-relay) | git repo + config | Argus |
Co Sentinel NEZNÁ
Omezený přístup
Sentinel nemá plný přístup na Cerebro — pouze Relay API (port 3020). DR plán pro Cerebro musí spravovat main agent nebo infra agent. Sentinel může pomoci s DB zálohou, pokud dostane přístup.
Obnova
Zodpovědnost: main agent + infra agent. Sentinel pomůže s DB restore pokud bude potřeba.
Cortex (S60-CS pipeline)
Kritičnost: NÍZKÁ (pro Sentinel) — samostatný pipeline server.
Co zálohovat
| Co | Jak | Kam |
|---|---|---|
| Pipeline konfigurace | rsync nebo git | Argus |
| Případná DB | pg_dump | Argus |
Co Sentinel NEZNÁ
Mimo scope
Cortex je mimo přímý scope Sentinelu. DR plán by měl spravovat ten, kdo Cortex provozuje.
Argus (backup server)
Kritičnost: VYSOKÁ — je to backup server, pokud spadne, ztrácíme zálohy.
Ochrana Argusu
- Zálohy z Argusu replikovat na offsite storage MIMO DigitalOcean (DO zálohy jsou na Argusu, nechceme zálohu zálohy u stejného providera)
- Argus sám by měl mít minimální konfiguraci (snadno obnovitelný)
- Monitoring: Sentinel kontroluje, že Argus žije a zálohy jsou aktuální
Backup matice
| Server | Zodpovědnost za zálohu | Zodpovědnost za obnovu | Kde záloha |
|---|---|---|---|
| Sentinel | Argus (cron) | Libor + nový Sentinel | Argus + offsite (mimo DO) |
| Hub-alfa | Argus (cron, RO přístup) | Sentinel | Argus |
| Prod-alfa | Argus (cron, RO přístup) | Sentinel | Argus |
| Cerebro | Argus (cron) | main/infra agent | Argus |
| Cortex | Argus (cron) | vlastník | Argus |
| Argus | offsite (mimo DO) (offsite) | infra agent | offsite (mimo DO) |
DO Managed PG → Argus backup
TODO — zatím nenastaveno
Denní pg_dump všech DB na Argus. Čekáme na SSH přístup na Argus od infra agenta.
DB k zálohování:
| DB | Prostředí | Služba |
|---|---|---|
| s60_auth_hub | hub | S60Auth |
| s60_auth_prod | prod | S60Auth |
| s60_pulse_hub | hub | S60 Pulse |
| s60_pulse_prod | prod | S60 Pulse |
| s60_mail_hub | hub | S60Mail |
| s60_mail_prod | prod | S60Mail |
| s60_n8n_hub | hub | N8N |
| s60_n8n_prod | prod | N8N |
Plán:
- Argus má RO přístup na DO PG (pg_dump přes Tailscale nebo public endpoint)
- Cron na Argusu: denně 02:00 CET
- Retence: 7 denních + 4 týdenní
- Sentinel monitoruje: kontrola timestamp + velikost po každém backupu
Testování obnovy
| Co | Frekvence | Jak |
|---|---|---|
| DB restore test | měsíčně | Sentinel obnoví zálohu do temp DB, ověří integritu |
| Sentinel full restore | čtvrtletně | Obnovit Sentinel na testovém VPS z Argus zálohy |
| Service redeploy test | po každém DR update | Sentinel nasadí službu z čistého stavu na hub |
Kontakty pro DR
| Kdo | Kdy volat |
|---|---|
| Libor | Vždy — je vlastník infrastruktury |
| PM agent | Status reporty během obnovy |
| Infra agent | DNS změny, Argus problémy, server provisioning |