this repo has no description
1#!/bin/bash
2
3# a script that creates daily backup and saves it to google drive
4# in case i forgot how to set up again, here's the post
5# https://kernova.io/blog/secure-and-automated-backups-with-borg-and-rclone/
6
7# Stop script on any error
8set -e
9set -o pipefail
10
11DIR_ROOT=/media/external-hd-backup
12
13# Configuration
14BORG_REPO=$DIR_ROOT/borgbackup
15export BORG_PASSPHRASE=$(cat /root/.borg_passphrase)
16
17RCLONE_REMOTE="Google drive"
18RCLONE_DESTINATION="rasp"
19
20TIMESTAMP=$(date +%Y-%m-%d-%H%M%S)
21
22SOFT_SERVE_DIR=$DIR_ROOT/soft-serve/
23VAULTWARDEN_DIR=$DIR_ROOT/vaultwarden-data/
24
25log() {
26 echo "$(date "+%Y-%m-%d %H:%M:%S") - $1"
27}
28
29log "--- Starting daily backup ---"
30
31# 1. Create a backup of soft-serve application
32log "Step 1: Backing up soft-serve..."
33BORG_SOFT_SERVE_NAME="soft-serve-$TIMESTAMP"
34borg create --stats --progress \
35 -C zstd,6 \
36 "$BORG_REPO::$BORG_SOFT_SERVE_NAME" \
37 "$SOFT_SERVE_DIR"
38log "Borg backup created: $BORG_SOFT_SERVE_NAME"
39
40# 2. Create a backup of vaultwarden application
41log "Step 2: Backing up vaultwarden..."
42BORG_VAULTWARDEN_NAME="vaultwarden-$TIMESTAMP"
43borg create --stats --progress \
44 -C zstd,6 \
45 "$BORG_REPO::$BORG_VAULTWARDEN_NAME" \
46 "$VAULTWARDEN_DIR"
47log "Borg backup created: $BORG_VAULTWARDEN_NAME"
48
49# 3. Prune repository
50log "Step 3: Prunning to maintain 4 weekly and 6 monthly..."
51borg prune \
52 --list \
53 --show-rc \
54 --keep-weekly 4 \
55 --keep-monthly 6 \
56 $BORG_REPO
57log "Prunning complete"
58
59# 4. Prune repository
60log "Step 4: Compacting borg repo..."
61borg compact $BORG_REPO
62log "Compacting complete"
63
64# 5. Sync borg repository to the rclone remote
65log "Step 5: Syncing repository to rclone remote..."
66rclone sync "$BORG_REPO" "$RCLONE_REMOTE":$RCLONE_DESTINATION --progress
67log "Sync complete"
68
69log "--- Daily backup finished successfully ---"
70
71exit 0
72