#!/usr/bin/env bash set -euo pipefail STACK_DIR="${STACK_DIR:-/opt/gitea}" GITEA_CONTAINER="${GITEA_CONTAINER:-gitea}" DB_CONTAINER="${DB_CONTAINER:-gitea-db}" POSTGRES_USER="${POSTGRES_USER:-gitea}" POSTGRES_DB="${POSTGRES_DB:-gitea}" cd "$STACK_DIR" TS="$(date -u +%Y%m%d-%H%M%S)" BK="$STACK_DIR/backups/$TS" mkdir -p "$BK" cp docker-compose.yml "$BK/docker-compose.yml" if [ -f "$STACK_DIR/gitea-data/gitea/conf/app.ini" ]; then cp "$STACK_DIR/gitea-data/gitea/conf/app.ini" "$BK/app.ini" fi { echo "backup_utc=$TS" echo "host=$(hostname)" echo "date=$(date -u --iso-8601=seconds)" echo "docker=$(docker --version)" echo "compose=$(docker compose version 2>/dev/null || true)" echo "gitea_version=$(docker exec -u git "$GITEA_CONTAINER" gitea --version 2>/dev/null || true)" docker ps --format '{{.Names}} | {{.Image}} | {{.Status}} | {{.Ports}}' } > "$BK/metadata.txt" docker exec -u git "$GITEA_CONTAINER" mkdir -p /data/gitea/backup-tmp DUMP_NAME="gitea-dump-$TS.zip" docker exec -u git "$GITEA_CONTAINER" gitea dump \ -c /data/gitea/conf/app.ini \ -w /data/gitea \ -f "/data/gitea/backup-tmp/$DUMP_NAME" \ --quiet cp "$STACK_DIR/gitea-data/gitea/backup-tmp/$DUMP_NAME" "$BK/$DUMP_NAME" rm -f "$STACK_DIR/gitea-data/gitea/backup-tmp/$DUMP_NAME" docker exec "$DB_CONTAINER" pg_dump -U "$POSTGRES_USER" -d "$POSTGRES_DB" -Fc > "$BK/gitea-postgres-$TS.dump" sha256sum "$BK"/* > "$BK/SHA256SUMS" echo "Backup created: $BK" du -sh "$BK" "$BK"/*