Files
vps-server-01/VPS/scripts/vw-backup.sh
T
administrator e7667fe801 First
2026-06-21 20:30:44 +03:00

39 lines
1.3 KiB
Bash

#!/usr/bin/env bash
# = /usr/local/bin/vw-backup.sh (права 700). Запуск по systemd-таймеру vw-backup.timer (03:30 MSK).
set -euo pipefail
VOL="/var/lib/docker/volumes/core_vaultwarden_data/_data"
DEST="/opt/backups/vaultwarden"
KEEP=14
TS="$(date +%Y%m%d-%H%M%S)"
WORK="$(mktemp -d)"
trap 'rm -rf "$WORK"' EXIT
mkdir -p "$DEST"
sqlite3 "$VOL/db.sqlite3" ".timeout 10000" ".backup '$WORK/db.sqlite3'"
cp -a "$VOL"/rsa_key* "$WORK"/ 2>/dev/null || true
cp -a "$VOL"/config.json "$WORK"/ 2>/dev/null || true
cp -a "$VOL"/attachments "$WORK"/ 2>/dev/null || true
cp -a "$VOL"/sends "$WORK"/ 2>/dev/null || true
ARCHIVE="$DEST/vaultwarden-$TS.tar.gz"
tar -czf "$ARCHIVE" -C "$WORK" .
ls -1t "$DEST"/vaultwarden-*.tar.gz | tail -n +$((KEEP+1)) | xargs -r rm -f
# офсайт 1: Google Drive (обязательный)
rclone copy "$ARCHIVE" gdrive:vaultwarden-backups/
rclone delete --min-age 90d gdrive:vaultwarden-backups/ 2>/dev/null || true
# офсайт 2: домашний SMB через WG (best-effort)
if rclone copy "$ARCHIVE" "homesmb:TOSHIBA EXT/vaultwarden-backups/" 2>/dev/null; then
rclone delete --min-age 90d "homesmb:TOSHIBA EXT/vaultwarden-backups/" 2>/dev/null || true
SMB="ok"
else
SMB="недоступен"
fi
echo "OK: $ARCHIVE ($(du -h "$ARCHIVE" | cut -f1)) -> локально + gdrive + smb:$SMB"