vm:evolution_api:02-backup

Различия

Показаны различия между двумя версиями страницы.

Ссылка на это сравнение

Предыдущая версия справа и слева Предыдущая версия
Следующая версия
Предыдущая версия
vm:evolution_api:02-backup [2025/08/28 09:09] – ↷ Имя страницы vm:evolution_api:02backup изменено на vm:evolution_api:02-backup adminvm:evolution_api:02-backup [2025/08/29 09:01] (текущий) admin
Строка 1: Строка 1:
-====== Автоматическое резервное копирование Evolution API ======+====== Резервное копирование Evolution API ======
  
-===== Описание =====+===== Описание системы =====
  
-Данная инструкция описывает настройку автоматического ежедневного резервного копирования Evolution API с помощью bash скрипта и cron. Бекап выполняется каждый день в **3:00 утра** с временной остановкой сервисов.+Evolution API - это система для работы с WhatsApp Business API, развернутая в Docker контейнерах. Система состоит из: 
 +  * **evolution-api** - основное приложение API 
 +  * **evolution_postgres** - база данных PostgreSQL 15 
 +  * **redis** - кэш и хранилище сессий
  
-⚠️ **Важно:** Evolution API будет недоступен в течение 1-2 минут во время создания резервной копии.+<note important> 
 +Данная инструкция предназначена для систем с Evolution API, развернутой через Docker Compose в директории `/opt/evolution-api/`. 
 +</note>
  
-===== Что входит в резервную копию =====+===== Компоненты для резервного копирования =====
  
