#!/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 " (нет файлов)"