backup
This commit is contained in:
parent
bb57fd1558
commit
5f92b99705
71
backup-db.sh
71
backup-db.sh
|
|
@ -1,10 +1,65 @@
|
|||
#!/bin/bash
|
||||
# timestamp for backups
|
||||
NOW=$(date +'%Y-%m-%d_%H:%M:%S')
|
||||
#!/usr/bin/env bash
|
||||
set -euo pipefail
|
||||
|
||||
# -----------------------------------------------------------------------------
|
||||
# CONFIGURATION
|
||||
# -----------------------------------------------------------------------------
|
||||
# how many days of backups to keep
|
||||
RETENTION_DAYS=7
|
||||
|
||||
# where to store backups
|
||||
BACKUPDIR=/home/oster/server/backup
|
||||
|
||||
echo "Creating SQL files..."
|
||||
docker exec -t immich_postgres pg_dumpall --clean --if-exists --username=postgres | gzip > $BACKUPDIR/$NOW-immich.sql.gz
|
||||
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."
|
||||
# timestamp format for this run
|
||||
NOW=$(date +'%Y-%m-%d_%H:%M:%S')
|
||||
|
||||
# -----------------------------------------------------------------------------
|
||||
# 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-linked
|
||||
- ./data/mobile-pictures:/mobile-pictures
|
||||
- /mnt/test:/test
|
||||
env_file:
|
||||
- .env
|
||||
ports:
|
||||
|
|
|
|||
Loading…
Reference in New Issue