Files
restic-backup/misskey/task.sh
2026-02-20 17:04:55 +08:00

50 lines
1.2 KiB
Bash
Executable File

#!/usr/bin/env bash
set -Eeuo pipefail
basedir="${basedir:-/backup}"
tempdir="$basedir/work/misskey"
database_container="misskey-database"
database_name="misskey"
volume_dir="/app/misskey/data"
docker_compose="/app/misskey/docker-compose.yml"
database_export_path="$tempdir/database.sql"
volume_export_path="$tempdir/data"
docker_compose_export_path="$tempdir/docker-compose.yml"
log() {
echo "[$(date '+%Y-%m-%d %H:%M:%S')][Misskey Backup] $*"
}
cleanup() {
if mountpoint -q "$volume_export_path"; then
umount "$volume_export_path"
fi
rm -rf "$tempdir"
}
trap cleanup EXIT
main() {
log "Starting backup..."
rm -rf "$tempdir"
mkdir -p "$tempdir"
mkdir -p "$volume_export_path"
log "Exporting database..."
docker exec "$database_container" pg_dump -U postgres "$database_name" > "$database_export_path"
log "Prepare volume..."
# TODO 有一致性问题, 但问题不大, 后续可能采用 fsfreeze / btrfs snapshot
# 如果 misskey 启用了 S3, volume 里不会有文件
mount --bind "$volume_dir" "$volume_export_path"
cp "$docker_compose" "$docker_compose_export_path"
log "Run restic and upload backup"
restic backup --tag automate "$tempdir"
log "Backup complete."
}
main