#!/usr/bin/env sh set -eu COMPOSE_FILE="${COMPOSE_FILE:-docker-compose.production.yml}" ENV_FILE="${ENV_FILE:-.env.production}" BACKUP_DIR="${BACKUP_DIR:-./data/backups}" RETENTION_DAYS="${BACKUP_RETENTION_DAYS:-14}" SYNOLOGY_BACKUP_DIR="${SYNOLOGY_BACKUP_DIR:-}" timestamp="$(date -u +%Y%m%d-%H%M%S)" postgres_file="postgres-${timestamp}.dump" uploads_file="uploads-${timestamp}.tar.gz" config_file="config-${timestamp}.tar.gz" manifest_file="backup-${timestamp}.manifest" mkdir -p "${BACKUP_DIR}" docker compose --env-file "${ENV_FILE}" -f "${COMPOSE_FILE}" exec -T postgres sh -lc \ "PGPASSWORD=\"\$POSTGRES_PASSWORD\" pg_dump -U \"\$POSTGRES_USER\" -d \"\$POSTGRES_DB\" -Fc" \ > "${BACKUP_DIR}/${postgres_file}" docker compose --env-file "${ENV_FILE}" -f "${COMPOSE_FILE}" run --rm --no-deps --entrypoint sh app -lc \ "tar -C /app/uploads -czf - ." \ > "${BACKUP_DIR}/${uploads_file}" tar -C . -czf "${BACKUP_DIR}/${config_file}" \ "${ENV_FILE}" \ "${COMPOSE_FILE}" \ deploy/cloudflared/config.yml cat > "${BACKUP_DIR}/${manifest_file}" <