mirror of
https://gitverse.ru/kpa39l/gitea-docker-compose.git
synced 2026-09-29 09:55:05 +00:00
Rewrite backup.sh for Gitea dump backup
This commit is contained in:
@@ -0,0 +1,96 @@
|
||||
#!/bin/bash
|
||||
# Скрипт резервного копирования Gitea через gitea dump с отправкой на Яндекс.Диск
|
||||
# Использует встроенную команду gitea dump, которая создаёт полный снапшот:
|
||||
# - PostgreSQL база данных (SQL дамп)
|
||||
# - Git-репозитории
|
||||
# - Вложения
|
||||
# - LFS-данные
|
||||
# - Конфигурационные файлы
|
||||
# - Пакеты
|
||||
|
||||
BACKUP_DIR="/opt/gitea/backups"
|
||||
YADISK_MOUNT="/mnt/yandex-disk"
|
||||
DATE=$(date +%Y%m%d_%H%M%S)
|
||||
COMPOSE_DIR="/opt/gitea.nixg.ru"
|
||||
GITEA_CONTAINER="gitea"
|
||||
DUMP_FILE="gitea_dump_${DATE}.zip"
|
||||
|
||||
# Создаём локальную папку для бэкапов
|
||||
mkdir -p "${BACKUP_DIR}"
|
||||
|
||||
echo "🔄 [$(date)] Начинаем резервное копирование Gitea..."
|
||||
|
||||
# Проверяем, примонтирован ли Яндекс.Диск
|
||||
if ! mountpoint -q "${YADISK_MOUNT}"; then
|
||||
echo " ❌ ОШИБКА: Яндекс.Диск не примонтирован!"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Создаём папку для бэкапов на Яндекс.Диске (если её нет)
|
||||
mkdir -p "${YADISK_MOUNT}/gitea-backups" 2>/dev/null
|
||||
|
||||
# 1. Полный дамп Gitea через встроенную команду
|
||||
echo " → Выполняем gitea dump (БД + репозитории + вложения + конфиг)..."
|
||||
cd "${COMPOSE_DIR}" || exit 1
|
||||
|
||||
docker compose exec -T "${GITEA_CONTAINER}" \
|
||||
gitea dump \
|
||||
--file "/tmp/${DUMP_FILE}" \
|
||||
--tempdir /tmp/gitea-dump-tmp \
|
||||
--skip-log \
|
||||
--skip-custom-dir
|
||||
|
||||
DUMP_EXIT=$?
|
||||
|
||||
# 2. Копируем дамп из контейнера на хост
|
||||
if [ ${DUMP_EXIT} -eq 0 ]; then
|
||||
echo " → Копируем дамп из контейнера..."
|
||||
docker compose cp "${GITEA_CONTAINER}:/tmp/${DUMP_FILE}" "${BACKUP_DIR}/" 2>/dev/null
|
||||
|
||||
if [ -s "${BACKUP_DIR}/${DUMP_FILE}" ]; then
|
||||
echo " ✅ Дамп Gitea: $(du -h "${BACKUP_DIR}/${DUMP_FILE}" | cut -f1)"
|
||||
else
|
||||
echo " ❌ Ошибка копирования дампа из контейнера!"
|
||||
fi
|
||||
|
||||
# Очищаем временный файл в контейнере
|
||||
docker compose exec -T "${GITEA_CONTAINER}" rm -f "/tmp/${DUMP_FILE}" 2>/dev/null
|
||||
docker compose exec -T "${GITEA_CONTAINER}" rm -rf /tmp/gitea-dump-tmp 2>/dev/null
|
||||
else
|
||||
echo " ❌ Ошибка выполнения gitea dump (exit code: ${DUMP_EXIT})!"
|
||||
fi
|
||||
|
||||
# 3. Отдельный бэкап .env и переменных (если нужны)
|
||||
echo " → Бэкап .env файлов..."
|
||||
if [ -f "${COMPOSE_DIR}/.env" ]; then
|
||||
cp "${COMPOSE_DIR}/.env" "${BACKUP_DIR}/gitea_env_${DATE}.txt"
|
||||
echo " ✅ .env файл сохранён"
|
||||
else
|
||||
echo " ⚠️ .env файл не найден, пропускаем"
|
||||
fi
|
||||
|
||||
# 4. Копирование на Яндекс.Диск
|
||||
echo "☁️ Копирование на Яндекс.Диск..."
|
||||
|
||||
for file in "${DUMP_FILE}" "gitea_env_${DATE}.txt"; do
|
||||
if [ -f "${BACKUP_DIR}/${file}" ]; then
|
||||
cp "${BACKUP_DIR}/${file}" "${YADISK_MOUNT}/gitea-backups/"
|
||||
echo " ✅ ${file}"
|
||||
fi
|
||||
done
|
||||
|
||||
# 5. Очистка старых бэкапов
|
||||
# Локально: оставляем 7 дней
|
||||
find "${BACKUP_DIR}" -type f -name "gitea_dump_*.zip" -mtime +7 -delete 2>/dev/null
|
||||
find "${BACKUP_DIR}" -type f -name "gitea_env_*.txt" -mtime +7 -delete 2>/dev/null
|
||||
|
||||
# На Яндекс.Диске: оставляем 30 дней
|
||||
find "${YADISK_MOUNT}/gitea-backups" -type f -name "gitea_dump_*.zip" -mtime +30 -delete 2>/dev/null
|
||||
find "${YADISK_MOUNT}/gitea-backups" -type f -name "gitea_env_*.txt" -mtime +30 -delete 2>/dev/null
|
||||
|
||||
echo "✅ [$(date)] Резервное копирование Gitea завершено!"
|
||||
|
||||
# Показываем список созданных бэкапов
|
||||
echo ""
|
||||
echo "📊 Созданные бэкапы:"
|
||||
ls -lh "${BACKUP_DIR}/gitea_dump_${DATE}."* "${BACKUP_DIR}/gitea_env_${DATE}."* 2>/dev/null || echo " (нет файлов)"
|
||||
Reference in New Issue
Block a user