Initial own-git docs, configs, scripts, and hardening pack

This commit is contained in:
PTah
2026-04-21 21:37:43 +10:00
commit f5899ebc56
25 changed files with 1843 additions and 0 deletions
+48
View File
@@ -0,0 +1,48 @@
#!/usr/bin/env bash
set -euo pipefail
# Резервное копирование Gitea data dir + app.ini с простой ротацией.
# По умолчанию:
# - источник: /opt/gitea/data
# - бэкапы: /opt/backups/gitea
# - хранить: 14 архивов
GITEA_DATA_DIR="${GITEA_DATA_DIR:-/opt/gitea/data}"
BACKUP_DIR="${BACKUP_DIR:-/opt/backups/gitea}"
RETENTION="${RETENTION:-14}"
DATE_TAG="$(date +%Y%m%d-%H%M%S)"
ARCHIVE_NAME="gitea-backup-${DATE_TAG}.tar.gz"
TMP_DIR="${BACKUP_DIR}/.tmp-${DATE_TAG}"
mkdir -p "$BACKUP_DIR"
mkdir -p "$TMP_DIR"
echo "[INFO] Backup started: $DATE_TAG"
echo "[INFO] Source: $GITEA_DATA_DIR"
echo "[INFO] Target: $BACKUP_DIR/$ARCHIVE_NAME"
if [[ ! -d "$GITEA_DATA_DIR" ]]; then
echo "[ERR] Source directory not found: $GITEA_DATA_DIR"
exit 1
fi
# Копируем только нужное в staging, чтобы архив был чистым.
cp -a "$GITEA_DATA_DIR" "$TMP_DIR/data"
tar -C "$TMP_DIR" -czf "${BACKUP_DIR}/${ARCHIVE_NAME}" data
rm -rf "$TMP_DIR"
echo "[OK] Archive created: ${BACKUP_DIR}/${ARCHIVE_NAME}"
# Ротация по количеству файлов (новые сохраняем, старые удаляем).
mapfile -t OLD_BACKUPS < <(ls -1t "${BACKUP_DIR}"/gitea-backup-*.tar.gz 2>/dev/null || true)
COUNT="${#OLD_BACKUPS[@]}"
if (( COUNT > RETENTION )); then
echo "[INFO] Retention: keep newest ${RETENTION}, remove $((COUNT - RETENTION))"
for (( i=RETENTION; i<COUNT; i++ )); do
rm -f "${OLD_BACKUPS[$i]}"
echo "[INFO] Removed old backup: ${OLD_BACKUPS[$i]}"
done
fi
echo "[OK] Backup finished"