mirror of
https://gitverse.ru/kpa39l/netbox.git
synced 2026-09-29 09:55:11 +00:00
73 lines
3.0 KiB
Bash
Executable File
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 " (нет файлов)"
|