AI agent yang berjalan 24/7 di VPS sendiri berarti lo yang jadi tim ops-nya. Tanpa backup dan monitoring, satu kesalahan kecil — disk penuh, container crash, vault corrupt — bisa menghapus bulan-bulan konteks dan memory yang sudah terbangun.
Apa yang Perlu Dibackup
Tidak semua perlu dibackup dengan urgensi yang sama. Prioritas gua:
- Obsidian vault: prioritas tertinggi — ini memory permanen Hermes. Sudah ada sync ke GitHub (lihat setup vault), tapi backup tambahan tetap perlu untuk redundansi.
- Konfigurasi: docker-compose.yml, Caddyfile, file .env (tanpa secret di git, tapi perlu backup terenkripsi).
- Database 9router/n8n: riwayat routing dan workflow n8n — hilang ini berarti setup ulang dari nol.
- Logs: prioritas rendah, tapi berguna untuk debugging insiden.
Setup Backup dengan rclone ke Google Drive
rclone adalah tool command-line untuk sync file ke berbagai cloud storage, termasuk Google Drive. Install dan konfigurasi:
# Install rclone
curl https://rclone.org/install.sh | sudo bash
# Konfigurasi remote (interaktif, ikuti wizard untuk Google Drive)
rclone config
Setelah remote bernama gdrive terkonfigurasi, buat script backup:
#!/bin/bash
# /opt/scripts/backup.sh
BACKUP_DIR="/tmp/vps-backup-$(date +%Y%m%d)"
mkdir -p "$BACKUP_DIR"
# Backup vault (selain git sync)
cp -r /opt/stack/vault "$BACKUP_DIR/vault"
# Backup config (tanpa .env)
cp /opt/stack/docker-compose.yml "$BACKUP_DIR/"
cp /opt/stack/Caddyfile "$BACKUP_DIR/"
# Backup database n8n
docker exec n8n-db pg_dump -U n8n n8n > "$BACKUP_DIR/n8n.sql"
# Compress dan upload
tar -czf "$BACKUP_DIR.tar.gz" -C /tmp "$(basename $BACKUP_DIR)"
rclone copy "$BACKUP_DIR.tar.gz" gdrive:vps-backups/
# Cleanup lokal, simpan 7 hari terakhir di Drive
rm -rf "$BACKUP_DIR" "$BACKUP_DIR.tar.gz"
rclone delete --min-age 7d gdrive:vps-backups/
Jadwalkan dengan Cron
# crontab -e
# Backup harian jam 3 pagi
0 3 * * * /opt/scripts/backup.sh >> /var/log/vps-backup.log 2>&1
Monitoring: Health Check via Telegram
Selain backup, perlu tahu kalau ada yang rusak sebelum jadi masalah besar. Script sederhana yang cek status container dan disk, kirim alert ke Telegram kalau ada anomali:
#!/bin/bash
# /opt/scripts/healthcheck.sh
BOT_TOKEN="xxxx"
CHAT_ID="xxxx"
send_alert() {
curl -s -X POST "https://api.telegram.org/bot${BOT_TOKEN}/sendMessage" \
-d chat_id="$CHAT_ID" -d text="$1" > /dev/null
}
# Cek container yang harus running
for container in hermes 9router n8n caddy graphify; do
if [ "$(docker inspect -f '{{.State.Running}}' "$container" 2>/dev/null)" != "true" ]; then
send_alert "ALERT: Container $container tidak running!"
fi
done
# Cek disk usage
DISK_USAGE=$(df / | tail -1 | awk '{print $5}' | tr -d '%')
if [ "$DISK_USAGE" -gt 85 ]; then
send_alert "ALERT: Disk usage $DISK_USAGE% — perlu cleanup."
fi
# crontab -e
# Health check setiap 15 menit
*/15 * * * * /opt/scripts/healthcheck.sh
Maintenance Rutin
- Update image Docker: cek update bulanan untuk Hermes, n8n, Caddy — tapi jangan auto-update, test di staging dulu kalau ada (atau minimal baca changelog) sebelum
docker compose pull && docker compose up -d. - Cleanup log Docker: log container yang tidak di-rotate bisa makan disk. Tambahkan
max-sizedi docker-compose untuk tiap service. - Review vault size: kalau vault tumbuh sangat besar, cek apakah ada file lama yang bisa diarsipkan (pindah ke folder
Archive/, tetap di git tapi tidak dimuat tiap konteks).
# Contoh limit log di docker-compose.yml
services:
hermes:
logging:
driver: "json-file"
options:
max-size: "10m"
max-file: "3"
Prosedur Restore
Kalau VPS rusak total dan perlu provisioning ulang:
- Setup VPS baru, ikuti panduan instalasi dari awal
- Download backup terakhir dari Google Drive:
rclone copy gdrive:vps-backups/latest.tar.gz . - Extract, restore vault ke folder yang sesuai (atau
git clonedari GitHub sync sebagai sumber utama, backup rclone sebagai fallback) - Restore database n8n:
docker exec -i n8n-db psql -U n8n n8n < n8n.sql - Copy kembali docker-compose.yml dan Caddyfile, buat ulang file
.env(secret tidak ada di backup — simpan terpisah di password manager) docker compose up -ddan verifikasi semua container running via health check
Yang Sering Dilewatkan
Backup vault lewat git sync itu bagus, tapi git tidak menyimpan file binary besar dengan efisien dan tidak mencakup database n8n/9router. Jangan andalkan satu mekanisme backup saja. Dan yang paling sering dilewatkan: secret/.env tidak pernah dibackup otomatis — pastikan lo punya copy terpisah (password manager atau vault terenkripsi) di luar VPS, karena tanpa ini restore lengkap tidak mungkin meski semua data lain aman.
Pertanyaan Umum
Obsidian vault adalah prioritas tertinggi karena berisi memory permanen agent. Selain itu, konfigurasi (docker-compose.yml, Caddyfile), database n8n/9router, dan file .env (disimpan terpisah di password manager, bukan di git).
Git sync ke GitHub bagus untuk versioning teks, tapi tidak efisien untuk file binary besar dan tidak mencakup database n8n/9router. rclone ke Google Drive memberikan redundansi backup untuk komponen yang tidak dicakup git.
Jalankan script health check via cron setiap 15 menit yang mengecek status container Docker dan disk usage, lalu kirim alert ke Telegram lewat Bot API kalau ada container yang berhenti atau disk mendekati penuh.
File .env dan secret tidak pernah dibackup otomatis lewat git maupun script biasa karena alasan keamanan. Tanpa copy terpisah di password manager atau vault terenkripsi, restore lengkap tidak akan mungkin meski data lain aman.
Butuh Bantuan Implementasi?
Saya membantu founder dan tim membangun sistem operasi yang bisa jalan tanpa pengawasan konstan.
Hubungi Saya