# Piano di Disaster Recovery — Flotta Autonoma **Versione:** 1.0 **Data:** 2026-03-06 **Autore:** Adrian (sysadmin — ex Steve) **Destinatari:** Mauro, Adrian, Elon (Team Prisma) --- ## Scenario: La Nave (MiniPC) è morta o inaccessibile ### Hardware attuale - **MiniPC:** GMKtec G3 NucBoxG3 - **OS:** Linux Mint 22.2 (Zara) — base Ubuntu Noble - **Disco OS:** NVMe 477GB (`/dev/nvme0n1p2`) → `/` - **SSD dati:** 1TB ext4 (`/dev/sda1`) → `/mnt/ssd` - **HDD backup:** 5TB ext4 (`/dev/sdb2`) → `/mnt/backup-hdd` --- ## Cosa è salvato e dove | Dato | Dove | Tipo | |------|------|------| | `/mnt/ssd` completo | `/mnt/backup-hdd/flotta-backup` | Restic (daily 03:00) | | `/mnt/ssd` completo | pCloud `Flotta-Mirror/ssd` | rclone mirror (daily 01:15) | | Config VPS (Caddy, WG, SSH) | `/mnt/ssd/adrian/config-backups/avamposto_snapshots/` | tar.gz (daily 02:45) | | Docker configs | incluse nel backup SSD | — | **Password Restic:** `maugag` **Repository:** `/mnt/backup-hdd/flotta-backup` --- ## Recovery — Caso 1: solo disco OS rotto (SSD e HDD intatti) Il caso più comune e più veloce da risolvere. ```bash # 1. Installa Linux Mint 22.2 su nuovo disco NVMe # 2. Monta SSD e HDD sudo mkdir -p /mnt/ssd /mnt/backup-hdd sudo mount /dev/sda1 /mnt/ssd sudo mount /dev/sdb2 /mnt/backup-hdd # 3. Installa dipendenze sudo apt install -y docker.io docker-compose restic rclone # 4. Ripristina fstab sudo nano /etc/fstab # Aggiungi: # UUID=3b511949-3a77-4b69-a719-410f3ee10d6d /mnt/ssd ext4 defaults,nofail 0 2 # UUID=23ade3f1-137e-421d-80c1-d1b7ba8b9f31 /mnt/backup-hdd ext4 defaults,errors=remount-ro 0 2 # 5. Ripristina chiavi SSH cp /mnt/ssd/[backup]/.ssh ~/.ssh chmod 600 ~/.ssh/id_ed25519 # 6. Avvia Docker e container cd /mnt/ssd/config/guacamole && docker compose up -d cd /mnt/ssd/config/jellyfin && docker compose up -d cd /mnt/ssd/config/webdav && docker compose up -d # Portainer e Navidrome: verificare docker-compose.yml o rilanciare manualmente # 7. Ripristina WireGuard sudo apt install -y wireguard sudo cp /mnt/ssd/[backup]/etc/wireguard/wg0.conf /etc/wireguard/ sudo systemctl enable --now wg-quick@wg0 # 8. Verifica tunnel ping 10.0.0.1 # 9. Ripristina crontab crontab /mnt/ssd/adrian/vault/CRONTAB_BACKUP.txt # vedi sezione sotto ``` --- ## Recovery — Caso 2: SSD dati rotto (OS e HDD intatti) ```bash # 1. Acquista nuovo SSD 1TB, formatta ext4, monta come /mnt/ssd sudo mkfs.ext4 /dev/sda1 sudo mount /dev/sda1 /mnt/ssd # 2. Ripristina da Restic (HDD) export RESTIC_PASSWORD=maugag restic -r /mnt/backup-hdd/flotta-backup restore latest --target /mnt/ssd # 3. Verifica integrità ls /mnt/ssd/{adrian,config,data} # 4. Poi segui i passi 6-9 del Caso 1 ``` --- ## Recovery — Caso 3: tutto perso (OS + SSD + HDD) Il caso peggiore — recupero da pCloud. ```bash # 1. Installa Linux Mint 22.2, installa rclone sudo apt install -y rclone # 2. Configura rclone con pCloud rclone config # nome remote: pcloud_backup, tipo: pcloud # 3. Scarica da pCloud mkdir -p /mnt/ssd rclone sync pcloud_backup:Flotta-Mirror/ssd /mnt/ssd --progress # 4. Poi segui i passi 6-9 del Caso 1 # NOTA: i dati pCloud potrebbero avere fino a 24h di ritardo ``` --- ## Recovery — VPS Avamposto (Caddy / WireGuard) Se il VPS deve essere ricreato da zero: ```bash # 1. Crea nuovo VPS Hetzner CX22 (Ubuntu 22.04) # 2. SSH con chiave esistente (o nuova) ssh root@NUOVO_IP # 3. Crea utente mauro adduser mauro && usermod -aG sudo mauro # 4. Ripristina configurazioni dall'ultimo snapshot avamposto # Gli snapshot sono in: /mnt/ssd/adrian/config-backups/avamposto_snapshots/ # Copia i file di config (Caddyfile, wg0.conf, sshd_config, fail2ban, ufw) # 5. Installa Caddy apt install -y docker.io docker-compose cd /opt/caddy && docker compose up -d # 6. Installa e configura WireGuard apt install -y wireguard cp wg0.conf /etc/wireguard/ systemctl enable --now wg-quick@wg0 # 7. Aggiorna DNS su Porkbun # privcloud.dev → nuovo IP VPS # *.privcloud.dev → nuovo IP VPS # 8. Aggiorna IP in /etc/wireguard/wg0.conf sulla Nave # endpoint = NUOVO_IP:51820 sudo systemctl restart wg-quick@wg0 ``` --- ## Crontab da ripristinare (mauro) ```cron 30 2 * * * cd /mnt/ssd/adrian && /usr/bin/env python3 config-backups/snapshot_configs.py >> /mnt/ssd/adrian/config-backups/snapshot.log 2>&1 45 2 * * * cd /mnt/ssd/adrian && /usr/bin/env python3 config-backups/backup_avamposto.py >> /mnt/ssd/adrian/config-backups/avamposto_snapshot.log 2>&1 15 1 * * * cd /mnt/ssd/adrian/scripts && /usr/bin/env bash pcloud_backup.sh >/dev/null 2>&1 45 5 * * * cd /mnt/ssd/adrian/logbook && /usr/bin/env python3 collect_logs.py >> reports/cron.log 2>&1 0 8 * * * /mnt/ssd/adrian/venv/bin/python /mnt/ssd/adrian/scripts/qa_watch.py >> /mnt/ssd/adrian/logs/qa_watch.log 2>&1 0 16 * * * /mnt/ssd/adrian/venv/bin/python /mnt/ssd/adrian/scripts/qa_watch.py >> /mnt/ssd/adrian/logs/qa_watch.log 2>&1 0 3 * * * cd /mnt/ssd/adrian/scripts && sudo /usr/bin/env bash backup_completo.sh 0 6 * * 0 cd /mnt/ssd/adrian/flotta-diagnostics && RESTIC_PASSWORD_FILE=/mnt/ssd/adrian/scripts/secrets/restic_password /usr/bin/env python3 sentinel.py >> /mnt/ssd/adrian/logbook/reports/sentinel.log 2>&1 */5 * * * * /usr/bin/env bash /mnt/ssd/adrian/scripts/wg_monitor.sh ``` --- ## Credenziali essenziali | Cosa | Valore | |------|--------| | Restic password | `maugag` | | VPS SSH | `ssh mauro@168.119.114.146` (chiave `~/.ssh/id_ed25519`) | | VPS sudo password | `FlottaAutonoma2025!` | | Dominio registrar | Porkbun (account Mauro) | | pCloud | account Mauro | --- ## Priorità di ripristino 1. **WireGuard tunnel** — senza questo nulla è raggiungibile dall'esterno 2. **Caddy VPS** — reverse proxy per tutti i domini 3. **Guacamole** — accesso remoto desktop (usato quotidianamente) 4. **Jellyfin / Navidrome** — media server 5. **Albert (telegram_bot)** — bot AI 6. **WebDAV / Portainer** — strumenti operativi --- ## Contatti e risorse - **Questo documento su Supabase:** tabella `shared_docs`, `agent=adrian`, `doc_type=recovery_plan` - **Vault Adrian:** `/mnt/ssd/adrian/vault/` - **Snapshot avamposto:** `/mnt/ssd/adrian/config-backups/avamposto_snapshots/` - **Repo git Adrian:** `/mnt/ssd/adrian/` (branch master)