diff --git a/backup-db.sh b/backup-db.sh index 1817d22..ad7d39d 100755 --- a/backup-db.sh +++ b/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." \ No newline at end of file +# 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 +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." diff --git a/immich-app/docker-compose.yml b/immich-app/docker-compose.yml index d0f0301..be2a3c2 100644 --- a/immich-app/docker-compose.yml +++ b/immich-app/docker-compose.yml @@ -22,7 +22,6 @@ services: - ./data/pictures:/Pictures - ./data/pictures:/Pictures-linked - ./data/mobile-pictures:/mobile-pictures - - /mnt/test:/test env_file: - .env ports: