feat(backup): add MinIO snapshot backups via CLI and scheduler
This commit is contained in:
@@ -0,0 +1,60 @@
|
||||
#!/usr/bin/env bash
|
||||
set -euo pipefail
|
||||
|
||||
# Required env vars:
|
||||
# FLYNN_DATA_DIR (default: ~/.local/share/flynn)
|
||||
# FLYNN_BACKUP_DIR (default: ~/.local/share/flynn/backups)
|
||||
# MINIO_ENDPOINT
|
||||
# MINIO_ACCESS_KEY
|
||||
# MINIO_SECRET_KEY
|
||||
# MINIO_BUCKET
|
||||
#
|
||||
# Optional:
|
||||
# MINIO_PREFIX (default: flynn)
|
||||
# MINIO_SECURE (default: true)
|
||||
|
||||
DATA_DIR="${FLYNN_DATA_DIR:-$HOME/.local/share/flynn}"
|
||||
BACKUP_DIR="${FLYNN_BACKUP_DIR:-$HOME/.local/share/flynn/backups}"
|
||||
MINIO_PREFIX="${MINIO_PREFIX:-flynn}"
|
||||
MINIO_SECURE="${MINIO_SECURE:-true}"
|
||||
|
||||
if [[ -z "${MINIO_ENDPOINT:-}" || -z "${MINIO_ACCESS_KEY:-}" || -z "${MINIO_SECRET_KEY:-}" || -z "${MINIO_BUCKET:-}" ]]; then
|
||||
echo "Missing MinIO config. Set MINIO_ENDPOINT, MINIO_ACCESS_KEY, MINIO_SECRET_KEY, MINIO_BUCKET." >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if ! command -v mc >/dev/null 2>&1; then
|
||||
echo "MinIO client (mc) not found in PATH." >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
mkdir -p "${BACKUP_DIR}"
|
||||
|
||||
STAMP="$(date -u +%Y%m%d_%H%M%S)"
|
||||
ARCHIVE="flynn_${STAMP}.tar.gz"
|
||||
ARCHIVE_PATH="${BACKUP_DIR}/${ARCHIVE}"
|
||||
|
||||
ENTRIES=()
|
||||
[[ -f "${DATA_DIR}/sessions.db" ]] && ENTRIES+=("sessions.db")
|
||||
[[ -f "${DATA_DIR}/vectors.db" ]] && ENTRIES+=("vectors.db")
|
||||
[[ -d "${DATA_DIR}/memory" ]] && ENTRIES+=("memory")
|
||||
|
||||
if [[ ${#ENTRIES[@]} -eq 0 ]]; then
|
||||
echo "No backup inputs found under ${DATA_DIR}" >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
tar -czf "${ARCHIVE_PATH}" -C "${DATA_DIR}" "${ENTRIES[@]}"
|
||||
|
||||
if [[ "${MINIO_SECURE}" == "true" ]]; then
|
||||
PROTO="https"
|
||||
else
|
||||
PROTO="http"
|
||||
fi
|
||||
|
||||
export MC_HOST_flynnbackup="${PROTO}://${MINIO_ACCESS_KEY}:${MINIO_SECRET_KEY}@${MINIO_ENDPOINT}"
|
||||
mc mb --ignore-existing "flynnbackup/${MINIO_BUCKET}" >/dev/null
|
||||
mc cp "${ARCHIVE_PATH}" "flynnbackup/${MINIO_BUCKET}/${MINIO_PREFIX}/${ARCHIVE}" >/dev/null
|
||||
|
||||
echo "Backup created: ${ARCHIVE_PATH}"
|
||||
echo "Uploaded to: flynnbackup/${MINIO_BUCKET}/${MINIO_PREFIX}/${ARCHIVE}"
|
||||
Reference in New Issue
Block a user