-  * **store/** - пользовательские данные Evolution API +Скрипт создает резервные копии следующих компонентов:
-  * **instances/** - инстансы и сессии WhatsApp +
-  * **postgres_data/** - база данных PostgreSQL +
-  * **redis_data/** - кеш Redis +
-  * **docker-compose.yml** - конфигурация контейнеров+
  
-===== Предварительные требования =====+^ Компонент ^ Описание ^ Расположение ^ 
 +| **store/** | Файлы и медиа сообщений | `/opt/evolution-api/store/` | 
 +| **instances/** | Конфигурации инстансов WhatsApp | `/opt/evolution-api/instances/` | 
 +| **postgres_data/** | Физические файлы базы данных | `/opt/evolution-api/postgres_data/` | 
 +| **redis_data/** | Данные Redis кэша | `/opt/evolution-api/redis_data/` | 
 +| **docker-compose.yml** | Конфигурация контейнеров | `/opt/evolution-api/docker-compose.yml` | 
 +| **database.sql** | SQL дамп базы данных | Создается автоматически |
  
-  * Docker и Docker Compose установлены +===== Требования =====
-  * Evolution API запущен в директории ''/opt/evolution-api/'' +
-  * Права root или sudo доступ +
-  * Достаточно места на диске для хранения бекапов+
  
-===== Шаг 1Создание директорий =====+==== Системные требования ==== 
 +  * **OS**Linux (тестировано на Ubuntu 20.04+) 
 +  * **Docker**: версия 20.10+ 
 +  * **Docker Compose**: версия 1.29+ 
 +  * **Свободное место**: минимум 2GB для бекапов 
 +  * **Права**: root или пользователь в группе docker
  
 +==== Необходимые пакеты ====
 <code bash> <code bash>
-Создайте директории для скрипта и бекапов +Ubuntu/Debian 
-sudo mkdir -p /opt/scripts +apt update && apt install -y curl tar gzip findutils
-sudo mkdir -p /opt/evolution-api/backups+
  
-Проверьте существование Evolution API +CentOS/RHEL 
-ls -la /opt/evolution-api/+yum install -y curl tar gzip findutils
 </code> </code>
  
-===== Шаг 2: Создание скрипта резервного копирования =====+===== Установка и настройка =====
  
-Создайте файл скрипта:+==== 1. Создание структуры директорий ====
  
 <code bash> <code bash>
-sudo nano /opt/scripts/evolution-backup.sh+# Создаем директории для скриптов и бекапов 
 +mkdir -p /opt/scripts 
 +mkdir -p /opt/backups/evolution-api 
 + 
 +# Устанавливаем права доступа 
 +chmod 750 /opt/scripts 
 +chmod 750 /opt/backups/evolution-api
 </code> </code>
  
-Скопируйте следующее содержимое в файл:+==== 2. Установка скрипта ====
  
-<file bash evolution-backup.sh+Создайте файл `/opt/scripts/evolution-backup.sh` и вставьте содержимое скрипта ниже.
-#!/bin/bash+
  
 +<code bash>
 +# Создаем скрипт
 +nano /opt/scripts/evolution-backup.sh
 +
 +# Делаем исполняемым
 +chmod +x /opt/scripts/evolution-backup.sh
 +
 +# Устанавливаем владельца (если нужно)
 +chown root:root /opt/scripts/evolution-backup.sh
 +</code>
 +
 +**Содержимое скрипта `/opt/scripts/evolution-backup.sh`:**
 +
 +<code bash>
 +#!/bin/bash
 + 
 # Скрипт резервного копирования Evolution API # Скрипт резервного копирования Evolution API
 # Запуск: /opt/scripts/evolution-backup.sh # Запуск: /opt/scripts/evolution-backup.sh
 + 
 # Настройки # Настройки
 COMPOSE_FILE="/opt/evolution-api/docker-compose.yml" COMPOSE_FILE="/opt/evolution-api/docker-compose.yml"
 EVOLUTION_DIR="/opt/evolution-api" EVOLUTION_DIR="/opt/evolution-api"
-BACKUP_DIR="/opt/evolution-api/backups"+BACKUP_DIR="/opt/backups/evolution-api"
 DATE=$(date +"%Y%m%d_%H%M%S") DATE=$(date +"%Y%m%d_%H%M%S")
 BACKUP_NAME="evolution_backup_${DATE}" BACKUP_NAME="evolution_backup_${DATE}"
-RETENTION_DAYS=30  # Храним бекапы 30 дней +RETENTION_DAYS=10  # Храним бекапы 10 дней 
 +  
 +# Настройки базы данных 
 +DB_CONTAINER="evolution_postgres" 
 +DB_USER="evolution_user" 
 +DB_PASSWORD="ВАШ_ПАРОЛЬ_БД"  # ⚠️ Замените на реальный пароль! 
 +DB_NAME="evolution_db" 
 + 
 # Логирование # Логирование
 LOG_FILE="${BACKUP_DIR}/backup.log" LOG_FILE="${BACKUP_DIR}/backup.log"
 + 
 # Функция логирования # Функция логирования
 log() { log() {
     echo "[$(date '+%Y-%m-%d %H:%M:%S')] $1" | tee -a "$LOG_FILE"     echo "[$(date '+%Y-%m-%d %H:%M:%S')] $1" | tee -a "$LOG_FILE"
 } }
 + 
 # Создаем директорию для бекапов если не существует # Создаем директорию для бекапов если не существует
 mkdir -p "$BACKUP_DIR" mkdir -p "$BACKUP_DIR"
 + 
 log "=== Начало резервного копирования Evolution API ===" log "=== Начало резервного копирования Evolution API ==="
 + 
 # Проверяем что compose файл существует # Проверяем что compose файл существует
 if [ ! -f "$COMPOSE_FILE" ]; then if [ ! -f "$COMPOSE_FILE" ]; then
Строка 75: Строка 111:
     exit 1     exit 1
 fi fi
 + 
 # Переходим в директорию с Evolution # Переходим в директорию с Evolution
 cd "$EVOLUTION_DIR" || { cd "$EVOLUTION_DIR" || {
Строка 81: Строка 117:
     exit 1     exit 1
 } }
 +
 +# Проверяем что контейнеры запущены
 +log "Проверяем статус контейнеров..."
 +if ! docker-compose -f "$COMPOSE_FILE" ps | grep -q "Up"; then
 +    log "ОШИБКА: Контейнеры не запущены! Запустите их перед созданием бекапа."
 +    exit 1
 +fi
 +
 +# Создаем дамп базы данных (пока контейнеры работают)
 +log "Создаем дамп базы данных..."
 +DB_DUMP_PATH="${BACKUP_DIR}/${BACKUP_NAME}_database.sql"
 +
 +# Экспортируем пароль для pg_dump
 +export PGPASSWORD="$DB_PASSWORD"
 +
 +docker exec "$DB_CONTAINER" pg_dump -U "$DB_USER" -d "$DB_NAME" --no-password --verbose > "$DB_DUMP_PATH" 2>> "$LOG_FILE"
 +
 +if [ $? -eq 0 ] && [ -s "$DB_DUMP_PATH" ]; then
 +    log "Дамп базы данных создан: $DB_DUMP_PATH"
 +    
 +    # Получаем размер дампа
 +    DB_DUMP_SIZE=$(du -h "$DB_DUMP_PATH" | cut -f1)
 +    log "Размер дампа БД: $DB_DUMP_SIZE"
 +else
 +    log "ОШИБКА: Не удалось создать дамп базы данных или файл пуст"
 +    rm -f "$DB_DUMP_PATH"
 +    exit 1
 +fi
 +
 +# Очищаем переменную окружения
 +unset PGPASSWORD
  
 # Останавливаем контейнеры # Останавливаем контейнеры
 log "Останавливаем контейнеры Evolution API..." log "Останавливаем контейнеры Evolution API..."
 docker-compose -f "$COMPOSE_FILE" down docker-compose -f "$COMPOSE_FILE" down
 + 
 if [ $? -eq 0 ]; then if [ $? -eq 0 ]; then
     log "Контейнеры успешно остановлены"     log "Контейнеры успешно остановлены"
Строка 92: Строка 159:
     exit 1     exit 1
 fi fi
 + 
 # Ждем пару секунд для полной остановки # Ждем пару секунд для полной остановки
 sleep 5 sleep 5
- +  
-# Создаем архив с данными+# Создаем архив с данными (включая дамп БД)
 log "Создаем архив данных..." log "Создаем архив данных..."
 BACKUP_PATH="${BACKUP_DIR}/${BACKUP_NAME}.tar.gz" BACKUP_PATH="${BACKUP_DIR}/${BACKUP_NAME}.tar.gz"
 + 
 tar -czf "$BACKUP_PATH" \ tar -czf "$BACKUP_PATH" \
     --exclude='*.log' \     --exclude='*.log' \
     --exclude='**/lost+found' \     --exclude='**/lost+found' \
 +    -C "$BACKUP_DIR" "${BACKUP_NAME}_database.sql" \
 +    -C "$EVOLUTION_DIR" \
     store/ \     store/ \
     instances/ \     instances/ \
Строка 108: Строка 177:
     redis_data/ \     redis_data/ \
     docker-compose.yml     docker-compose.yml
 + 
 if [ $? -eq 0 ]; then if [ $? -eq 0 ]; then
     log "Архив создан: $BACKUP_PATH"     log "Архив создан: $BACKUP_PATH"
