backup
This commit is contained in:
parent
bb57fd1558
commit
5f92b99705
71
backup-db.sh
71
backup-db.sh
|
|
@ -1,10 +1,65 @@
|
||||||
#!/bin/bash
|
#!/usr/bin/env bash
|
||||||
# timestamp for backups
|
set -euo pipefail
|
||||||
NOW=$(date +'%Y-%m-%d_%H:%M:%S')
|
|
||||||
|
# -----------------------------------------------------------------------------
|
||||||
|
# CONFIGURATION
|
||||||
|
# -----------------------------------------------------------------------------
|
||||||
|
# how many days of backups to keep
|
||||||
|
RETENTION_DAYS=7
|
||||||
|
|
||||||
|
# where to store backups
|
||||||
BACKUPDIR=/home/oster/server/backup
|
BACKUPDIR=/home/oster/server/backup
|
||||||
|
|
||||||
echo "Creating SQL files..."
|
# timestamp format for this run
|
||||||
docker exec -t immich_postgres pg_dumpall --clean --if-exists --username=postgres | gzip > $BACKUPDIR/$NOW-immich.sql.gz
|
NOW=$(date +'%Y-%m-%d_%H:%M:%S')
|
||||||
docker exec -t authentik-postgresql-1 pg_dumpall --clean --if-exists --username=authentik | gzip > $BACKUPDIR/$NOW-authentik.sql.gz
|
|
||||||
docker exec -t paperless-db-1 pg_dumpall --clean --if-exists --username=paperless | gzip > $BACKUPDIR/$NOW-paperless.sql.gz
|
# -----------------------------------------------------------------------------
|
||||||
echo "finished."
|
# LOGGING FUNCTION
|
||||||
|
# -----------------------------------------------------------------------------
|
||||||
|
log() {
|
||||||
|
echo "[$(date +'%Y-%m-%d %H:%M:%S')] $*"
|
||||||
|
}
|
||||||
|
|
||||||
|
# -----------------------------------------------------------------------------
|
||||||
|
# PREPARE
|
||||||
|
# -----------------------------------------------------------------------------
|
||||||
|
log "Starting backup run at $NOW"
|
||||||
|
mkdir -p "$BACKUPDIR"
|
||||||
|
|
||||||
|
# -----------------------------------------------------------------------------
|
||||||
|
# DATABASE BACKUP FUNCTION
|
||||||
|
# -----------------------------------------------------------------------------
|
||||||
|
# Usage: backup_db <docker-container-name> <db-username> <output-prefix>
|
||||||
|
backup_db() {
|
||||||
|
local container="$1"
|
||||||
|
local db_user="$2"
|
||||||
|
local label="$3"
|
||||||
|
local outfile="${BACKUPDIR}/${NOW}-${label}.sql.gz"
|
||||||
|
|
||||||
|
log " Backing up ${label} (container: ${container}, user: ${db_user}) → ${outfile}"
|
||||||
|
docker exec -t "${container}" \
|
||||||
|
pg_dumpall --clean --if-exists --username="${db_user}" \
|
||||||
|
| gzip > "${outfile}"
|
||||||
|
}
|
||||||
|
|
||||||
|
# -----------------------------------------------------------------------------
|
||||||
|
# RUN THE BACKUPS
|
||||||
|
# -----------------------------------------------------------------------------
|
||||||
|
backup_db immich_postgres postgres immich
|
||||||
|
backup_db authentik-postgresql-1 authentik authentik
|
||||||
|
backup_db paperless-db-1 paperless paperless
|
||||||
|
|
||||||
|
log "All database dumps completed."
|
||||||
|
|
||||||
|
# -----------------------------------------------------------------------------
|
||||||
|
# ROTATE OLD BACKUPS
|
||||||
|
# -----------------------------------------------------------------------------
|
||||||
|
log "Removing backups older than ${RETENTION_DAYS} days from ${BACKUPDIR}"
|
||||||
|
find "${BACKUPDIR}" \
|
||||||
|
-maxdepth 1 \
|
||||||
|
-type f \
|
||||||
|
-name '*.sql.gz' \
|
||||||
|
-mtime +${RETENTION_DAYS} \
|
||||||
|
-print -exec rm -f {} \;
|
||||||
|
|
||||||
|
log "Backup rotation complete. Exiting."
|
||||||
|
|
|
||||||
|
|
@ -22,7 +22,6 @@ services:
|
||||||
- ./data/pictures:/Pictures
|
- ./data/pictures:/Pictures
|
||||||
- ./data/pictures:/Pictures-linked
|
- ./data/pictures:/Pictures-linked
|
||||||
- ./data/mobile-pictures:/mobile-pictures
|
- ./data/mobile-pictures:/mobile-pictures
|
||||||
- /mnt/test:/test
|
|
||||||
env_file:
|
env_file:
|
||||||
- .env
|
- .env
|
||||||
ports:
|
ports:
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue