Add automated Restic backups for edge01

This commit is contained in:
2026-07-27 22:40:58 -04:00
parent b12e0fd163
commit 7daba4343e
8 changed files with 101 additions and 0 deletions
+4
View File
@@ -9,3 +9,7 @@ presharedkey
# Environment and credential files
.env
.env.*
# Restic credentials
*.env
!*.env.example
+4
View File
@@ -0,0 +1,4 @@
export RESTIC_REPOSITORY="b2:zerafa-infrastructure:/edge01"
export B2_ACCOUNT_ID="REPLACE_ME"
export B2_ACCOUNT_KEY="REPLACE_ME"
export RESTIC_PASSWORD="REPLACE_ME"
+25
View File
@@ -0,0 +1,25 @@
#!/bin/bash
set -euo pipefail
source /etc/restic/edge01.env
exec 9>/run/restic-edge01.lock
if ! flock -n 9; then
echo "Another Restic operation is already running."
exit 1
fi
echo "Starting edge01 backup at $(date --iso-8601=seconds)"
restic backup \
/etc \
/home/debian \
/opt \
--exclude /opt/backups \
--exclude '/opt/docker/gitea/data/git/repositories/*/*.git/tmp' \
--tag edge01 \
--tag automatic
echo "Backup completed at $(date --iso-8601=seconds)"
@@ -0,0 +1,11 @@
[Unit]
Description=Restic backup of edge01 to Backblaze B2
Wants=network-online.target
After=network-online.target docker.service
[Service]
Type=oneshot
ExecStart=/usr/local/sbin/restic-edge01-backup
Nice=10
IOSchedulingClass=best-effort
IOSchedulingPriority=7
+11
View File
@@ -0,0 +1,11 @@
[Unit]
Description=Nightly Restic backup of edge01
[Timer]
OnCalendar=*-*-* 03:15:00
RandomizedDelaySec=10m
Persistent=true
Unit=restic-edge01-backup.service
[Install]
WantedBy=timers.target
+24
View File
@@ -0,0 +1,24 @@
#!/bin/bash
set -euo pipefail
source /etc/restic/edge01.env
exec 9>/run/restic-edge01.lock
if ! flock -n 9; then
echo "Another Restic operation is already running."
exit 1
fi
echo "Starting Restic retention at $(date --iso-8601=seconds)"
restic forget \
--host edge01 \
--tag automatic \
--keep-daily 7 \
--keep-weekly 4 \
--keep-monthly 12 \
--prune
echo "Retention completed at $(date --iso-8601=seconds)"
@@ -0,0 +1,11 @@
[Unit]
Description=Restic retention and pruning for edge01
Wants=network-online.target
After=network-online.target
[Service]
Type=oneshot
ExecStart=/usr/local/sbin/restic-edge01-retention
Nice=10
IOSchedulingClass=best-effort
IOSchedulingPriority=7
@@ -0,0 +1,11 @@
[Unit]
Description=Weekly Restic retention for edge01
[Timer]
OnCalendar=Sun *-*-* 04:15:00
RandomizedDelaySec=15m
Persistent=true
Unit=restic-edge01-retention.service
[Install]
WantedBy=timers.target