basic functionality
This commit is contained in:
7
.env.default
Normal file
7
.env.default
Normal 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
1
.gitignore
vendored
Normal file
@@ -0,0 +1 @@
|
|||||||
|
.env
|
||||||
@@ -23,4 +23,11 @@ RUN apt-get update && \
|
|||||||
apt-get install -y proxmox-backup-client && \
|
apt-get install -y proxmox-backup-client && \
|
||||||
rm -rf /var/lib/apt/lists/*
|
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
87
app/backup.sh
Executable 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
|
||||||
@@ -1,6 +1,17 @@
|
|||||||
|
|
||||||
services:
|
services:
|
||||||
backup:
|
backup:
|
||||||
image: 6917544a5239ec13c3e66efdd245df2a9c9891e9c83bc78ddc733ea04d5777bd
|
image: pbs-client
|
||||||
container_name: backup_service
|
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}
|
||||||
|
|||||||
Reference in New Issue
Block a user