[orbis] Weekly backup 2026-07-07 — 8 files changed, 17 insertions(+), 160 deletions(-)

This commit is contained in:
DO Server Backup
2026-07-07 16:08:41 +00:00
parent fe18800d18
commit 9e9b76ea4a
8 changed files with 17 additions and 160 deletions
+17
View File
@@ -194,3 +194,20 @@ else
git push origin main
log "Backup complete"
fi
# ---------------------------------------------------------------------------
# 13. Zip snapshot for direct download — added 2026-07-07. Requested so the
# full backup (sites + database dumps + configs) can be downloaded
# straight from JARVIS's admin panel (Blair HQ), not just pulled via git.
# Regenerated unconditionally every run (even if nothing changed) so its
# own file timestamp always reflects when the backup last actually ran.
# Lives outside the git repo dir so it's never accidentally committed.
# ---------------------------------------------------------------------------
log "Creating downloadable zip snapshot"
ZIP_TMP="/opt/do-server-backup.zip.tmp"
ZIP_FINAL="/opt/do-server-backup.zip"
rm -f "$ZIP_TMP"
(cd "$REPO_DIR" && zip -rq "$ZIP_TMP" . -x '.git/*')
mv "$ZIP_TMP" "$ZIP_FINAL"
ZIPSIZE=$(du -sh "$ZIP_FINAL" | cut -f1)
log "Zip snapshot ready: $ZIP_FINAL ($ZIPSIZE)"
-160
View File
@@ -1,160 +0,0 @@
#!/usr/bin/env bash
# =============================================================================
# DO Server Config Backup — runs on orbis (165.22.1.228)
# Backs up all critical configs/scripts to GitHub weekly
# Install: /usr/local/bin/do-server-backup
# Cron: 0 4 * * 0 /usr/local/bin/do-server-backup >> /var/log/do-server-backup.log 2>&1
# =============================================================================
set -euo pipefail
PAT="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"
REPO_URL="https://${PAT}@github.com/myronblair/do-server-config.git"
REPO_DIR="/opt/do-server-config"
LOG_PREFIX="[$(date '+%Y-%m-%d %H:%M:%S')] [orbis]"
log() { echo "$LOG_PREFIX $*"; }
# ---------------------------------------------------------------------------
# 1. Clone or update repo
# ---------------------------------------------------------------------------
if [[ -d "$REPO_DIR/.git" ]]; then
log "Pulling latest from GitHub"
cd "$REPO_DIR"
git config user.email "backup@orbishosting.com"
git config user.name "DO Server Backup"
git pull --rebase origin main -q || true
else
log "Cloning repo to $REPO_DIR"
git clone "$REPO_URL" "$REPO_DIR"
cd "$REPO_DIR"
git config user.email "backup@orbishosting.com"
git config user.name "DO Server Backup"
fi
cd "$REPO_DIR"
mkdir -p scripts systemd wireguard network cron ssh ols-vhosts mysql infra
# ---------------------------------------------------------------------------
# 2. Custom scripts from /usr/local/bin (text only — skip large binaries)
# ---------------------------------------------------------------------------
log "Backing up custom scripts"
for f in /usr/local/bin/jarvis-*.sh \
/usr/local/bin/jarvis-*.py \
/usr/local/bin/ttg-backup.sh \
/usr/local/bin/do-server-backup; do
[[ -f "$f" ]] || continue
size=$(stat -c%s "$f" 2>/dev/null || echo 0)
[[ $size -lt 524288 ]] && cp "$f" scripts/ || log " SKIP (too large): $f"
done
# composer is a stock PHP tool — skip it
# ---------------------------------------------------------------------------
# 3. Custom systemd service units (skip stock DO/system units)
# ---------------------------------------------------------------------------
log "Backing up custom systemd units"
CUSTOM_UNITS="jarvis-agent.service fastapi_ssh_server.service"
for unit in $CUSTOM_UNITS; do
src="/etc/systemd/system/$unit"
[[ -f "$src" ]] && cp "$src" systemd/ || true
done
# ---------------------------------------------------------------------------
# 4. WireGuard configs (includes private keys — repo is private)
# ---------------------------------------------------------------------------
log "Backing up WireGuard configs"
for f in /etc/wireguard/*.conf; do
[[ -f "$f" ]] && cp "$f" wireguard/ || true
done
# ---------------------------------------------------------------------------
# 5. Network / netplan
# ---------------------------------------------------------------------------
log "Backing up netplan"
for f in /etc/netplan/*.yaml; do
[[ -f "$f" ]] && cp "$f" network/ || true
done
cp /etc/hosts network/hosts 2>/dev/null || true
cp /etc/hostname network/hostname 2>/dev/null || true
# ---------------------------------------------------------------------------
# 6. Root crontab — custom entries only (strip CyberPanel boilerplate)
# ---------------------------------------------------------------------------
log "Backing up crontab"
crontab -l 2>/dev/null | grep -v "^#\|CyberCP\|acme.sh\|cleansessions\|run_scheduled_scans\|pdnsHealthCheck\|findBWUsage\|postfixSenderPolicy\|upgradeCritical\|renew\.py\|IncScheduler\|e2scrub\|imunify\|sessionclean\|lsws\b" \
| sed '/^[[:space:]]*$/d' > cron/root_custom
# Also keep the full crontab for reference
crontab -l 2>/dev/null > cron/root_full || echo "# no crontab" > cron/root_full
# ---------------------------------------------------------------------------
# 7. SSH authorized_keys
# ---------------------------------------------------------------------------
log "Backing up SSH keys"
[[ -f /root/.ssh/authorized_keys ]] && cp /root/.ssh/authorized_keys ssh/ || true
[[ -f /root/.ssh/id_rsa.pub ]] && cp /root/.ssh/id_rsa.pub ssh/ || true
# ---------------------------------------------------------------------------
# 8. OpenLiteSpeed vhost configs (CyberPanel-managed)
# ---------------------------------------------------------------------------
log "Backing up OLS vhost configs"
for vdir in /usr/local/lsws/conf/vhosts/*/; do
vname=$(basename "$vdir")
[[ "$vname" == "Example" ]] && continue
mkdir -p "ols-vhosts/$vname"
for conf in "$vdir"*.conf; do
[[ -f "$conf" ]] && cp "$conf" "ols-vhosts/$vname/" || true
done
done
# OLS main listener/vhost mapping
grep -E "^\s*(listener|virtualHost|address |map |vhRoot|vhDomain|configFile)" \
/usr/local/lsws/conf/httpd_config.conf 2>/dev/null > ols-vhosts/httpd_vhosts_summary.txt || true
# ---------------------------------------------------------------------------
# 9. MySQL root credentials file
# ---------------------------------------------------------------------------
log "Backing up MySQL credentials"
[[ -f /root/.my.cnf ]] && cp /root/.my.cnf mysql/my.cnf || true
# Document all databases
mysql -e "SHOW DATABASES;" 2>/dev/null | grep -v "^Database\|information_schema\|performance_schema\|sys" > mysql/databases.txt || true
# ---------------------------------------------------------------------------
# 10. /opt/infra snapshot (already a separate git repo — copy contents)
# ---------------------------------------------------------------------------
log "Backing up /opt/infra snapshot"
if [[ -d /opt/infra ]]; then
rsync -a --exclude='.git' /opt/infra/ infra/
fi
# SMTP config docs
if [[ -d /opt/smtp-for-websites ]]; then
mkdir -p smtp-docs
rsync -a --exclude='.git' /opt/smtp-for-websites/ smtp-docs/
fi
# ---------------------------------------------------------------------------
# 11. CyberPanel website list (for documentation)
# ---------------------------------------------------------------------------
log "Documenting website list"
{
echo "# Websites on DO server — $(date '+%Y-%m-%d')"
echo ""
for d in /home/*/public_html; do
site=$(echo "$d" | sed 's|/home/||;s|/public_html||')
diskuse=$(du -sh "$d" 2>/dev/null | cut -f1)
echo "- $site ($diskuse)"
done
} > ols-vhosts/site-list.txt
# ---------------------------------------------------------------------------
# 12. Commit and push
# ---------------------------------------------------------------------------
log "Committing changes"
git add -A
if git diff --cached --quiet; then
log "No changes to commit"
else
CHANGES=$(git diff --cached --stat | tail -1)
git commit -m "[orbis] Weekly backup $(date '+%Y-%m-%d') — $CHANGES"
log "Pushing to GitHub"
git push origin main
log "Backup complete"
fi
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.