-    + 
     # Получаем размер архива     # Получаем размер архива
     BACKUP_SIZE=$(du -h "$BACKUP_PATH" | cut -f1)     BACKUP_SIZE=$(du -h "$BACKUP_PATH" | cut -f1)
     log "Размер архива: $BACKUP_SIZE"     log "Размер архива: $BACKUP_SIZE"
 +    
 +    # Удаляем отдельный файл дампа, так как он теперь в архиве
 +    rm -f "$DB_DUMP_PATH"
 +    log "Отдельный файл дампа БД удален (включен в архив)"
 else else
     log "ОШИБКА: Не удалось создать архив"     log "ОШИБКА: Не удалось создать архив"
-    + 
     # Пытаемся запустить контейнеры даже при ошибке     # Пытаемся запустить контейнеры даже при ошибке
     log "Запускаем контейнеры после ошибки..."     log "Запускаем контейнеры после ошибки..."
Строка 123: Строка 196:
     exit 1     exit 1
 fi fi
 + 
 # Запускаем контейнеры обратно # Запускаем контейнеры обратно
 log "Запускаем контейнеры Evolution API..." log "Запускаем контейнеры Evolution API..."
 docker-compose -f "$COMPOSE_FILE" up -d docker-compose -f "$COMPOSE_FILE" up -d
 + 
 if [ $? -eq 0 ]; then if [ $? -eq 0 ]; then
     log "Контейнеры успешно запущены"     log "Контейнеры успешно запущены"
Строка 134: Строка 207:
     exit 1     exit 1
 fi fi
 + 
 # Ждем запуска сервисов # Ждем запуска сервисов
-sleep 10 +sleep 15 
 + 
 # Проверяем что все контейнеры работают # Проверяем что все контейнеры работают
 log "Проверяем статус контейнеров..." log "Проверяем статус контейнеров..."
