mirror of
https://gitverse.ru/kpa39l/gitea-docker-compose.git
synced 2026-09-29 09:55:05 +00:00
96 lines
4.0 KiB
Bash
Executable File
96 lines
4.0 KiB
Bash
Executable File
#!/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 -u git "${GITEA_CONTAINER}" \
|
|
sh -c "mkdir -p /tmp/gitea-dump-tmp && 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 " (нет файлов)" |