Backup dan Restore #

Prinsipnya: backup yang belum pernah direstore belum terbukti. Karena itu setiap lapisan di bawah ini punya cara verifikasi sendiri, dan yang tidak bisa diverifikasi dari host ini disebut apa adanya.

Yang berjalan setiap 02:00 #

Satu cron memanggil /root/.hermes/scripts/backup-profile.sh, yang mengerjakan beberapa hal berurutan:

  1. Config & state Hermes → /root/hermes-backup (repo git privat). config.yaml lewat sanitizer (kredensial diredaksi), ditambah memories/, skills/, scripts/, cron/jobs.json, SOUL.md.
  2. Vault terenkripsi → secure/vault-backups/hermes-vault-<waktu>.tar.gz.age. Arsip berisi vault.json.enc + vault.key + vault tiap profil, dienkripsi age ke tiga kunci SSH pemilik. Retensi 30 hari.
  3. Konten wiki → wiki-content/ (hasil mirror content/ situs).

Setelah itu commit dan push ke GitHub. Kalau tidak ada yang berubah, tidak ada commit kosong — jadi commit yang hilang berarti job-nya berhenti, bukan "tidak ada perubahan".

Sinyal kesehatan #

Script backup mengirim heartbeat ke Uptime Kuma (monitor push Backup freshness, jendela 26 jam): up hanya kalau seluruh job selesai tanpa error. Kalau cron mati, Kuma yang memberi tahu — bukan tile di dashboard.

Verifikasi (menit itu juga, tanpa menunggu alarm) #

bash
# 1. commit hari ini ada?
git -C /root/hermes-backup log -1 --format='%h %ad %s' --date=iso
# 2. sudah sampai remote?
git -C /root/hermes-backup ls-remote origin HEAD
git -C /root/hermes-backup log -1 --format=%h origin/main
# 3. snapshot vault terbaru & ukurannya
ls -lt /root/hermes-backup/secure/vault-backups/*.age | head -3
# 4. heartbeat terakhir
sqlite3 -readonly /var/lib/docker/volumes/uptime-kuma/_data/kuma.db \
"select time,status,msg from heartbeat where monitor_id=9 order by time desc limit 1;"
# 5. log job
grep 'vault-backup\|OK:' /root/.hermes/cron/backup.log.1 | tail -3

Restore #

Config/state Hermes: clone kizu0net-AI/hermes-backup, lalu salin balik yang perlu (config.yaml, memories/, skills/, scripts/). Isi config.yaml masih tersanitasi — kredensial harus diisi ulang dari sumber aslinya.

Konten wiki:

bash
rsync -a /root/hermes-backup/wiki-content/ /var/webuzo-data/wiki/content/
/root/.hermes/scripts/publish-wiki.sh

Vault: hanya bisa dibuka di mesin yang memegang kunci privat age (laptop pemilik), karena kunci privatnya tidak disimpan di VPS ini.

bash
age -d -i ~/.ssh/id_ed25519 hermes-vault-<waktu>.tar.gz.age | tar -tz | head
# lalu ekstrak ke direktori sementara, bandingkan, hapus setelah selesai

Yang tidak tercakup #

  • out/ dan live/ situs — keduanya artefak build, selalu bisa dibuat ulang.
  • Kode situs ada di repo privatnya sendiri, bukan di backup harian.
  • Session database Hermes: sengaja tidak dibackup isinya, hanya config dan memori.