File: //usr/local/sbin/sys-backup.sh
#!/bin/bash
set -euo pipefail
STAMP="$(date +%F_%H%M%S)"
DEST_DIR="/root/sys-backups"
STAGE="/root/sys-backup-stage-${STAMP}"
LOG="/var/log/sys-backup.log"
MAIL_TO="it@dakarash.co.id febrian@dakarash.co.id"
mkdir -p "$DEST_DIR" "$STAGE"
{
echo "==== SYS-BACKUP START ${STAMP} ===="
echo "[*] Snapshot konfigurasi & data → $STAGE"
# Konfigurasi
cp -r /etc/postfix "$STAGE/" 2>/dev/null || true
cp -r /etc/dovecot "$STAGE/" 2>/dev/null || true
cp -r /etc/nginx "$STAGE/" 2>/dev/null || true
cp -r /etc/php "$STAGE/" 2>/dev/null || true
cp -r /etc/systemd/system "$STAGE/systemd" 2>/dev/null || true
# Sertifikat
cp -r /etc/letsencrypt "$STAGE/" 2>/dev/null || true
# Data email & webmail
rsync -a --delete /home/vmail/ "$STAGE/maildir/" 2>/dev/null || true
rsync -a --delete /var/www/snappymail/ "$STAGE/snappymail_app/" 2>/dev/null || true
rsync -a --delete /usr/local/lscp/cyberpanel/snappymail/data/ "$STAGE/snappymail_data/" 2>/dev/null || true
# Metadata
dpkg --get-selections > "$STAGE/installed_packages.txt" 2>/dev/null || true
uname -a > "$STAGE/kernel_version.txt"
( lsb_release -a 2>/dev/null || true ) > "$STAGE/os_info.txt"
systemctl list-units --type=service --no-pager > "$STAGE/services_list.txt"
ARCHIVE="${DEST_DIR}/sys-backup-$(date +%F).tar.gz"
echo "[*] Kompres → ${ARCHIVE}"
tar -C /root -czf "${ARCHIVE}" "$(basename "$STAGE")"
rm -rf "$STAGE"
# Hapus backup tertua (simpan minimal 1 terbaru)
count=$(ls -1 "${DEST_DIR}"/sys-backup-*.tar.gz 2>/dev/null | wc -l || echo 0)
if [ "$count" -gt 1 ]; then
oldest=$(ls -1tr "${DEST_DIR}"/sys-backup-*.tar.gz | head -n1)
echo "[*] Hapus backup tertua: $oldest"
rm -f "$oldest"
fi
sz=$(du -h "${ARCHIVE}" | awk '{print $1}')
echo "[OK] Selesai: $(date) — file: ${ARCHIVE} (${sz})"
echo "==== SYS-BACKUP END ${STAMP} ===="
} | tee -a "$LOG"
# Kirim notifikasi email via sendmail (tanpa dependensi mailx)
SUBJ="[SYS-BACKUP] Selesai: $(date +%F) — ${HOSTNAME}"
MSG="$(tail -n 80 "$LOG")"
for RCPT in $MAIL_TO; do
/usr/sbin/sendmail -t <<EOF
To: ${RCPT}
Subject: ${SUBJ}
From: noreply@${HOSTNAME}
Content-Type: text/plain; charset=UTF-8
${MSG}
Lokasi arsip: /root/sys-backups
EOF
done