#!/usr/bin/env bash set -euo pipefail # ============================================================================= # Gitea Backup Script for Dokploy # ============================================================================= # # Creates a database dump and file archive from the running Gitea containers. # # Usage: # chmod +x backup.sh # ./backup.sh # ./backup.sh /custom/backup/dir # # ============================================================================= # --- Configuration --- GITEA_CONTAINER="gitea" DB_CONTAINER="gitea-db" DB_USER="gitea" DB_NAME="gitea" BACKUP_DIR="${1:-$HOME/gitea-backups}" TIMESTAMP=$(date +%Y%m%d_%H%M%S) mkdir -p "$BACKUP_DIR" # --- Dump database --- echo "=== Dumping database ===" docker exec "$DB_CONTAINER" pg_dump \ -U "$DB_USER" -d "$DB_NAME" \ --no-owner --no-acl \ -F c -f /tmp/gitea_db_backup.dump docker cp "$DB_CONTAINER":/tmp/gitea_db_backup.dump "$BACKUP_DIR/gitea_db_${TIMESTAMP}.dump" docker exec "$DB_CONTAINER" rm /tmp/gitea_db_backup.dump echo "Database dumped to: $BACKUP_DIR/gitea_db_${TIMESTAMP}.dump" # --- Backup files --- echo "" echo "=== Backing up Gitea files ===" docker exec "$GITEA_CONTAINER" bash -c ' cd /data tar czf /tmp/gitea_files_backup.tar.gz \ git/repositories \ git/lfs \ gitea/avatars \ gitea/attachments \ git/.ssh \ 2>/dev/null || true ' docker cp "$GITEA_CONTAINER":/tmp/gitea_files_backup.tar.gz "$BACKUP_DIR/gitea_files_${TIMESTAMP}.tar.gz" docker exec "$GITEA_CONTAINER" rm /tmp/gitea_files_backup.tar.gz echo "Files backed up to: $BACKUP_DIR/gitea_files_${TIMESTAMP}.tar.gz" # --- Backup app.ini --- echo "" echo "=== Backing up app.ini ===" docker cp "$GITEA_CONTAINER":/data/gitea/conf/app.ini "$BACKUP_DIR/app_${TIMESTAMP}.ini" echo "Config backed up to: $BACKUP_DIR/app_${TIMESTAMP}.ini" # --- Summary --- echo "" echo "=== Backup complete ===" echo "Files:" ls -lh "$BACKUP_DIR"/*"${TIMESTAMP}"* echo "" echo "To restore on a fresh Dokploy instance:" echo " 1. Deploy the Gitea compose stack" echo " 2. Copy the backup files to ~/ on the server" echo " 3. Rename them to gitea_db_backup.dump, gitea_files_backup.tar.gz, app.ini" echo " 4. Run ./restore.sh"