#!/bin/bash # Скрипт резервного копирования ICQ XMPP (Prosody + webchat) с отправкой на Яндекс.Диск # По образцу /opt/netbox/backup.sh PROJECT_DIR="/opt/icq" BACKUP_DIR="${PROJECT_DIR}/backups" YADISK_MOUNT="/mnt/yandex-disk" YADISK_TARGET="${YADISK_MOUNT}/backup/icq-backups" DATE=$(date +%Y%m%d_%H%M%S) # Папки/файлы проекта, которые бэкапим (из /opt/icq) INCLUDE="data config certs modules webchat docker-compose.yml .env README.md STATUS.md PRD.md MIGRATION.md WALKTHROUGH.md" mkdir -p ${BACKUP_DIR} echo "🔄 [$(date)] Начинаем резервное копирование ICQ XMPP..." # Проверяем, примонтирован ли Яндекс.Диск if ! mountpoint -q ${YADISK_MOUNT}; then echo " ❌ ОШИБКА: Яндекс.Диск не примонтирован!" exit 1 fi # Создаём папку для бэкапов на Яндекс.Диске (если её нет) mkdir -p ${YADISK_TARGET} 2>/dev/null # 1. Бэкап проекта одним архивом (данные Prosody + конфиги + серты + модули + веб-клиент + доки) ARCHIVE="${BACKUP_DIR}/icq_${DATE}.tar.gz" echo " → Архив проекта..." tar czf ${ARCHIVE} -C ${PROJECT_DIR} ${INCLUDE} 2>/dev/null if [ -s "${ARCHIVE}" ]; then echo " ✅ Архив: $(du -h ${ARCHIVE} | cut -f1)" echo " ☁️ Копирование на Яндекс.Диск..." cp ${ARCHIVE} ${YADISK_TARGET}/ echo " ✅ скопирован на ЯД (${YADISK_TARGET}/)" else echo " ❌ Ошибка создания архива!" fi # 2. Очистка старых бэкапов # Локально: оставляем 7 дней find ${BACKUP_DIR} -type f -name "icq_*" -mtime +7 -delete 2>/dev/null # На Яндекс.Диске: оставляем 30 дней find ${YADISK_TARGET} -type f -name "icq_*" -mtime +30 -delete 2>/dev/null echo "✅ [$(date)] Резервное копирование завершено!" # Показываем список созданных бэкапов echo "" echo "📊 Созданные бэкапы:" ls -lh ${BACKUP_DIR}/icq_${DATE}.* 2>/dev/null || echo " (нет файлов)"