added backup script
This commit is contained in:
57
scripts/restic-backup.sh
Executable file
57
scripts/restic-backup.sh
Executable file
@@ -0,0 +1,57 @@
|
||||
#!/usr/bin/env bash
|
||||
set -euo pipefail
|
||||
|
||||
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
||||
ENV_FILE="${SCRIPT_DIR}/restic-backup.env"
|
||||
HOMELAB_ROOT="/srv/homelab"
|
||||
STACKS_STOPPED=false
|
||||
|
||||
start_stacks() {
|
||||
if [[ "$STACKS_STOPPED" != true ]]; then
|
||||
return 0
|
||||
fi
|
||||
echo "Starting Docker stacks..."
|
||||
cd "$HOMELAB_ROOT"
|
||||
docker compose -f stacks/media/compose.yaml up -d
|
||||
docker compose -f stacks/monitoring/compose.yaml up -d
|
||||
docker compose -f stacks/storage/compose.yaml up -d
|
||||
echo "Stacks started."
|
||||
}
|
||||
trap start_stacks EXIT
|
||||
|
||||
if [[ -f "$ENV_FILE" ]]; then
|
||||
set -a
|
||||
# shellcheck source=/dev/null
|
||||
source "$ENV_FILE"
|
||||
set +a
|
||||
fi
|
||||
|
||||
if [[ -z "${RESTIC_REPOSITORY:-}" ]]; then
|
||||
echo "Error: RESTIC_REPOSITORY is not set. Create ${ENV_FILE} or export it." >&2
|
||||
echo "Example: RESTIC_REPOSITORY=sftp:user@host:/backups/restic" >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if [[ -z "${RESTIC_PASSWORD:-}" ]]; then
|
||||
echo "Error: RESTIC_PASSWORD is not set. Create ${ENV_FILE} or export it." >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
CADDYFILE="/etc/caddy/Caddyfile"
|
||||
UNBOUND_CONF="/etc/unbound/unbound.conf"
|
||||
|
||||
echo "Stopping Docker stacks..."
|
||||
cd "$HOMELAB_ROOT"
|
||||
docker compose -f stacks/media/compose.yaml down
|
||||
docker compose -f stacks/monitoring/compose.yaml down
|
||||
docker compose -f stacks/storage/compose.yaml down
|
||||
STACKS_STOPPED=true
|
||||
|
||||
echo "Starting restic backup..."
|
||||
restic backup \
|
||||
"$HOMELAB_ROOT" \
|
||||
"$CADDYFILE" \
|
||||
"$UNBOUND_CONF"
|
||||
|
||||
echo "Backup finished. Snapshot list:"
|
||||
restic snapshots --latest 5
|
||||
Reference in New Issue
Block a user