-if docker-compose -f "$COMPOSE_FILE" ps | grep -"Up"; then +RUNNING_CONTAINERS=$(docker-compose -f "$COMPOSE_FILE" ps --services --filter "status=running" wc -l) 
-    log "Контейнеры работают корректно"+TOTAL_CONTAINERS=$(docker-compose -f "$COMPOSE_FILEps --services | wc -l) 
 + 
 +if [ "$RUNNING_CONTAINERS" -eq "$TOTAL_CONTAINERS" ]; then 
 +    log "Все контейнеры ($RUNNING_CONTAINERS/$TOTAL_CONTAINERS) работают корректно"
 else else
-    log "ПРЕДУПРЕЖДЕНИЕ: Некоторые контейнеры могут работать некорректно"+    log "ПРЕДУПРЕЖДЕНИЕ: Работают только $RUNNING_CONTAINERS из $TOTAL_CONTAINERS контейнеров"
 fi fi
  
 +# Проверяем доступность базы данных
 +log "Проверяем подключение к базе данных..."
 +export PGPASSWORD="$DB_PASSWORD"
 +if docker exec "$DB_CONTAINER" pg_isready -U "$DB_USER" -d "$DB_NAME" > /dev/null 2>&1; then
 +    log "База данных доступна и готова к работе"
 +else
 +    log "ПРЕДУПРЕЖДЕНИЕ: База данных может быть недоступна"
 +fi
 +unset PGPASSWORD
 + 
 # Удаляем старые бекапы # Удаляем старые бекапы
 log "Удаляем бекапы старше $RETENTION_DAYS дней..." log "Удаляем бекапы старше $RETENTION_DAYS дней..."
-find "$BACKUP_DIR" -name "evolution_backup_*.tar.gz" -mtime +$RETENTION_DAYS -delete +DELETED_COUNT=$(find "$BACKUP_DIR" -name "evolution_backup_*.tar.gz" -mtime +$RETENTION_DAYS -delete -print | wc -l) 
 +log "Удалено старых бекапов: $DELETED_COUNT" 
 + 
 # Показываем статистику бекапов # Показываем статистику бекапов
 BACKUP_COUNT=$(ls -1 "${BACKUP_DIR}"/evolution_backup_*.tar.gz 2>/dev/null | wc -l) BACKUP_COUNT=$(ls -1 "${BACKUP_DIR}"/evolution_backup_*.tar.gz 2>/dev/null | wc -l)
 +TOTAL_SIZE=$(du -sh "${BACKUP_DIR}" 2>/dev/null | cut -f1)
 log "Общее количество бекапов: $BACKUP_COUNT" log "Общее количество бекапов: $BACKUP_COUNT"
 +log "Общий размер папки бекапов: $TOTAL_SIZE"
  
 +# Получаем информацию о свободном месте на диске
 +BACKUP_DISK_USAGE=$(df -h "$BACKUP_DIR" | awk 'NR==2 {print $4 " свободно из " $2 " (" $5 " занято)"}')
 +ROOT_DISK_USAGE=$(df -h / | awk 'NR==2 {print $4 " свободно из " $2 " (" $5 " занято)"}')
 +
 +log "Свободное место на диске бекапов: $BACKUP_DISK_USAGE"
 +if [ "$BACKUP_DIR" != "/" ] && [ "$(df "$BACKUP_DIR" | awk 'NR==2 {print $1}')" != "$(df / | awk 'NR==2 {print $1}')" ]; then
 +    log "Свободное место на корневом диске: $ROOT_DISK_USAGE"
 +fi
 +
 +# Получаем процент заполнения диска с бекапами для предупреждений
 +BACKUP_DISK_PERCENT=$(df "$BACKUP_DIR" | awk 'NR==2 {print $5}' | sed 's/%//')
 +
 +if [ "$BACKUP_DISK_PERCENT" -gt 90 ]; then
 +    log "⚠️ ПРЕДУПРЕЖДЕНИЕ: Диск заполнен более чем на 90%!"
 +elif [ "$BACKUP_DISK_PERCENT" -gt 80 ]; then
 +    log "⚠️ ВНИМАНИЕ: Диск заполнен более чем на 80%"
 +fi
 + 
 log "=== Резервное копирование завершено успешно ===" log "=== Резервное копирование завершено успешно ==="
  
-# Отправляем уведомление (опционально) +# Формируем сообщение для Telegram 
-curl -s -X POST "https://api.telegram.org/bot<TOKEN>/sendMessage"+TELEGRAM_MESSAGE="✅ Evolution API backup completed 
-    -d chat_id="<CHAT_ID>" \ +📁 Backup: $BACKUP_NAME ($BACKUP_SIZE) 
-    -d text="✅ Evolution API backup completed: $BACKUP_NAME ($BACKUP_SIZE)"+💾 DB dump: $DB_DUMP_SIZE   
 +📊 Total backups: $BACKUP_COUNT 
 +💿 Disk space: $BACKUP_DISK_USAGE" 
 + 
 +# Добавляем предупреждение о месте, если нужно 
 +if [ "$BACKUP_DISK_PERCENT" -gt 90 ]; then 
 +    TELEGRAM_MESSAGE="$TELEGRAM_MESSAGE 
 +⚠️ WARNING: Disk >90% full!" 
 +elif [ "$BACKUP_DISK_PERCENT" -gt 80 ]; then 
 +    TELEGRAM_MESSAGE="$TELEGRAM_MESSAGE 
 +⚠️ ATTENTION: Disk >80% full" 
 +fi 
 + 
 +# Отправляем уведомление в Telegram (опционально) 
 +curl -s -X POST "https://api.telegram.org/botВАШ_ТОКЕН_БОТА/sendMessage"
 +     -d chat_id="ВАШ_CHAT_ID" \ 
 +     -d text="$TELEGRAM_MESSAGE> /dev/null
  
 exit 0 exit 0
-</file>+</code>
  
-===== Шаг 3Настройка прав доступа =====+==== 3Настройка переменных ==== 
 + 
 +После создания скрипта обязательно отредактируйте следующие переменные:
  
 <code bash> <code bash>
-Сделайте скрипт исполняемым +Основные настройки (проверьте пути под вашу систему) 
-sudo chmod +x /opt/scripts/evolution-backup.sh+COMPOSE_FILE="/opt/evolution-api/docker-compose.yml"  # Путь к docker-compose.yml 
 +EVOLUTION_DIR="/opt/evolution-api"                    # Директория Evolution API 
 +BACKUP_DIR="/opt/backups/evolution-api"              # Директория для бекапов 
 +RETENTION_DAYS=10                                     # Срок хранения бекапов
  
-Проверьте права доступа +⚠️ ОБЯЗАТЕЛЬНО ИЗМЕНИТЕ эти параметры безопасности: 
-ls -la /opt/scripts/evolution-backup.sh+DB_PASSWORD="ВАШ_ПАРОЛЬ_БД"        # Пароль от PostgreSQL (из docker-compose.yml) 
 +curl ... "botВАШ_ТОКЕН_БОТА" ...   # Токен Telegram бота 
 +chat_id="ВАШ_CHAT_ID"             # Ваш Telegram chat_id
 </code> </code>
  
-===== Шаг 4: Тестирование скрипта =====+<note warning> 
 +**Безопасность**: Обязательно замените все плейсхолдеры на реальные значения! Пароль должен совпадать с `POSTGRES_PASSWORD` из вашего `docker-compose.yml`. 
 +</note>
  
-⚠️ **Внимание:** Тестирование временно остановит Evolution API на 1-2 минуты.+==== 4. Настройка Telegram уведомлений (опционально) ====
  
-<code bash> +Для получения уведомлений о результатах резервного копирования:
-# Запустите тестовое резервное копирование +
-sudo /opt/scripts/evolution-backup.sh+
  
-# Проверьте создание бекапа +  - Создайте Telegram бота через [@BotFather](https://t.me/botfather) 
-ls -la /opt/evolution-api/backups/+  - Получите токен бота 
 +  - Узнайте ваш chat_id (можно использовать [@userinfobot](https://t.me/userinfobot)) 
 +  - Замените токен и chat_id в конце скрипта
  
-Посмотрите логи +<code bash> 
-cat /opt/evolution-api/backups/backup.log+Замените эти значения на свои 
 +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)"
 </code> </code>
  
-**Ожидаемый результат:** +===== Использование скрипта =====
-<code> +
-/opt/evolution-api/backups/ +
-├── evolution_backup_20240828_123456.tar.gz +
-└── backup.log +
-</code>+
  
-===== Шаг 5: Настройка автоматического запуска (cron) ====+==== Ручной запуск ====
- +
-Откройте crontab для root:+
  
 <code bash> <code bash>
-sudo crontab -e+# Запуск с выводом в консоль 
 +/opt/scripts/evolution-backup.sh 
 + 
 +# Запуск в фоновом режиме 
 +nohup /opt/scripts/evolution-backup.sh > /dev/null 2>&1 &
 </code> </code>
  
-Добавьте следующую строку в конец файла:+==== Автоматический запуск через Cron ====
  
-<code> +<code bash
-# Резервное копирование Evolution API каждый день в 3:00+# Редактируем crontab 
 +crontab -e 
 + 
 +# Добавляем задание (например, каждый день в 3:00 ночи)
 0 3 * * * /opt/scripts/evolution-backup.sh >/dev/null 2>&1 0 3 * * * /opt/scripts/evolution-backup.sh >/dev/null 2>&1
 +
 +# Или с логированием cron ошибок
 +0 3 * * * /opt/scripts/evolution-backup.sh 2>> /var/log/evolution-backup-cron.log
 </code> </code>
  
-Сохраните и выйдите из редактора.+**Примеры расписаний Cron:** 
 +  * `0 3 * * *` - каждый день в 3:00 
 +  * `0 2 * * 0` - каждое воскресенье в 2:00 
 +  * `0 1 1 * *` - 1 числа каждого месяца в 1:00 
 +  * `0 */6 * * *` - каждые 6 часов
  
-===== Шаг 6: Проверка настройки cron =====+===== Процесс резервного копирования =====
  
-<code bash> +Скрипт выполняет следующие операции:
-# Проверьте что задача добавлена +
-sudo crontab -l+
  
-Проверьте статус службы cron +  - **Проверка окружения** - проверяет наличие файлов и запущенные контейнеры 
-sudo systemctl status cron+  - **Создание SQL дампа** - создает дамп базы данных PostgreSQL 
 +  - **Остановка контейнеров** - корректно останавливает все сервисы 
 +  - **Создание архива** - упаковывает все данные в tar.gz 
 +  - **Запуск контейнеров** - восстанавливает работу системы 
 +  - **Проверка состояния** - проверяет что все сервисы запустились 
 +  - **Очистка старых бекапов** - удаляет файлы старше указанного срока 
 +  - **Отправка уведомлений** - отправляет статус в Telegram
  
-# Убедитесь что cron запущен +<note> 
-sudo systemctl enable cron +**Время простоя**: Обычно система недоступна 30-60 секунд во время создания бекапа. 
-sudo systemctl start cron +</note>
-</code>+
  
-===== Структура файлов после установки =====+==== Мониторинг дискового пространства ====
  
-<code> +Скрипт автоматически отслеживает состояние дискового пространства:
-/opt/ +
-├── scripts/ +
-│   └── evolution-backup.sh +
-└── evolution-api/ +
-    ├── docker-compose.yml +
-    ├── store/ +
-    ├── instances/ +
-    ├── postgres_data/ +
-    ├── redis_data/ +
-    └── backups/ +
-        ├── evolution_backup_20240828_030001.tar.gz +
-        ├── evolution_backup_20240829_030001.tar.gz +
-        └── backup.log +
-</code>+
  
-===== Мониторинг и управление бекапами ===== +^ Уровень заполнения ^ Действие ^ Сообщение ^ 
- +| < 80% | Нормальная работа | Информация в логе | 
-==== Проверка последнего бекапа ====+| 80-90% | Предупреждение | "⚠️ ВНИМАНИЕ: Диск заполнен более чем на 80%" | 
 +| > 90% | Критическое предупреждение | "⚠️ ПРЕДУПРЕЖДЕНИЕ: Диск заполнен более чем на 90%!" |
  
 <code bash> <code bash>
-# Показать последний созданный бекап +# Проверка свободного места вручную 
-ls -lt /opt/evolution-api/backups/evolution_backup_*.tar.gz | head -1+df -/opt/backups/evolution-api
  
-# Размеры всех бекапов +# Расчет размера всех бекапов 
-du -sh /opt/evolution-api/backups/evolution_backup_*.tar.gz+du -sh /opt/backups/evolution-api/* 
 + 
 +# Принудительная очистка старых бекапов (осторожно!) 
 +find /opt/backups/evolution-api -name "evolution_backup_*.tar.gz" -mtime +7 -delete
 </code> </code>
 +
 +**Рекомендации по управлению дисковым пространством:**
 +  * При заполнении > 80% - рассмотрите уменьшение срока хранения бекапов
 +  * При заполнении > 90% - немедленно очистите старые бекапы или увеличьте дисковое пространство
 +  * Настройте отдельный диск для бекапов, если это критично
 +
 +===== Мониторинг и логи =====
  
 ==== Просмотр логов ==== ==== Просмотр логов ====
  
 <code bash> <code bash>
-# Последние 20 строк лога +# Последние 50 строк лога 
-tail -20 /opt/evolution-api/backups/backup.log+tail -50 /opt/backups/evolution-api/backup.log
  
-Поиск ошибок в логах +Мониторинг в реальном времени 
-grep "ОШИБКА" /opt/evolution-api/backups/backup.log+tail -f /opt/backups/evolution-api/backup.log 
 + 
 +# Логи за сегодня 
 +grep "$(date '+%Y-%m-%d')" /opt/backups/evolution-api/backup.log
 </code> </code>
  
-==== Очистка старых бекапов ====+==== Проверка статуса бекапов ====
  
 <code bash> <code bash>
-Удалить бекапы старше 30 дней вручную +Список всех бекапов 
-find /opt/evolution-api/backups/ -name "evolution_backup_*.tar.gz-mtime +30 -delete+ls -lah /opt/backups/evolution-api/evolution_backup_*.tar.gz 
 + 
 +# Размер директории бекапов 
 +du -sh /opt/backups/evolution-api/
  
-# Показать количество бекапов +# Последний успешный бекап 
-ls -/opt/evolution-api/backups/evolution_backup_*.tar.gz | wc -l+grep "завершено успешно" /opt/backups/evolution-api/backup.log | tail -1 
 +</code> 
 + 
 +==== Настройка ротации логов ==== 
 + 
 +<code bash> 
 +# Создаем конфиг для logrotate 
 +cat > /etc/logrotate.d/evolution-backup << EOF 
 +/opt/backups/evolution-api/backup.log { 
 +    weekly 
 +    rotate 8 
 +    compress 
 +    delaycompress 
 +    notifempty 
 +    create 644 root root 
 +
 +EOF
 </code> </code>
  
 ===== Восстановление из резервной копии ===== ===== Восстановление из резервной копии =====
  
-🚨 **ОСТОРОЖНО:** Восстановление полностью заменит текущие данные!+==== Полное восстановление системы ====
  
-==== Шаги восстановления ====+<note warning> 
 +**Внимание!** Процедура восстановления полностью заменит текущие данные. Убедитесь что система остановлена. 
 +</note>
  
-1. **Остановите Evolution API:** 
 <code bash> <code bash>
-cd /opt/evolution-api/ +# 1. Останавливаем Evolution API 
-sudo docker-compose down +cd /opt/evolution-api 
-</code>+docker-compose down
  
-2. **Сделайте резервную копию текущих данных (опционально):** +2. Создаем резервную копию текущих данных (на всякий случай
-<code bash> +mv store store_backup_$(date +%Y%m%d) 
-sudo mv store store_old_$(date +%Y%m%d) +mv instances instances_backup_$(date +%Y%m%d) 
-sudo mv instances instances_old_$(date +%Y%m%d) +mv postgres_data postgres_data_backup_$(date +%Y%m%d) 
-sudo mv postgres_data postgres_data_old_$(date +%Y%m%d) +mv redis_data redis_data_backup_$(date +%Y%m%d)
-sudo mv redis_data redis_data_old_$(date +%Y%m%d) +
-</code>+
  
-3. **Восстановите данные из архива:** +3. Распаковываем бекап 
-<code bash> +cd /opt/evolution-api 
-# Выберите нужный бекап +tar -xzf /opt/backups/evolution-api/evolution_backup_YYYYMMDD_HHMMSS.tar.gz
-ls -la /opt/evolution-api/backups/evolution_backup_*.tar.gz+
  
-Распакуйте архив (замените YYYYMMDD_HHMMSS на нужную дату) +4. Запускаем контейнеры 
-sudo tar -xzf /opt/evolution-api/backups/evolution_backup_YYYYMMDD_HHMMSS.tar.gz +docker-compose up -d
-</code>+
  
-4**Запустите Evolution API:** +# 5Ждем запуска и проверяем 
-<code bash> +sleep 15 
-sudo docker-compose up -d+docker-compose ps
 </code> </code>
  
-5. **Проверьте работоспособность:**+==== Восстановление только базы данных ==== 
 <code bash> <code bash>
-sudo docker-compose ps +# 1. Распаковываем дамп из архива 
-sudo docker-compose logs -+cd /tmp 
-</code>+tar -xzf /opt/backups/evolution-api/evolution_backup_YYYYMMDD_HHMMSS.tar.gz evolution_backup_YYYYMMDD_HHMMSS_database.sql
  
-===== Настройки и оптимизация =====+# 2. Восстанавливаем базу данных 
 +cd /opt/evolution-api 
 +export PGPASSWORD="Fd6ffgdkF98hGf69" 
 +docker exec -i evolution_postgres psql -U evolution_user -d evolution_db < /tmp/evolution_backup_YYYYMMDD_HHMMSS_database.sql 
 + 
 +# 3. Перезапускаем API для применения изменений 
 +docker-compose restart evolution-api 
 +</code>
  
-==== Изменение времени запуска ====+===== Решение проблем =====
  
-Для изменения времени запуска отредактируйте crontab:+==== Частые ошибки и решения ====
  
 +**Ошибка: "Контейнеры не запущены!"**
 <code bash> <code bash>
-sudo crontab -e+# Решение: Запустите контейнеры перед созданием бекапа 
 +cd /opt/evolution-api 
 +docker-compose up -d
 </code> </code>
  
-**Примеры расписания:** +**Ошибка: "Не удалось создать дамп базы данных"** 
-<code> +<code bash
-Каждый день в 2:30 +Проверяем статус PostgreSQL 
-30 2 * * * /opt/scripts/evolution-backup.sh+docker exec evolution_postgres pg_isready -U evolution_user
  
-Каждое воскресенье в 4:00 +Проверяем логи PostgreSQL 
-0 4 * * 0 /opt/scripts/evolution-backup.sh+docker logs evolution_postgres
  
-Дважды в день (6:00 и 18:00) +Проверяем подключение 
-0 6,18 * * * /opt/scripts/evolution-backup.sh+docker exec evolution_postgres psql -U evolution_user -d evolution_db -c "SELECT version();"
 </code> </code>
  
-==== Настройка уведомлений ==== +**Ошибка: "Permission denied" при доступе к файлам**
- +
-Для получения уведомлений в Telegram раскомментируйте и настройте строки в конце скрипта+
 <code bash> <code bash>
-# Получите токен бота и ID чата +# Проверяем и исправляем права 
-# Раскомментируйте и настройте: +sudo chown -R $(whoami):$(whoami) /opt/evolution-api/ 
-curl -s -X POST "https://api.telegram.org/bot<ВАШ_ТОКЕН>/sendMessage" \ +sudo chmod -R 755 /opt/evolution-api/
-    -d chat_id="<ВАШ_CHAT_ID>"+
-    -d text="✅ Evolution API backup completed: $BACKUP_NAME ($BACKUP_SIZE)"+
 </code> </code>
  
-==== Изменение периода хранения ==== +**Контейнеры не запускаются после бекапа**
- +
-Отредактируйте переменную в скрипте: +
 <code bash> <code bash>
-Хранить бекапы 60 дней +Проверяем логи Docker 
-RETENTION_DAYS=60+docker-compose logs
  
-Хранить бекапы 7 дней +Принудительно пересоздаем контейнеры 
-RETENTION_DAYS=7+docker-compose down 
 +docker-compose up -d --force-recreate
 </code> </code>
  
-===== Устранение неисправностей =====+==== Проверка целостности бекапов ====
  
-==== Частые проблемы ====+<code bash> 
 +# Тест архива на целостность 
 +tar -tzf /opt/backups/evolution-api/evolution_backup_YYYYMMDD_HHMMSS.tar.gz > /dev/null && echo "OK" || echo "CORRUPTED"
  
-**1. Скрипт не запускается:** +Проверка размера бекапа (должен быть больше 1MB) 
-  * Проверьте права доступа: ''sudo chmod +x /opt/scripts/evolution-backup.sh'' +if [ $(stat -f%z /opt/backups/evolution-api/evolution_backup_YYYYMMDD_HHMMSS.tar.gz) -gt 1048576 ]; then 
-  * Проверьте пути в скрипте +    echo "Размер бекапа нормальный" 
-  * Убедитесь что Docker запущен: ''sudo systemctl status docker''+else 
 +    echo "Подозрительно маленький размер бекапа" 
 +fi 
 +</code>
  
-**2. Контейнеры не останавливаются:** +==== Тестирование восстановления ====
-  * Проверьте что путь к docker-compose.yml правильный +
-  * Убедитесь что файл существует: ''ls -la /opt/evolution-api/docker-compose.yml''+
  
-**3. Недостаточно места для бекапов:** +Рекомендуется периодически тестировать процедуру восстановления:
-  * Проверьте свободное место: ''df -h /opt/evolution-api/backups/'' +
-  * Уменьшите период хранения бекапов +
-  * Настройте ротацию логов +
- +
-**4. Cron не запускается:** +
-  * Проверьте статус: ''sudo systemctl status cron'' +
-  * Проверьте синтаксис crontab: ''sudo crontab -l'' +
-  * Посмотрите системные логи: ''sudo journalctl -u cron'' +
- +
-==== Диагностика ====+
  
 <code bash> <code bash>
-Проверить последнее выполнение cron +Создаем тестовую среду 
-sudo grep -i evolution /var/log/syslog | tail -5+mkdir -/tmp/evolution-test 
 +cd /tmp/evolution-test
  
-Проверить размер директории с данными +Распаковываем последний бекап 
-du -sh /opt/evolution-api/+tar -xzf /opt/backups/evolution-api/evolution_backup_$(ls -t /opt/backups/evolution-api/evolution_backup_*.tar.gz | head -1 | cut -d'/' -f5)
  
-# Тест Docker команд +Проверяем содержимое 
-cd /opt/evolution-api/ +ls -la 
-sudo docker-compose ps +echo "Тест восстановления завершен. Проверьте содержимое папки /tmp/evolution-test"
-sudo docker-compose config+
 </code> </code>
  
-===== Заключение =====+===== Рекомендации по безопасности ===== 
 + 
 +  * **Шифрование бекапов**: Рассмотрите использование GPG для шифрования архивов 
 +  * **Удаленное хранение**: Копируйте бекапы на удаленный сервер или облачное хранилище 
 +  * **Мониторинг доступа**: Следите за доступом к директории с бекапами 
 +  * **Регулярное тестирование**: Тестируйте восстановление минимум раз в месяц 
 +  * **Документирование изменений**: Ведите журнал всех изменений в системе 
 + 
 +===== Контакты и поддержка =====
  
-После выполнения всех шагов у вас будет настроено автоматическое ежедневное резервное копирование Evolution API. Система будет:+При возникновении проблем с резервным копированием:
  
-  * ✅ Автоматически создавать бекапы каждый день в 3:00 +  - Проверьте логи: `/opt/backups/evolution-api/backup.log` 
-  * ✅ Сохранять все критически важные данные +  - Проверьте системные ресурсы: `df -h` и `free -h` 
-  * ✅ Автоматически удалять старые бекапы +  - Обратитесь к системному администратору 
-  * ✅ Вести подробные логи операций +  - Создайте issue в системе отслеживания задач
-  * ✅ Обеспечивать быстрое восстановление при необходимости+
  
-💡 **Рекомендация:** Периодически тестируйте восстановление из бекапов на тестовой среде, чтобы убедиться в работоспособности системы резервного копирования.+--- 
 +//Документ создан: {{ CURRENT_DATE }} | Версия: 1.0 | Автор: System Admin//
  • vm/evolution_api/02-backup.1756372198.txt.gz
  • Последнее изменение: 2025/08/28 09:09
  • admin