basic functionality

This commit is contained in:
helmi
2025-11-27 00:49:42 +00:00
parent 9acedb73a7
commit 9f3686f466
6 changed files with 118 additions and 5 deletions

7
.env.default Normal file
View File

@@ -0,0 +1,7 @@
PBS_SERVER=""
PBS_DATASTORE=""
PBS_BACKUP_ID=""
PBS_PASSWORD=""
PBS_FINGERPRINT=""
PBS_PRUNE=""
PBS_PRUNE_ARGS=""

1
.gitignore vendored Normal file
View File

@@ -0,0 +1 @@
.env

View File

@@ -23,4 +23,11 @@ RUN apt-get update && \
apt-get install -y proxmox-backup-client && \
rm -rf /var/lib/apt/lists/*
CMD ["proxmox-backup-client", "--help"]
# Add script
WORKDIR /app
COPY ./app/* .
# Change Permissions
RUN chmod +x ./backup.sh
CMD ./backup.sh

87
app/backup.sh Executable file
View File

@@ -0,0 +1,87 @@
#! /usr/bin/env bash
set -euo pipefail
### DEFAULTS ###
BACKUP_SOURCE="/mnt/backup"
### CHECK REQUIRED ENV VARS ###
REQ_VARS=(
"PBS_SERVER"
"PBS_DATASTORE"
"PBS_BACKUP_ID"
"PBS_PASSWORD"
)
for var in "${REQ_VARS[@]}"; do
if [[ -z "${!var:-}" ]]; then
echo "ERROR: Required environment variable '$var' is not set." >&2
exit 1
fi
done
# Optional fingerprint
if [[ -n "${PBS_FINGERPRINT:-}" ]]; then
export PBS_FINGERPRINT
fi
export PBS_PASSWORD
### LOGGING SETUP ###
LOGFILE="/var/log/pbs-backup.log"
mkdir -p "$(dirname "$LOGFILE")"
log() {
# Log to stdout + file simultaneously, Docker-friendly
printf "%s\n" "$*" | tee -a "$LOGFILE" >/proc/1/fd/1
}
### BACKUP OPERATION ###
TIMESTAMP=$(date +"%Y-%m-%d_%H-%M-%S")
SNAPSHOT_NAME="backup-$TIMESTAMP"
log "==============================================="
log " Starting PBS Backup: $SNAPSHOT_NAME"
log " Source: $BACKUP_SOURCE"
log " Repository: $PBS_SERVER:$PBS_DATASTORE"
log " Backup ID: $PBS_BACKUP_ID"
log "==============================================="
proxmox-backup-client backup \
"$SNAPSHOT_NAME.pxar:$BACKUP_SOURCE" \
--repository "$PBS_SERVER:$PBS_DATASTORE" \
--backup-id "$PBS_BACKUP_ID" \
2>&1 | tee -a "$LOGFILE" >/proc/1/fd/1
log "--- Backup completed ---"
### PRUNE (optional) ###
PBS_PRUNE="${PBS_PRUNE:-true}"
PRUNE_ARGS="${PBS_PRUNE_ARGS:---keep-daily=7 --keep-weekly=4 --keep-monthly=3}"
if [[ "$PBS_PRUNE" == "true" ]]; then
log "--- Running prune ---"
proxmox-backup-client prune \
--repository "$PBS_SERVER:$PBS_DATASTORE" \
--backup-id "$PBS_BACKUP_ID" \
$PRUNE_ARGS \
2>&1 | tee -a "$LOGFILE" >/proc/1/fd/1
log "--- Prune completed ---"
else
log "--- Prune disabled ---"
fi
echo "=== Done ===" | tee -a

0
build.sh Normal file → Executable file
View File

View File

@@ -1,6 +1,17 @@
services:
backup:
image: 6917544a5239ec13c3e66efdd245df2a9c9891e9c83bc78ddc733ea04d5777bd
container_name: backup_service
backup:
image: pbs-client
container_name: backup_service
network_mode: host
volumes:
- /root/tests:/mnt/backup
environment:
PBS_SERVER: ${PBS_SERVER}
PBS_DATASTORE: ${PBS_DATASTORE}
PBS_BACKUP_ID: ${PBS_BACKUP_ID}
PBS_PASSWORD: ${PBS_PASSWORD}
PBS_FINGERPRINT: ${PBS_FINGERPRINT}
PBS_PRUNE: ${PBS_PRUNE}
PBS_PRUNE_ARGS: ${PBS_PRUNE_ARGS}