#!/usr/bin/env bash # Generated by Ansible — do not edit manually # Backs up PostgreSQL databases and Vaultwarden data. # Runs daily at 03:00, keeps {{ backup_retention_days }} days of backups. set -euo pipefail BACKUP_DIR="{{ backup_dir }}" DATE=$(date +%Y-%m-%d_%H-%M-%S) KEEP_DAYS="{{ backup_retention_days }}" log() { echo "[$(date '+%Y-%m-%d %H:%M:%S')] $*"; } log "=== Backup started ===" # ── Forgejo PostgreSQL ────────────────────────────────────────────────────── log "Backing up forgejo-db..." docker exec forgejo-db pg_dump -U forgejo forgejo \ | gzip > "${BACKUP_DIR}/forgejo-db_${DATE}.sql.gz" log " → ${BACKUP_DIR}/forgejo-db_${DATE}.sql.gz ($(du -sh "${BACKUP_DIR}/forgejo-db_${DATE}.sql.gz" | cut -f1))" # ── Plane PostgreSQL ──────────────────────────────────────────────────────── log "Backing up plane-db..." docker exec plane-db pg_dump -U plane plane \ | gzip > "${BACKUP_DIR}/plane-db_${DATE}.sql.gz" log " → ${BACKUP_DIR}/plane-db_${DATE}.sql.gz ($(du -sh "${BACKUP_DIR}/plane-db_${DATE}.sql.gz" | cut -f1))" # ── Vaultwarden data ──────────────────────────────────────────────────────── log "Backing up Vaultwarden..." docker run --rm \ --volumes-from vaultwarden \ -v "${BACKUP_DIR}:/backup" \ alpine:3 \ tar czf "/backup/vaultwarden_${DATE}.tar.gz" /data log " → ${BACKUP_DIR}/vaultwarden_${DATE}.tar.gz ($(du -sh "${BACKUP_DIR}/vaultwarden_${DATE}.tar.gz" | cut -f1))" # ── Forgejo repositories ──────────────────────────────────────────────────── log "Backing up Forgejo data..." docker run --rm \ --volumes-from forgejo \ -v "${BACKUP_DIR}:/backup" \ alpine:3 \ tar czf "/backup/forgejo-data_${DATE}.tar.gz" /data log " → ${BACKUP_DIR}/forgejo-data_${DATE}.tar.gz ($(du -sh "${BACKUP_DIR}/forgejo-data_${DATE}.tar.gz" | cut -f1))" # ── Cleanup old backups ───────────────────────────────────────────────────── log "Removing backups older than ${KEEP_DAYS} days..." find "${BACKUP_DIR}" -name "*.gz" -mtime +${KEEP_DAYS} -delete log " → Done. Current backups:" du -sh "${BACKUP_DIR}"/*.gz 2>/dev/null | sort -k2 || true log "=== Backup completed ==="