HEX
Server: nginx/1.18.0
System: Linux mail.dakarash.co.id 5.15.0-164-generic #174-Ubuntu SMP Fri Nov 14 20:25:16 UTC 2025 x86_64
User: www-data (33)
PHP: 8.1.2-1ubuntu2.23
Disabled: NONE
Upload Files
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