Различия
Показаны различия между двумя версиями страницы.
| Предыдущая версия справа и слева Предыдущая версия Следующая версия | Предыдущая версия | ||
| vm:evolution_api:02-backup [2025/08/28 09:09] – ↷ Имя страницы vm:evolution_api:02backup изменено на vm:evolution_api:02-backup admin | vm:evolution_api:02-backup [2025/08/29 09:01] (текущий) – admin | ||
|---|---|---|---|
| Строка 1: | Строка 1: | ||
| - | ====== | + | ====== |
| - | ===== Описание ===== | + | ===== Описание |
| - | Данная | + | Evolution API - это система для |
| + | * **evolution-api** - основное приложение API | ||
| + | * **evolution_postgres** - база данных PostgreSQL 15 | ||
| + | | ||
| - | ⚠️ **Важно:** Evolution API будет | + | <note important> |
| + | Данная инструкция | ||
| + | </ | ||
| - | ===== Что входит в резервную копию ===== | + | ===== Компоненты для |
| - | * **store/** - пользовательские данные | + | Скрипт создает резервные |
| - | * **instances/ | + | |
| - | * **postgres_data/ | + | |
| - | * **redis_data/ | + | |
| - | * **docker-compose.yml** - конфигурация контейнеров | + | |
| - | ===== Предварительные | + | ^ Компонент ^ Описание ^ Расположение ^ |
| + | | **store/** | Файлы и медиа сообщений | `/ | ||
| + | | **instances/ | ||
| + | | **postgres_data/ | ||
| + | | **redis_data/ | ||
| + | | **docker-compose.yml** | Конфигурация контейнеров | `/ | ||
| + | | **database.sql** | SQL дамп базы данных | Создается автоматически | | ||
| - | * Docker и Docker Compose установлены | + | ===== Требования |
| - | * Evolution API запущен в директории ''/ | + | |
| - | * Права root или sudo доступ | + | |
| - | * Достаточно места на диске для хранения бекапов | + | |
| - | ===== Шаг 1: Создание директорий ===== | + | ==== Системные требования ==== |
| + | * **OS**: Linux (тестировано на Ubuntu 20.04+) | ||
| + | * **Docker**: версия 20.10+ | ||
| + | * **Docker Compose**: версия 1.29+ | ||
| + | * **Свободное место**: | ||
| + | * **Права**: root или пользователь в группе docker | ||
| + | ==== Необходимые пакеты ==== | ||
| <code bash> | <code bash> | ||
| - | # Создайте директории для скрипта и бекапов | + | # Ubuntu/Debian |
| - | sudo mkdir -p /opt/scripts | + | apt update && apt install |
| - | sudo mkdir -p / | + | |
| - | # Проверьте существование Evolution API | + | # CentOS/RHEL |
| - | ls -la / | + | yum install |
| </ | </ | ||
| - | ===== Шаг 2: Создание скрипта резервного копирования | + | ===== Установка и настройка ===== |
| - | Создайте файл | + | ==== 1. Создание структуры директорий ==== |
| <code bash> | <code bash> | ||
| - | sudo nano / | + | # Создаем директории для скриптов и бекапов |
| + | mkdir -p / | ||
| + | mkdir -p / | ||
| + | |||
| + | # Устанавливаем права доступа | ||
| + | chmod 750 / | ||
| + | chmod 750 / | ||
| </ | </ | ||
| - | Скопируйте следующее | + | ==== 2. Установка скрипта ==== |
| - | <file bash evolution-backup.sh> | + | Создайте файл `/ |
| - | #!/bin/bash | + | |
| + | <code bash> | ||
| + | # Создаем скрипт | ||
| + | nano / | ||
| + | |||
| + | # Делаем исполняемым | ||
| + | chmod +x / | ||
| + | |||
| + | # Устанавливаем владельца (если нужно) | ||
| + | chown root:root / | ||
| + | </ | ||
| + | |||
| + | **Содержимое скрипта `/ | ||
| + | |||
| + | <code bash> | ||
| + | #!/bin/bash | ||
| + | |||
| # Скрипт резервного копирования Evolution API | # Скрипт резервного копирования Evolution API | ||
| # Запуск: | # Запуск: | ||
| + | |||
| # Настройки | # Настройки | ||
| COMPOSE_FILE="/ | COMPOSE_FILE="/ | ||
| EVOLUTION_DIR="/ | EVOLUTION_DIR="/ | ||
| - | BACKUP_DIR="/ | + | BACKUP_DIR="/ |
| DATE=$(date +" | DATE=$(date +" | ||
| BACKUP_NAME=" | BACKUP_NAME=" | ||
| - | RETENTION_DAYS=30 # Храним бекапы | + | RETENTION_DAYS=10 # Храним бекапы |
| + | |||
| + | # Настройки базы данных | ||
| + | DB_CONTAINER=" | ||
| + | DB_USER=" | ||
| + | DB_PASSWORD=" | ||
| + | DB_NAME=" | ||
| + | |||
| # Логирование | # Логирование | ||
| LOG_FILE=" | LOG_FILE=" | ||
| + | |||
| # Функция логирования | # Функция логирования | ||
| log() { | log() { | ||
| echo " | echo " | ||
| } | } | ||
| + | |||
| # Создаем директорию для бекапов если не существует | # Создаем директорию для бекапов если не существует | ||
| mkdir -p " | mkdir -p " | ||
| + | |||
| log "=== Начало резервного копирования Evolution API ===" | log "=== Начало резервного копирования Evolution API ===" | ||
| + | |||
| # Проверяем что compose файл существует | # Проверяем что compose файл существует | ||
| if [ ! -f " | if [ ! -f " | ||
| Строка 75: | Строка 111: | ||
| exit 1 | exit 1 | ||
| fi | fi | ||
| + | |||
| # Переходим в директорию с Evolution | # Переходим в директорию с Evolution | ||
| cd " | cd " | ||
| Строка 81: | Строка 117: | ||
| exit 1 | exit 1 | ||
| } | } | ||
| + | |||
| + | # Проверяем что контейнеры запущены | ||
| + | log " | ||
| + | if ! docker-compose -f " | ||
| + | log " | ||
| + | exit 1 | ||
| + | fi | ||
| + | |||
| + | # Создаем дамп базы данных (пока контейнеры работают) | ||
| + | log " | ||
| + | DB_DUMP_PATH=" | ||
| + | |||
| + | # Экспортируем пароль для pg_dump | ||
| + | export PGPASSWORD=" | ||
| + | |||
| + | docker exec " | ||
| + | |||
| + | if [ $? -eq 0 ] && [ -s " | ||
| + | log " | ||
| + | | ||
| + | # Получаем размер дампа | ||
| + | DB_DUMP_SIZE=$(du -h " | ||
| + | log " | ||
| + | else | ||
| + | log " | ||
| + | rm -f " | ||
| + | exit 1 | ||
| + | fi | ||
| + | |||
| + | # Очищаем переменную окружения | ||
| + | unset PGPASSWORD | ||
| # Останавливаем контейнеры | # Останавливаем контейнеры | ||
| log " | log " | ||
| docker-compose -f " | docker-compose -f " | ||
| + | |||
| 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_PATH=" | ||
| + | |||
| tar -czf " | tar -czf " | ||
| --exclude=' | --exclude=' | ||
| --exclude=' | --exclude=' | ||
| + | -C " | ||
| + | -C " | ||
| 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 " | log " | ||
| - | | + | |
| # Получаем размер архива | # Получаем размер архива | ||
| BACKUP_SIZE=$(du -h " | BACKUP_SIZE=$(du -h " | ||
| log " | log " | ||
| + | | ||
| + | # Удаляем отдельный файл дампа, так как он теперь в архиве | ||
| + | rm -f " | ||
| + | log " | ||
| else | else | ||
| log " | log " | ||
| - | | + | |
| # Пытаемся запустить контейнеры даже при ошибке | # Пытаемся запустить контейнеры даже при ошибке | ||
| log " | log " | ||
| Строка 123: | Строка 196: | ||
| exit 1 | exit 1 | ||
| fi | fi | ||
| + | |||
| # Запускаем контейнеры обратно | # Запускаем контейнеры обратно | ||
| log " | log " | ||
| docker-compose -f " | docker-compose -f " | ||
| + | |||
| 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 " | + | RUNNING_CONTAINERS=$(docker-compose -f " |
| - | log "Контейнеры работают корректно" | + | TOTAL_CONTAINERS=$(docker-compose -f "$COMPOSE_FILE" |
| + | |||
| + | if [ " | ||
| + | log "Все контейнеры | ||
| else | else | ||
| - | log " | + | log " |
| fi | fi | ||
| + | # Проверяем доступность базы данных | ||
| + | log " | ||
| + | export PGPASSWORD=" | ||
| + | if docker exec " | ||
| + | log " | ||
| + | else | ||
| + | log " | ||
| + | fi | ||
| + | unset PGPASSWORD | ||
| + | |||
| # Удаляем старые бекапы | # Удаляем старые бекапы | ||
| log " | log " | ||
| - | find " | + | DELETED_COUNT=$(find " |
| + | log " | ||
| + | |||
| # Показываем статистику бекапов | # Показываем статистику бекапов | ||
| BACKUP_COUNT=$(ls -1 " | BACKUP_COUNT=$(ls -1 " | ||
| + | TOTAL_SIZE=$(du -sh " | ||
| log " | log " | ||
| + | log " | ||
| + | # Получаем информацию о свободном месте на диске | ||
| + | BACKUP_DISK_USAGE=$(df -h " | ||
| + | ROOT_DISK_USAGE=$(df -h / | awk 'NR==2 {print $4 " свободно из " $2 " (" $5 " занято)" | ||
| + | |||
| + | log " | ||
| + | if [ " | ||
| + | log " | ||
| + | fi | ||
| + | |||
| + | # Получаем процент заполнения диска с бекапами для предупреждений | ||
| + | BACKUP_DISK_PERCENT=$(df " | ||
| + | |||
| + | if [ " | ||
| + | log " | ||
| + | elif [ " | ||
| + | log " | ||
| + | fi | ||
| + | |||
| log "=== Резервное копирование завершено успешно ===" | log "=== Резервное копирование завершено успешно ===" | ||
| - | # Отправляем уведомление (опционально) | + | # Формируем сообщение для Telegram |
| - | # curl -s -X POST " | + | TELEGRAM_MESSAGE=" |
| - | # -d chat_id=" | + | 📁 Backup: $BACKUP_NAME ($BACKUP_SIZE) |
| - | # -d text="✅ Evolution API backup completed: | + | 💾 DB dump: $DB_DUMP_SIZE |
| + | 📊 Total backups: $BACKUP_COUNT | ||
| + | 💿 Disk space: $BACKUP_DISK_USAGE" | ||
| + | |||
| + | # Добавляем предупреждение о месте, если нужно | ||
| + | if [ " | ||
| + | TELEGRAM_MESSAGE=" | ||
| + | ⚠️ WARNING: Disk >90% full!" | ||
| + | elif [ " | ||
| + | TELEGRAM_MESSAGE=" | ||
| + | ⚠️ ATTENTION: Disk >80% full" | ||
| + | fi | ||
| + | |||
| + | # Отправляем уведомление | ||
| + | curl -s -X POST " | ||
| + | -d chat_id=" | ||
| + | -d text=" | ||
| exit 0 | exit 0 | ||
| - | </file> | + | </code> |
| - | ===== Шаг | + | ==== 3. Настройка переменных ==== |
| + | |||
| + | После создания скрипта обязательно отредактируйте следующие | ||
| <code bash> | <code bash> | ||
| - | # Сделайте | + | # Основные настройки (проверьте пути под вашу систему) |
| - | sudo chmod +x /opt/scripts/evolution-backup.sh | + | COMPOSE_FILE=" |
| + | EVOLUTION_DIR="/ | ||
| + | BACKUP_DIR="/ | ||
| + | RETENTION_DAYS=10 | ||
| - | # Проверьте права доступа | + | # ⚠️ ОБЯЗАТЕЛЬНО ИЗМЕНИТЕ эти параметры безопасности: |
| - | ls -la / | + | DB_PASSWORD=" |
| + | curl ... " | ||
| + | chat_id=" | ||
| </ | </ | ||
| - | ===== Шаг 4: Тестирование скрипта | + | <note warning> |
| + | **Безопасность**: Обязательно замените все плейсхолдеры на реальные значения! Пароль должен совпадать с `POSTGRES_PASSWORD` из вашего `docker-compose.yml`. | ||
| + | </ | ||
| - | ⚠️ **Внимание:** Тестирование | + | ==== 4. Настройка Telegram уведомлений (опционально) ==== |
| - | <code bash> | + | Для |
| - | # Запустите тестовое резервное копирование | + | |
| - | sudo / | + | |
| - | # Проверьте создание | + | - Создайте Telegram бота через [@BotFather](https:// |
| - | ls -la / | + | - Получите токен бота |
| + | - Узнайте ваш chat_id (можно использовать [@userinfobot](https:// | ||
| + | - Замените токен и chat_id в конце скрипта | ||
| - | # Посмотрите | + | <code bash> |
| - | cat /opt/evolution-api/backups/backup.log | + | # Замените |
| + | curl -s -X POST " | ||
| + | -d chat_id=" | ||
| + | -d text=" | ||
| </ | </ | ||
| - | **Ожидаемый | + | ===== Использование скрипта ===== |
| - | < | + | |
| - | / | + | |
| - | ├── evolution_backup_20240828_123456.tar.gz | + | |
| - | └── backup.log | + | |
| - | </ | + | |
| - | ===== Шаг 5: Настройка автоматического | + | ==== Ручной запуск ==== |
| - | + | ||
| - | Откройте crontab для root: | + | |
| <code bash> | <code bash> | ||
| - | sudo crontab | + | # Запуск с выводом в консоль |
| + | / | ||
| + | |||
| + | # Запуск в фоновом режиме | ||
| + | nohup / | ||
| </ | </ | ||
| - | Добавьте следующую строку в конец файла: | + | ==== Автоматический запуск |
| - | < | + | < |
| - | # Резервное | + | # Редактируем crontab |
| + | crontab -e | ||
| + | |||
| + | # Добавляем задание | ||
| 0 3 * * * / | 0 3 * * * / | ||
| + | |||
| + | # Или с логированием cron ошибок | ||
| + | 0 3 * * * / | ||
| </ | </ | ||
| - | Сохраните и выйдите из редактора. | + | **Примеры расписаний 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 запущен | + | < |
| - | sudo systemctl enable cron | + | **Время простоя**: |
| - | sudo systemctl start cron | + | </note> |
| - | </code> | + | |
| - | ===== Структура файлов после установки ===== | + | ==== Мониторинг дискового |
| - | < | + | Скрипт автоматически отслеживает состояние дискового пространства: |
| - | /opt/ | + | |
| - | ├── scripts/ | + | |
| - | │ | + | |
| - | └── 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 | + | |
| - | </ | + | |
| - | ===== Мониторинг и управление бекапами | + | ^ Уровень заполнения ^ Действие ^ Сообщение ^ |
| - | + | | < 80% | Нормальная работа | Информация в логе | | |
| - | ==== Проверка последнего бекапа | + | | 80-90% | Предупреждение | " |
| + | | > 90% | Критическое предупреждение | " | ||
| <code bash> | <code bash> | ||
| - | # Показать последний созданный бекап | + | # Проверка свободного места вручную |
| - | ls -lt / | + | df -h /opt/backups/ |
| - | # Размеры всех бекапов | + | # Расчет размера всех бекапов |
| - | du -sh / | + | du -sh /opt/backups/ |
| + | |||
| + | # Принудительная очистка старых бекапов (осторожно!) | ||
| + | find /opt/backups/evolution-api -name "evolution_backup_*.tar.gz" -mtime +7 -delete | ||
| </ | </ | ||
| + | |||
| + | **Рекомендации по управлению дисковым пространством: | ||
| + | * При заполнении > 80% - рассмотрите уменьшение срока хранения бекапов | ||
| + | * При заполнении > 90% - немедленно очистите старые бекапы или увеличьте дисковое пространство | ||
| + | * Настройте отдельный диск для бекапов, | ||
| + | |||
| + | ===== Мониторинг и логи ===== | ||
| ==== Просмотр логов ==== | ==== Просмотр логов ==== | ||
| <code bash> | <code bash> | ||
| - | # Последние | + | # Последние |
| - | tail -20 / | + | tail -50 /opt/backups/ |
| - | # Поиск ошибок | + | # Мониторинг в реальном времени |
| - | grep "ОШИБКА" / | + | tail -f / |
| + | |||
| + | # Логи за сегодня | ||
| + | grep "$(date ' | ||
| </ | </ | ||
| - | ==== Очистка старых | + | ==== Проверка статуса |
| <code bash> | <code bash> | ||
| - | # Удалить бекапы старше 30 дней | + | # Список всех |
| - | find / | + | ls -lah /opt/backups/ |
| + | |||
| + | # Размер директории бекапов | ||
| + | du -sh / | ||
| - | # Показать количество бекапов | + | # Последний успешный бекап |
| - | ls -1 / | + | grep "завершено успешно" |
| + | </ | ||
| + | |||
| + | ==== Настройка ротации логов ==== | ||
| + | |||
| + | <code bash> | ||
| + | # Создаем конфиг для logrotate | ||
| + | cat > / | ||
| + | /opt/backups/ | ||
| + | weekly | ||
| + | rotate 8 | ||
| + | compress | ||
| + | delaycompress | ||
| + | notifempty | ||
| + | create 644 root root | ||
| + | } | ||
| + | EOF | ||
| </ | </ | ||
| ===== Восстановление из резервной копии ===== | ===== Восстановление из резервной копии ===== | ||
| - | 🚨 **ОСТОРОЖНО: | + | ==== Полное восстановление системы ==== |
| - | ==== Шаги восстановления | + | <note warning> |
| + | **Внимание!** Процедура | ||
| + | </ | ||
| - | 1. **Остановите Evolution API:** | ||
| <code bash> | <code bash> | ||
| - | cd / | + | # 1. Останавливаем Evolution API |
| - | sudo docker-compose down | + | cd / |
| - | </ | + | 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 |
| - | sudo mv instances | + | mv postgres_data |
| - | sudo mv postgres_data | + | mv redis_data |
| - | sudo mv redis_data | + | |
| - | </ | + | |
| - | 3. **Восстановите данные из архива:** | + | # 3. Распаковываем бекап |
| - | <code bash> | + | cd / |
| - | # Выберите нужный | + | tar -xzf /opt/backups/evolution-api/ |
| - | ls -la / | + | |
| - | # Распакуйте архив (замените YYYYMMDD_HHMMSS | + | # 4. Запускаем |
| - | sudo tar -xzf / | + | docker-compose up -d |
| - | </ | + | |
| - | 4. **Запустите Evolution API:** | + | # 5. Ждем запуска и проверяем |
| - | <code bash> | + | sleep 15 |
| - | sudo docker-compose | + | docker-compose |
| </ | </ | ||
| - | 5. **Проверьте работоспособность:** | + | ==== Восстановление только базы данных ==== |
| <code bash> | <code bash> | ||
| - | sudo docker-compose ps | + | # 1. Распаковываем дамп из архива |
| - | sudo docker-compose logs -f | + | cd /tmp |
| - | </code> | + | tar -xzf / |
| - | ===== Настройки и оптимизация ===== | + | # 2. Восстанавливаем базу данных |
| + | cd / | ||
| + | export PGPASSWORD=" | ||
| + | docker exec -i evolution_postgres psql -U evolution_user -d evolution_db < / | ||
| + | |||
| + | # 3. Перезапускаем API для | ||
| + | docker-compose restart evolution-api | ||
| + | </ | ||
| - | ==== Изменение | + | ===== Решение |
| - | Для изменения времени запуска отредактируйте crontab: | + | ==== Частые ошибки и решения ==== |
| + | **Ошибка: | ||
| <code bash> | <code bash> | ||
| - | sudo crontab | + | # Решение: |
| + | cd / | ||
| + | docker-compose up -d | ||
| </ | </ | ||
| - | **Примеры расписания:** | + | **Ошибка: "Не удалось создать дамп базы данных" |
| - | < | + | < |
| - | # Каждый день | + | # Проверяем статус PostgreSQL |
| - | 30 2 * * * / | + | docker exec evolution_postgres pg_isready |
| - | # Каждое воскресенье в 4:00 | + | # Проверяем логи PostgreSQL |
| - | 0 4 * * 0 / | + | docker logs evolution_postgres |
| - | # Дважды | + | # Проверяем подключение |
| - | 0 6,18 * * * / | + | docker exec evolution_postgres psql -U evolution_user -d evolution_db -c " |
| </ | </ | ||
| - | ==== Настройка уведомлений ==== | + | **Ошибка: " |
| - | + | ||
| - | Для | + | |
| <code bash> | <code bash> | ||
| - | # Получите токен бота и ID чата | + | # Проверяем и исправляем права |
| - | # Раскомментируйте | + | sudo chown -R $(whoami):$(whoami) |
| - | curl -s -X POST "https://api.telegram.org/bot< | + | sudo chmod -R 755 / |
| - | -d chat_id="< | + | |
| - | | + | |
| </ | </ | ||
| - | ==== Изменение периода хранения ==== | + | **Контейнеры не запускаются после бекапа** |
| - | + | ||
| - | Отредактируйте | + | |
| <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 bash> |
| + | # Тест архива на целостность | ||
| + | tar -tzf / | ||
| - | **1. Скрипт не запускается: | + | # Проверка размера |
| - | * Проверьте права доступа: '' | + | if [ $(stat -f%z /opt/backups/evolution-api/ |
| - | * Проверьте пути в скрипте | + | echo " |
| - | * Убедитесь что Docker запущен: '' | + | else |
| + | echo "Подозрительно маленький размер бекапа" | ||
| + | fi | ||
| + | </ | ||
| - | **2. Контейнеры не останавливаются: | + | ==== Тестирование |
| - | * Проверьте что путь к docker-compose.yml правильный | + | |
| - | * Убедитесь что файл | + | |
| - | **3. Недостаточно места | + | Рекомендуется периодически тестировать процедуру восстановления: |
| - | * Проверьте свободное место: '' | + | |
| - | * Уменьшите | + | |
| - | * Настройте ротацию логов | + | |
| - | + | ||
| - | **4. Cron не запускается: | + | |
| - | * Проверьте статус: '' | + | |
| - | * Проверьте | + | |
| - | * Посмотрите системные логи: '' | + | |
| - | + | ||
| - | ==== Диагностика ==== | + | |
| <code bash> | <code bash> | ||
| - | # Проверить последнее выполнение cron | + | # Создаем тестовую |
| - | sudo grep -i evolution | + | mkdir -p /tmp/evolution-test |
| + | cd /tmp/ | ||
| - | # Проверить размер директории с данными | + | # Распаковываем последний бекап |
| - | du -sh / | + | tar -xzf /opt/backups/ |
| - | # Тест | + | # Проверяем содержимое |
| - | cd /opt/evolution-api/ | + | ls -la |
| - | sudo docker-compose ps | + | echo "Тест |
| - | sudo docker-compose config | + | |
| </ | </ | ||
| - | ===== Заключение ===== | + | ===== Рекомендации по безопасности ===== |
| + | |||
| + | * **Шифрование бекапов**: Рассмотрите использование GPG для шифрования архивов | ||
| + | * **Удаленное хранение**: | ||
| + | * **Мониторинг доступа**: | ||
| + | * **Регулярное тестирование**: | ||
| + | * **Документирование изменений**: | ||
| + | |||
| + | ===== Контакты и поддержка | ||
| - | После | + | При возникновении проблем с резервным копированием: |
| - | | + | |
| - | | + | - Проверьте системные ресурсы: `df -h` и `free -h` |
| - | * ✅ Автоматически удалять | + | |
| - | | + | |
| - | * ✅ Обеспечивать быстрое восстановление при необходимости | + | |
| - | 💡 **Рекомендация: | + | --- |
| + | //Документ создан: {{ CURRENT_DATE }} | Версия: 1.0 | Автор: System Admin// | ||