Files
sysops 1fedd683e0 Initial commit – TimeMaster Zeiterfassung & HR-Tool
Stand: agent-06 (Audit-Log), agent-05 (Krankmeldung), agent-07 Phase 1 (Personalnummer),
Busylight-Pull-Integration, TOTP/2FA, Abwesenheiten, Zeiterfassung, Kiosk-Grundgerüst.
Migrations 0001–0023 deployed auf 192.168.1.137 + .164.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-23 20:03:27 +02:00

42 lines
1.7 KiB
Bash

#!/bin/bash
# TimeMaster Backup Script
# Sichert PostgreSQL-Datenbank und pip-Paketliste
set -euo pipefail
BACKUP_DIR="/tank/backup"
DB_NAME="timemaster_db"
DB_USER="timemaster"
TIMESTAMP=$(date +%Y%m%d_%H%M%S)
RETENTION_DAYS=30
echo "[$(date)] Starting TimeMaster backup..."
mkdir -p "$BACKUP_DIR"
# PostgreSQL dump (custom format, komprimiert) — peer auth erfordert su
su -c "pg_dump -Fc $DB_NAME" postgres > "$BACKUP_DIR/db_$TIMESTAMP.dump"
SIZE=$(du -sh "$BACKUP_DIR/db_$TIMESTAMP.dump" | cut -f1)
echo "[$(date)] DB backup: db_$TIMESTAMP.dump ($SIZE)"
# pip freeze für venv (für venv-Wiederherstellung nach Python-Upgrade)
/opt/timemaster/backend/venv/bin/pip freeze > "$BACKUP_DIR/requirements_frozen_$TIMESTAMP.txt"
echo "[$(date)] pip freeze: requirements_frozen_$TIMESTAMP.txt"
# Alembic-Version sichern
su -c "psql $DB_NAME -t -c 'SELECT version_num FROM alembic_version;'" postgres 2>/dev/null \
> "$BACKUP_DIR/alembic_version_$TIMESTAMP.txt" || true
# PostgreSQL-Version sichern (wichtig für pg_upgrade-Erkennung)
su -c "psql -t -c 'SELECT version();'" postgres 2>/dev/null \
| head -1 | xargs > "$BACKUP_DIR/pg_version_$TIMESTAMP.txt" || true
# Alte Backups löschen (älter als RETENTION_DAYS)
find "$BACKUP_DIR" -name "db_*.dump" -mtime +$RETENTION_DAYS -delete
find "$BACKUP_DIR" -name "requirements_frozen_*.txt" -mtime +$RETENTION_DAYS -delete
find "$BACKUP_DIR" -name "alembic_version_*.txt" -mtime +$RETENTION_DAYS -delete
find "$BACKUP_DIR" -name "pg_version_*.txt" -mtime +$RETENTION_DAYS -delete
echo "[$(date)] Backup complete. Current backups:"
ls -lh "$BACKUP_DIR"
echo "[$(date)] Total size: $(du -sh "$BACKUP_DIR" | cut -f1)"