Files
netbox/backup.sh
T
2026-05-21 05:02:40 +00:00

73 lines
3.0 KiB
Bash
Executable File

#!/bin/bash
# Скрипт резервного копирования NetBox Docker с отправкой на Яндекс.Диск
BACKUP_DIR="/opt/netbox/backups"
YADISK_MOUNT="/opt/netbox/yadisk"
DATE=$(date +%Y%m%d_%H%M%S)
# Создаем папку для временных бэкапов (с правами текущего пользователя)
mkdir -p ${BACKUP_DIR}
echo "🔄 [$(date)] Начинаем резервное копирование NetBox..."
# Проверяем, примонтирован ли Яндекс.Диск
if ! mountpoint -q ${YADISK_MOUNT}; then
echo " ❌ ОШИБКА: Яндекс.Диск не примонтирован!"
exit 1
fi
# Создаём папку для бэкапов на Яндекс.Диске (если её нет)
mkdir -p ${YADISK_MOUNT}/netbox-backups 2>/dev/null
# 1. Бэкап базы данных PostgreSQL
echo " → Бэкап базы данных..."
cd /opt/netbox
docker compose exec -T postgres sh -c 'pg_dump -cU $POSTGRES_USER $POSTGRES_DB' | gzip > ${BACKUP_DIR}/netbox_db_${DATE}.sql.gz
if [ $? -eq 0 ] && [ -s ${BACKUP_DIR}/netbox_db_${DATE}.sql.gz ]; then
echo " ✅ База данных: $(du -h ${BACKUP_DIR}/netbox_db_${DATE}.sql.gz | cut -f1)"
else
echo " ❌ Ошибка бэкапа базы данных!"
fi
# 2. Бэкап медиа-файлов
echo " → Бэкап медиа-файлов..."
docker compose exec -T netbox tar czf - -C /opt/netbox/netbox/media . 2>/dev/null > ${BACKUP_DIR}/netbox_media_${DATE}.tar.gz
if [ -s ${BACKUP_DIR}/netbox_media_${DATE}.tar.gz ]; then
echo " ✅ Медиа-файлы: $(du -h ${BACKUP_DIR}/netbox_media_${DATE}.tar.gz | cut -f1)"
fi
# 3. Бэкап .env файлов
echo " → Бэкап .env файлов..."
tar czf ${BACKUP_DIR}/netbox_env_${DATE}.tar.gz -C /opt/netbox env/ 2>/dev/null
if [ -s ${BACKUP_DIR}/netbox_env_${DATE}.tar.gz ]; then
echo " ✅ .env файлы: $(du -h ${BACKUP_DIR}/netbox_env_${DATE}.tar.gz | cut -f1)"
fi
# 4. Копирование на Яндекс.Диск
echo "☁️ Копирование на Яндекс.Диск..."
# Копируем файлы, если они существуют
for file in netbox_db_${DATE}.sql.gz netbox_media_${DATE}.tar.gz netbox_env_${DATE}.tar.gz; do
if [ -f ${BACKUP_DIR}/${file} ]; then
cp ${BACKUP_DIR}/${file} ${YADISK_MOUNT}/netbox-backups/
echo " ✅ ${file}"
fi
done
# 5. Очистка старых бэкапов
# Локально: оставляем 7 дней
find ${BACKUP_DIR} -type f -name "netbox_*" -mtime +7 -delete 2>/dev/null
# На Яндекс.Диске: оставляем 30 дней
find ${YADISK_MOUNT}/netbox-backups -type f -name "netbox_*" -mtime +30 -delete 2>/dev/null
echo "✅ [$(date)] Резервное копирование завершено!"
# Показываем список созданных бэкапов
echo ""
echo "📊 Созданные бэкапы:"
ls -lh ${BACKUP_DIR}/netbox_*_${DATE}.* 2>/dev/null || echo " (нет файлов)"