64 lines
1.5 KiB
Bash
64 lines
1.5 KiB
Bash
#!/bin/bash
|
|
|
|
# Configuration
|
|
BACKUP_DIR="/volume1/backups/nas-tools"
|
|
DATE=$(date +%Y%m%d_%H%M%S)
|
|
RETENTION_DAYS=7
|
|
|
|
# Ensure backup directory exists
|
|
mkdir -p "$BACKUP_DIR"
|
|
|
|
log() {
|
|
echo "[$(date '+%Y-%m-%d %H:%M:%S')] $1"
|
|
}
|
|
|
|
log "Starting backup..."
|
|
|
|
# 1. Database Dumps
|
|
log "Dumping databases..."
|
|
|
|
# Gitea DB
|
|
docker exec gitea-db pg_dump -U gitea gitea > "$BACKUP_DIR/gitea_db_$DATE.sql"
|
|
if [ $? -eq 0 ]; then
|
|
log "Gitea DB dumped successfully."
|
|
else
|
|
log "Error dumping Gitea DB!"
|
|
fi
|
|
|
|
# Immich DB
|
|
docker exec immich-db pg_dump -U postgres immich > "$BACKUP_DIR/immich_db_$DATE.sql"
|
|
if [ $? -eq 0 ]; then
|
|
log "Immich DB dumped successfully."
|
|
else
|
|
log "Error dumping Immich DB!"
|
|
fi
|
|
|
|
# 2. File Backups (Configs & Data)
|
|
# Exclude heavy media files if handled separately, but for now backing up key configs
|
|
log "Compressing configuration files..."
|
|
|
|
# Dashboard & Gitea & Immich configs
|
|
# Assuming /volume1/docker structure
|
|
tar -czf "$BACKUP_DIR/configs_$DATE.tar.gz" \
|
|
-C /volume1/docker \
|
|
nas-dashboard/backend/config.py \
|
|
nas-dashboard/.env \
|
|
gitea/conf \
|
|
immich/.env \
|
|
--exclude='gitea/data' \
|
|
--exclude='immich/upload' \
|
|
--exclude='immich/thumbs'
|
|
|
|
if [ $? -eq 0 ]; then
|
|
log "Configs compressed successfully."
|
|
else
|
|
log "Error compressing configs!"
|
|
fi
|
|
|
|
# 3. Cleanup Old Backups
|
|
log "Cleaning up backups older than $RETENTION_DAYS days..."
|
|
find "$BACKUP_DIR" -type f -name "*_db_*.sql" -mtime +$RETENTION_DAYS -delete
|
|
find "$BACKUP_DIR" -type f -name "configs_*.tar.gz" -mtime +$RETENTION_DAYS -delete
|
|
|
|
log "Backup completed."
|