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 && \
|
||||
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:
|
||||
backup:
|
||||
image: 6917544a5239ec13c3e66efdd245df2a9c9891e9c83bc78ddc733ea04d5777bd
|
||||
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}
|
||||
|
||||
Reference in New Issue
Block a user