31 lines
1 KiB
Bash
31 lines
1 KiB
Bash
|
|
#!/bin/bash
|
||
|
|
# Restore a Forgejo backup tarball from GCS over the live data dir.
|
||
|
|
# Run on the VM via SSH. Stops the stack, restores, restarts.
|
||
|
|
#
|
||
|
|
# Usage: sudo ./restore.sh forgejo-20260507T033000Z.tar.gz
|
||
|
|
set -euo pipefail
|
||
|
|
|
||
|
|
if [[ $# -ne 1 ]]; then
|
||
|
|
echo "Usage: $0 <backup-filename>" >&2
|
||
|
|
echo " e.g. $0 forgejo-20260507T033000Z.tar.gz" >&2
|
||
|
|
exit 1
|
||
|
|
fi
|
||
|
|
|
||
|
|
BACKUP=$1
|
||
|
|
|
||
|
|
BUCKET=$(curl -sf -H "Metadata-Flavor: Google" \
|
||
|
|
"http://metadata.google.internal/computeMetadata/v1/project/project-id")-forgejo-backups
|
||
|
|
|
||
|
|
read -r -p "About to restore '$BACKUP' from gs://$BUCKET/ over /mnt/disks/forgejo-data/forgejo. Continue? [y/N] " ans
|
||
|
|
[[ "$ans" == "y" || "$ans" == "Y" ]] || exit 1
|
||
|
|
|
||
|
|
systemctl stop forgejo-stack.service
|
||
|
|
docker run --rm -v /tmp:/tmp google/cloud-sdk:slim \
|
||
|
|
gsutil cp "gs://${BUCKET}/${BACKUP}" /tmp/
|
||
|
|
rm -rf /mnt/disks/forgejo-data/forgejo
|
||
|
|
tar xzf "/tmp/${BACKUP}" -C /mnt/disks/forgejo-data/
|
||
|
|
rm "/tmp/${BACKUP}"
|
||
|
|
systemctl start forgejo-stack.service
|
||
|
|
|
||
|
|
echo "Restore complete. Check 'docker logs forgejo' for migration output."
|