2026-03-22 19:52:52 +01:00
|
|
|
#!/bin/bash
|
|
|
|
|
# E-Ticket database backup script
|
|
|
|
|
# Runs every 30 minutes via cron
|
|
|
|
|
|
|
|
|
|
BACKUP_DIR="/var/backups/e-ticket"
|
|
|
|
|
DATE=$(date +%Y%m%d_%H%M%S)
|
|
|
|
|
FILENAME="e_ticket_${DATE}.sql.gz"
|
2026-03-22 19:53:25 +01:00
|
|
|
KEEP_DAYS=1
|
2026-03-22 19:52:52 +01:00
|
|
|
|
|
|
|
|
# Dump database via Docker
|
2026-03-23 18:34:48 +01:00
|
|
|
docker compose -f /var/www/e-ticket/docker-compose-prod.yml exec -T db-master pg_dump -U {{ db_user | default('e-ticket') }} {{ db_name | default('e-ticket') }} | gzip > "${BACKUP_DIR}/${FILENAME}"
|
2026-03-22 19:52:52 +01:00
|
|
|
|
|
|
|
|
# Check if backup was created
|
|
|
|
|
if [ -f "${BACKUP_DIR}/${FILENAME}" ] && [ -s "${BACKUP_DIR}/${FILENAME}" ]; then
|
2026-03-22 19:55:35 +01:00
|
|
|
echo "[$(date)] DB Backup OK: ${FILENAME} ($(du -h "${BACKUP_DIR}/${FILENAME}" | cut -f1))"
|
2026-03-22 19:52:52 +01:00
|
|
|
else
|
2026-03-22 19:55:35 +01:00
|
|
|
echo "[$(date)] ERROR: DB Backup failed"
|
2026-03-22 19:52:52 +01:00
|
|
|
exit 1
|
|
|
|
|
fi
|
|
|
|
|
|
2026-03-22 19:55:35 +01:00
|
|
|
# Backup uploads
|
|
|
|
|
UPLOADS_FILENAME="uploads_${DATE}.tar.gz"
|
|
|
|
|
tar -czf "${BACKUP_DIR}/${UPLOADS_FILENAME}" -C /var/www/e-ticket/public uploads 2>/dev/null
|
|
|
|
|
|
|
|
|
|
if [ -f "${BACKUP_DIR}/${UPLOADS_FILENAME}" ]; then
|
|
|
|
|
echo "[$(date)] Uploads Backup OK: ${UPLOADS_FILENAME} ($(du -h "${BACKUP_DIR}/${UPLOADS_FILENAME}" | cut -f1))"
|
|
|
|
|
else
|
|
|
|
|
echo "[$(date)] WARNING: Uploads backup failed"
|
|
|
|
|
fi
|
|
|
|
|
|
2026-03-22 19:52:52 +01:00
|
|
|
# Remove backups older than KEEP_DAYS days
|
|
|
|
|
find "${BACKUP_DIR}" -name "e_ticket_*.sql.gz" -mtime +${KEEP_DAYS} -delete
|
2026-03-22 19:55:35 +01:00
|
|
|
find "${BACKUP_DIR}" -name "uploads_*.tar.gz" -mtime +${KEEP_DAYS} -delete
|
2026-03-22 19:52:52 +01:00
|
|
|
echo "[$(date)] Cleaned backups older than ${KEEP_DAYS} days"
|