From 9eece7e8618ca70024edce8a9a2811988bf71fbc Mon Sep 17 00:00:00 2001 From: Claudio Ortolina Date: Tue, 21 Apr 2026 14:46:48 +0100 Subject: [PATCH] Add litestream-based backup script --- docs/available-tasks.md | 6 +++++ scripts/prod/litestream-backup | 42 ++++++++++++++++++++++++++++++++++ 2 files changed, 48 insertions(+) create mode 100755 scripts/prod/litestream-backup diff --git a/docs/available-tasks.md b/docs/available-tasks.md index 519bb862..c486cbdb 100644 --- a/docs/available-tasks.md +++ b/docs/available-tasks.md @@ -100,6 +100,12 @@ Backup the production database to the local development env Deploy on production and monitor deployment +## `prod:litestream-backup` + +- **Usage**: `prod:litestream-backup` + +Restore the production database locally from the Litestream S3 replica + ## `prod:prune-backups` - **Usage**: `prod:prune-backups` diff --git a/scripts/prod/litestream-backup b/scripts/prod/litestream-backup new file mode 100755 index 00000000..8a2c5426 --- /dev/null +++ b/scripts/prod/litestream-backup @@ -0,0 +1,42 @@ +#!/usr/bin/env bash + +#MISE description="Restore the production database locally from the Litestream S3 replica" +#MISE confirm="This will overwrite data/music_library_dev.db. Continue?" + +set -euo pipefail + +source "$(git rev-parse --show-toplevel)/scripts/_helpers.sh" + +ensure_working_directory! + +: "${LITESTREAM_ACCESS_KEY_ID:?must be set}" +: "${LITESTREAM_SECRET_ACCESS_KEY:?must be set}" + +current_date=$(date +%Y-%m-%d_%H-%M-%S) +project_dir=$(git rev-parse --show-toplevel) +data_dir="$project_dir/data" +dest_file="$data_dir/music_library_prod_$current_date.db" +replica_db_path="/mnt/music_library/music_library_prod.db" + +config_file=$(mktemp) +trap 'rm -f "$config_file"' EXIT + +cat >"$config_file" <