Это старая версия документа!
Автоматическое резервное копирование Evolution API
Описание
Данная инструкция описывает настройку автоматического ежедневного резервного копирования Evolution API с помощью bash скрипта и cron. Бекап выполняется каждый день в 3:00 утра с временной остановкой сервисов.
⚠️ Важно: Evolution API будет недоступен в течение 1-2 минут во время создания резервной копии.
Что входит в резервную копию
- store/ - пользовательские данные Evolution API
- instances/ - инстансы и сессии WhatsApp
- postgres_data/ - база данных PostgreSQL
- redis_data/ - кеш Redis
- docker-compose.yml - конфигурация контейнеров
Предварительные требования
- Docker и Docker Compose установлены
- Evolution API запущен в директории
/opt/evolution-api/ - Права root или sudo доступ
- Достаточно места на диске для хранения бекапов
Шаг 1: Создание директорий
# Создайте директории для скрипта и бекапов sudo mkdir -p /opt/scripts sudo mkdir -p /opt/backups/evolution-api # Проверьте существование Evolution API ls -la /opt/evolution-api/
Шаг 2: Создание скрипта резервного копирования
Создайте файл скрипта:
sudo nano /opt/scripts/evolution-backup.sh
Скопируйте следующее содержимое в файл:
- evolution-backup.sh
#!/bin/bash # Скрипт резервного копирования Evolution API # Запуск: /opt/scripts/evolution-backup.sh # Настройки COMPOSE_FILE="/opt/evolution-api/docker-compose.yml" EVOLUTION_DIR="/opt/evolution-api" BACKUP_DIR="/opt/backups/evolution-api" DATE=$(date +"%Y%m%d_%H%M%S") BACKUP_NAME="evolution_backup_${DATE}" RETENTION_DAYS=30 # Храним бекапы 30 дней # Логирование LOG_FILE="${BACKUP_DIR}/backup.log" # Функция логирования log() { echo "[$(date '+%Y-%m-%d %H:%M:%S')] $1" | tee -a "$LOG_FILE" } # Создаем директорию для бекапов если не существует mkdir -p "$BACKUP_DIR" log "=== Начало резервного копирования Evolution API ===" # Проверяем что compose файл существует if [ ! -f "$COMPOSE_FILE" ]; then log "ОШИБКА: Файл $COMPOSE_FILE не найден!" exit 1 fi # Переходим в директорию с Evolution cd "$EVOLUTION_DIR" || { log "ОШИБКА: Не удалось перейти в директорию $EVOLUTION_DIR" exit 1 } # Останавливаем контейнеры log "Останавливаем контейнеры Evolution API..." docker-compose -f "$COMPOSE_FILE" down if [ $? -eq 0 ]; then log "Контейнеры успешно остановлены" else log "ОШИБКА: Не удалось остановить контейнеры" exit 1 fi # Ждем пару секунд для полной остановки sleep 5 # Создаем архив с данными log "Создаем архив данных..." BACKUP_PATH="${BACKUP_DIR}/${BACKUP_NAME}.tar.gz" tar -czf "$BACKUP_PATH" \ --exclude='*.log' \ --exclude='**/lost+found' \ store/ \ instances/ \ postgres_data/ \ redis_data/ \ docker-compose.yml if [ $? -eq 0 ]; then log "Архив создан: $BACKUP_PATH" # Получаем размер архива BACKUP_SIZE=$(du -h "$BACKUP_PATH" | cut -f1) log "Размер архива: $BACKUP_SIZE" else log "ОШИБКА: Не удалось создать архив" # Пытаемся запустить контейнеры даже при ошибке log "Запускаем контейнеры после ошибки..." docker-compose -f "$COMPOSE_FILE" up -d exit 1 fi # Запускаем контейнеры обратно log "Запускаем контейнеры Evolution API..." docker-compose -f "$COMPOSE_FILE" up -d if [ $? -eq 0 ]; then log "Контейнеры успешно запущены" else log "ОШИБКА: Не удалось запустить контейнеры" exit 1 fi # Ждем запуска сервисов sleep 10 # Проверяем что все контейнеры работают log "Проверяем статус контейнеров..." if docker-compose -f "$COMPOSE_FILE" ps | grep -q "Up"; then log "Контейнеры работают корректно" else log "ПРЕДУПРЕЖДЕНИЕ: Некоторые контейнеры могут работать некорректно" fi # Удаляем старые бекапы log "Удаляем бекапы старше $RETENTION_DAYS дней..." find "$BACKUP_DIR" -name "evolution_backup_*.tar.gz" -mtime +$RETENTION_DAYS -delete # Показываем статистику бекапов BACKUP_COUNT=$(ls -1 "${BACKUP_DIR}"/evolution_backup_*.tar.gz 2>/dev/null | wc -l) log "Общее количество бекапов: $BACKUP_COUNT" log "=== Резервное копирование завершено успешно ===" # Отправляем уведомление (опционально) # curl -s -X POST "https://api.telegram.org/bot<TOKEN>/sendMessage" \ # -d chat_id="<CHAT_ID>" \ # -d text="✅ Evolution API backup completed: $BACKUP_NAME ($BACKUP_SIZE)" exit 0
Шаг 3: Настройка прав доступа
# Сделайте скрипт исполняемым sudo chmod +x /opt/scripts/evolution-backup.sh # Проверьте права доступа ls -la /opt/scripts/evolution-backup.sh
Шаг 4: Тестирование скрипта
⚠️ Внимание: Тестирование временно остановит Evolution API на 1-2 минуты.
# Запустите тестовое резервное копирование sudo /opt/scripts/evolution-backup.sh # Проверьте создание бекапа ls -la /opt/backups/evolution-api/ # Посмотрите логи cat /opt/backups/evolution-api/backup.log
Ожидаемый результат:
/opt/backups/evolution-api/ ├── evolution_backup_20240828_123456.tar.gz └── backup.log
Шаг 5: Настройка автоматического запуска (cron)
Откройте crontab для root:
sudo crontab -e
Добавьте следующую строку в конец файла:
# Резервное копирование Evolution API каждый день в 3:00 0 3 * * * /opt/scripts/evolution-backup.sh >/dev/null 2>&1
Сохраните и выйдите из редактора.
Шаг 6: Проверка настройки cron
# Проверьте что задача добавлена sudo crontab -l # Проверьте статус службы cron sudo systemctl status cron # Убедитесь что cron запущен sudo systemctl enable cron sudo systemctl start cron
Структура файлов после установки
/opt/
├── scripts/
│ └── evolution-backup.sh
├── backups/
│ └── evolution-api/
│ ├── evolution_backup_20240828_030001.tar.gz
│ ├── evolution_backup_20240829_030001.tar.gz
│ └── backup.log
└── evolution-api/
├── docker-compose.yml
├── store/
├── instances/
├── postgres_data/
└── redis_data/
Мониторинг и управление бекапами
Проверка последнего бекапа
# Показать последний созданный бекап ls -lt /opt/backups/evolution-api/evolution_backup_*.tar.gz | head -1 # Размеры всех бекапов du -sh /opt/backups/evolution-api/evolution_backup_*.tar.gz # Общий размер директории с бекапами du -sh /opt/backups/evolution-api/
Просмотр логов
# Последние 20 строк лога tail -20 /opt/backups/evolution-api/backup.log # Поиск ошибок в логах grep "ОШИБКА" /opt/backups/evolution-api/backup.log # Поиск успешных бекапов grep "успешно" /opt/backups/evolution-api/backup.log
Очистка старых бекапов
# Удалить бекапы старше 30 дней вручную find /opt/backups/evolution-api/ -name "evolution_backup_*.tar.gz" -mtime +30 -delete # Показать количество бекапов ls -1 /opt/backups/evolution-api/evolution_backup_*.tar.gz | wc -l # Показать самые старые бекапы ls -lt /opt/backups/evolution-api/evolution_backup_*.tar.gz | tail -5
Восстановление из резервной копии
🚨 ОСТОРОЖНО: Восстановление полностью заменит текущие данные!
Шаги восстановления
1. Остановите Evolution API:
cd /opt/evolution-api/ sudo docker-compose down
2. Сделайте резервную копию текущих данных (опционально):
sudo mv store store_old_$(date +%Y%m%d) sudo mv instances instances_old_$(date +%Y%m%d) sudo mv postgres_data postgres_data_old_$(date +%Y%m%d) sudo mv redis_data redis_data_old_$(date +%Y%m%d)
3. Восстановите данные из архива:
# Выберите нужный бекап ls -la /opt/backups/evolution-api/evolution_backup_*.tar.gz # Распакуйте архив (замените YYYYMMDD_HHMMSS на нужную дату) sudo tar -xzf /opt/backups/evolution-api/evolution_backup_YYYYMMDD_HHMMSS.tar.gz
4. Запустите Evolution API:
sudo docker-compose up -d
5. Проверьте работоспособность:
sudo docker-compose ps sudo docker-compose logs -f
Настройки и оптимизация
Изменение времени запуска
Для изменения времени запуска отредактируйте crontab:
sudo crontab -e
Примеры расписания:
# Каждый день в 2:30 30 2 * * * /opt/scripts/evolution-backup.sh # Каждое воскресенье в 4:00 0 4 * * 0 /opt/scripts/evolution-backup.sh # Дважды в день (6:00 и 18:00) 0 6,18 * * * /opt/scripts/evolution-backup.sh
Настройка уведомлений
Для получения уведомлений в Telegram выполните следующие шаги:
1. Создайте Telegram бота:
- Найдите бота @BotFather в Telegram
- Отправьте команду
/newbot - Следуйте инструкциям для создания бота
- Сохраните полученный токен (например:
123456789:AAHdqTcvCH1vGWJxfSeofSAs0K5PALDsaw)
2. Получите CHAT_ID:
Напишите своему боту любое сообщение в Telegram. После этого выполните запрос:
# Замените <ВАШ_ТОКЕН> на токен вашего бота curl -s "https://api.telegram.org/bot<ВАШ_ТОКЕН>/getUpdates"
В ответе найдите значение chat.id:
{
"ok": true,
"result": [
{
"update_id": 123456789,
"message": {
"message_id": 1,
"from": { "id": 987654321, "first_name": "Ваше имя" },
"chat": {
"id": 987654321, ← Это ваш CHAT_ID
"first_name": "Ваше имя",
"type": "private"
},
"date": 1640995200,
"text": "Hello"
}
}
]
}
3. Настройте уведомления в скрипте:
Раскомментируйте и настройте строки в конце скрипта /opt/scripts/evolution-backup.sh:
# Замените <ВАШ_ТОКЕН> и <ВАШ_CHAT_ID> на реальные значения curl -s -X POST "https://api.telegram.org/bot<ВАШ_ТОКЕН>/sendMessage" \ -d chat_id="<ВАШ_CHAT_ID>" \ -d text="✅ Evolution API backup completed: $BACKUP_NAME ($BACKUP_SIZE)"
4. Тест уведомлений:
# Проверьте отправку тестового сообщения curl -s -X POST "https://api.telegram.org/bot123456789:AAHdqTcvCH1vGWJxfSeofSAs0K5PALDsaw/sendMessage" \ -d chat_id="987654321" \ -d text="🔧 Тест уведомлений Evolution API бекапов"
Примеры сообщений уведомлений:
# Успешный бекап text="✅ Evolution API backup completed: $BACKUP_NAME ($BACKUP_SIZE)" # Ошибка бекапа text="❌ Evolution API backup failed! Check logs: /opt/backups/evolution-api/backup.log" # Расширенное уведомление text="📦 Evolution API Backup 📅 Date: $(date '+%Y-%m-%d %H:%M:%S') 📁 Archive: $BACKUP_NAME 💾 Size: $BACKUP_SIZE 📊 Total backups: $BACKUP_COUNT"
Изменение периода хранения
Отредактируйте переменную в скрипте:
# Хранить бекапы 60 дней RETENTION_DAYS=60 # Хранить бекапы 7 дней RETENTION_DAYS=7
Настройка ротации логов
Создайте конфигурацию logrotate для управления размером логов:
sudo nano /etc/logrotate.d/evolution-backup
/opt/backups/evolution-api/backup.log {
daily
rotate 30
compress
delaycompress
missingok
notifempty
create 644 root root
}
Устранение неисправностей
Частые проблемы
1. Скрипт не запускается:
- Проверьте права доступа:
sudo chmod +x /opt/scripts/evolution-backup.sh - Проверьте пути в скрипте
- Убедитесь что Docker запущен:
sudo systemctl status docker
2. Контейнеры не останавливаются:
- Проверьте что путь к docker-compose.yml правильный
- Убедитесь что файл существует:
ls -la /opt/evolution-api/docker-compose.yml
3. Недостаточно места для бекапов:
- Проверьте свободное место:
df -h /opt/backups/evolution-api/ - Уменьшите период хранения бекапов
- Настройте ротацию логов
4. Cron не запускается:
- Проверьте статус:
sudo systemctl status cron - Проверьте синтаксис crontab:
sudo crontab -l - Посмотрите системные логи:
sudo journalctl -u cron
5. Директория бекапов недоступна:
- Создайте директорию:
sudo mkdir -p /opt/backups/evolution-api - Проверьте права доступа:
sudo chmod 755 /opt/backups/evolution-api
Диагностика
# Проверить последнее выполнение cron sudo grep -i evolution /var/log/syslog | tail -5 # Проверить размер директории с данными du -sh /opt/evolution-api/ # Проверить доступность директории бекапов ls -la /opt/backups/evolution-api/ # Тест Docker команд cd /opt/evolution-api/ sudo docker-compose ps sudo docker-compose config # Проверить свободное место df -h /opt/backups/
Мониторинг производительности
# Посмотреть время выполнения последних бекапов grep "завершено успешно" /opt/backups/evolution-api/backup.log | tail -5 # Посмотреть размеры последних бекапов grep "Размер архива" /opt/backups/evolution-api/backup.log | tail -5 # Статистика по времени выполнения awk '/Начало резервного копирования/ {start=$1 " " $2} /завершено успешно/ {end=$1 " " $2; print "Start:", start, "End:", end}' /opt/backups/evolution-api/backup.log | tail -3
Дополнительная безопасность
Удаленное копирование бекапов
Для дополнительной безопасности настройте копирование бекапов на удаленный сервер:
# Добавьте в конец скрипта (перед exit 0): # Копирование на удаленный сервер rsync -avz --delete /opt/backups/evolution-api/ user@remote-server:/path/to/remote/backups/
Шифрование бекапов
Для шифрования бекапов используйте GPG:
# Замените создание архива в скрипте на: tar -czf - \ --exclude='*.log' \ --exclude='**/lost+found' \ store/ instances/ postgres_data/ redis_data/ docker-compose.yml | \ gpg --symmetric --cipher-algo AES256 --output "$BACKUP_PATH.gpg"
Заключение
После выполнения всех шагов у вас будет настроено автоматическое ежедневное резервное копирование Evolution API. Система будет:
- ✅ Автоматически создавать бекапы каждый день в 3:00
- ✅ Сохранять все критически важные данные
- ✅ Автоматически удалять старые бекапы
- ✅ Вести подробные логи операций
- ✅ Обеспечивать быстрое восстановление при необходимости
- ✅ Хранить бекапы в централизованной директории
/opt/backups/evolution-api/
💡 Рекомендация: Периодически тестируйте восстановление из бекапов на тестовой среде, чтобы убедиться в работоспособности системы резервного копирования.