From 6a585de6db5664d858ed1a4079375a564692d2e3 Mon Sep 17 00:00:00 2001 From: "Dejan R." Date: Tue, 25 Nov 2025 06:58:37 +0000 Subject: [PATCH] added backup script --- backup.sh | 47 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 47 insertions(+) create mode 100755 backup.sh diff --git a/backup.sh b/backup.sh new file mode 100755 index 0000000..4acf12c --- /dev/null +++ b/backup.sh @@ -0,0 +1,47 @@ +#!/bin/bash +set -euo pipefail + +# Where this script lives (Forgejo project root) +SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" +cd "$SCRIPT_DIR" + +BACKUP_DIR="$SCRIPT_DIR/backup" +TIMESTAMP="$(date +%Y-%m-%d_%H-%M-%S)" +BACKUP_FILE="$BACKUP_DIR/forgejo-backup-${TIMESTAMP}.tar.gz" + +echo "=== Forgejo backup ===" +echo "Project dir : $SCRIPT_DIR" +echo "Backup dir : $BACKUP_DIR" +echo "Backup file : $BACKUP_FILE" +echo + +# 1) Ensure backup dir exists +mkdir -p "$BACKUP_DIR" + +# 2) Stop Forgejo (short downtime, but consistent backup) +echo "[1/3] Stopping Forgejo containers..." +docker compose down + +# 3) Create archive of data + config +# Adjust the list if you add more config files +echo "[2/3] Creating backup archive..." +tar -czf "$BACKUP_FILE" \ + forgejo \ + docker-compose.yml \ + .gitignore \ + README.md \ + .git 2>/dev/null || true # ignore .git if it causes trouble + +echo "[OK] Backup created: $BACKUP_FILE" + +# 4) Start Forgejo again +echo "[3/3] Starting Forgejo containers..." +docker compose up -d + +echo "=== Done ===" + +# 5) Optional: keep only last 7 backups, delete older ones +echo "Cleaning up old backups (keep last 7)..." +ls -1t "$BACKUP_DIR"/forgejo-backup-*.tar.gz 2>/dev/null | tail -n +8 | xargs -r rm -f + +echo "Backup finished successfully."