Backup
This commit is contained in:
+46
-24
@@ -2,42 +2,64 @@
|
|||||||
set -euo pipefail
|
set -euo pipefail
|
||||||
|
|
||||||
# === CONFIG ===
|
# === CONFIG ===
|
||||||
REPO="/backups/borgrepo"
|
REPO="/backup/borgrepo"
|
||||||
HOSTS_FILE="host_vars/hosts"
|
export BORG_PASSPHRASE
|
||||||
ARCHIVE_NAME="backup-$(date +%Y-%m-%d)"
|
BORG_PASSPHRASE="$(cat /app/host_vars/repokey)"
|
||||||
|
HOSTS_FILE="$(dirname "$0")/host_vars/hosts"
|
||||||
|
TIMESTAMP="$(date +%Y-%m-%dT%H%M%S)"
|
||||||
|
|
||||||
# === BUILD SOURCE LIST ===
|
# === BUILD SOURCE LIST ===
|
||||||
SOURCES=()
|
SOURCES=()
|
||||||
|
|
||||||
while read -r host; do
|
while read -r host; do
|
||||||
[[ -z "$host" || "$host" =~ ^# ]] && continue
|
[[ -z "$host" || "$host" =~ ^# ]] && continue
|
||||||
SOURCES+=("${host}:/")
|
SOURCES+=("${host}:/BACKUP/")
|
||||||
done < "$HOSTS_FILE"
|
done < "$HOSTS_FILE"
|
||||||
|
|
||||||
|
if [[ ${#SOURCES[@]} -eq 0 ]]; then
|
||||||
|
echo "ERROR: No hosts found in $HOSTS_FILE"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
echo "Backing up hosts:"
|
echo "Backing up hosts:"
|
||||||
printf ' - %s\n' "${SOURCES[@]}"
|
printf ' - %s\n' "${SOURCES[@]}"
|
||||||
|
|
||||||
# === CREATE BACKUP (ONLY current*) ===
|
# === CREATE BACKUP PER HOST ===
|
||||||
borg create \
|
FAILED_HOSTS=()
|
||||||
"$REPO::$ARCHIVE_NAME" \
|
|
||||||
"${SOURCES[@]}" \
|
|
||||||
--patterns-from <(cat <<'EOF'
|
|
||||||
R sh:**
|
|
||||||
+ sh:**/current*
|
|
||||||
- sh:**
|
|
||||||
EOF
|
|
||||||
) \
|
|
||||||
--stats \
|
|
||||||
--compression lz4
|
|
||||||
|
|
||||||
# === RETENTION POLICY ===
|
for src in "${SOURCES[@]}"; do
|
||||||
|
HOST="${src%%:*}"
|
||||||
|
ARCHIVE="${HOST}-backup-${TIMESTAMP}"
|
||||||
|
echo "--- Backing up $HOST ---"
|
||||||
|
|
||||||
|
borg create \
|
||||||
|
"$REPO::$ARCHIVE" \
|
||||||
|
"$src" \
|
||||||
|
--stats \
|
||||||
|
--compression lz4 || {
|
||||||
|
echo "WARNING: Failed to back up $HOST"
|
||||||
|
FAILED_HOSTS+=("$HOST")
|
||||||
|
}
|
||||||
|
done
|
||||||
|
|
||||||
|
# === RETENTION POLICY (per host) ===
|
||||||
echo "Applying retention policy..."
|
echo "Applying retention policy..."
|
||||||
|
|
||||||
borg prune \
|
for src in "${SOURCES[@]}"; do
|
||||||
"$REPO" \
|
HOST="${src%%:*}"
|
||||||
--keep-daily=7 \
|
borg prune \
|
||||||
--keep-weekly=8 \
|
"$REPO" \
|
||||||
--prefix "backup-" \
|
--keep-daily=7 \
|
||||||
--stats
|
--keep-weekly=8 \
|
||||||
|
--glob-archives "${HOST}-backup-*" \
|
||||||
|
--stats
|
||||||
|
done
|
||||||
|
|
||||||
echo "Done: $ARCHIVE_NAME"
|
# === FINAL REPORT ===
|
||||||
|
if [[ ${#FAILED_HOSTS[@]} -gt 0 ]]; then
|
||||||
|
echo "DONE WITH ERRORS — Failed hosts:"
|
||||||
|
printf ' - %s\n' "${FAILED_HOSTS[@]}"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo "Done: all hosts backed up at $TIMESTAMP"
|
||||||
|
|||||||
+1
-2
@@ -25,7 +25,7 @@ template templates/.profile /home/4server/.profile
|
|||||||
### PACKAGES
|
### PACKAGES
|
||||||
template templates/repositories /etc/apk/repositories
|
template templates/repositories /etc/apk/repositories
|
||||||
rex "doas apk update && doas apk upgrade"
|
rex "doas apk update && doas apk upgrade"
|
||||||
rex doas apk add iperf linux-lts openssh ufw python3 build-base python3-dev linux-headers py3-pip gcc g++ musl-dev libffi-dev make jq rsync mc vim docker docker-compose htop linux-lts sqlite bash postgresql16-client
|
rex doas apk add borgbackup iperf linux-lts openssh ufw python3 build-base python3-dev linux-headers py3-pip gcc g++ musl-dev libffi-dev make jq rsync mc vim docker docker-compose htop linux-lts sqlite bash postgresql16-client
|
||||||
|
|
||||||
rex doas pip install --root-user-action ignore --break-system-packages --no-cache-dir "uvicorn[standard]" fastapi pydantic psutil gdown
|
rex doas pip install --root-user-action ignore --break-system-packages --no-cache-dir "uvicorn[standard]" fastapi pydantic psutil gdown
|
||||||
|
|
||||||
@@ -94,4 +94,3 @@ prsync -h "/app/host_vars/hosts" -avz ./etc/traefik/certs/* /4server/data/traefi
|
|||||||
|
|
||||||
template templates/docker-compose.yml /4server/docker-compose.yml
|
template templates/docker-compose.yml /4server/docker-compose.yml
|
||||||
rex doas docker-compose -f /4server/docker-compose.yml up -d --force-recreate
|
rex doas docker-compose -f /4server/docker-compose.yml up -d --force-recreate
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user