Различия
Показаны различия между двумя версиями страницы.
| Предыдущая версия справа и слева Предыдущая версия Следующая версия | Предыдущая версия | ||
| vm:evolution_api:02-backup [2025/08/28 09:10] – 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="/ | ||
| Строка 55: | Строка 85: | ||
| 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 " | ||
| - | log "=== Резервное копирование завершено успешно ===" | + | # Получаем информацию о свободном месте на диске |
| + | BACKUP_DISK_USAGE=$(df -h " | ||
| + | ROOT_DISK_USAGE=$(df -h / | awk 'NR==2 {print $4 " свободно из " $2 " (" $5 " занято)"}') | ||
| - | # Отправляем уведомление | + | log "Свободное место |
| - | # curl -s -X POST "https:// | + | if [ " |
| - | # -d chat_id="< | + | log " |
| - | # -d text="✅ Evolution API backup completed: | + | fi |
| - | exit 0 | + | # Получаем процент заполнения диска с бекапами для предупреждений |
| - | </file> | + | BACKUP_DISK_PERCENT=$(df " |
| - | ===== Шаг 3: Настройка прав | + | if [ " |
| + | log " | ||
| + | elif [ " | ||
| + | log " | ||
| + | fi | ||
| + | |||
| + | log "=== Резервное копирование завершено успешно | ||
| - | <code bash> | + | # Формируем |
| - | # Сделайте скрипт исполняемым | + | TELEGRAM_MESSAGE=" |
| - | sudo chmod +x / | + | 📁 Backup: $BACKUP_NAME ($BACKUP_SIZE) |
| + | 💾 DB dump: $DB_DUMP_SIZE | ||
| + | 📊 Total backups: $BACKUP_COUNT | ||
| + | 💿 Disk space: $BACKUP_DISK_USAGE" | ||
| - | # Проверьте права | + | # Добавляем предупреждение |
| - | ls -la / | + | if [ " |
| - | </code> | + | TELEGRAM_MESSAGE=" |
| + | ⚠️ WARNING: Disk >90% full!" | ||
| + | elif [ " | ||
| + | | ||
| + | ⚠️ ATTENTION: Disk >80% full" | ||
| + | fi | ||
| - | ===== Шаг 4: Тестирование | + | # Отправляем уведомление |
| + | curl -s -X POST " | ||
| + | -d chat_id=" | ||
| + | -d text=" | ||
| - | ⚠️ **Внимание: | + | exit 0 |
| - | + | ||
| - | <code bash> | + | |
| - | # Запустите тестовое резервное копирование | + | |
| - | sudo / | + | |
| - | + | ||
| - | # Проверьте создание бекапа | + | |
| - | ls -la / | + | |
| - | + | ||
| - | # Посмотрите логи | + | |
| - | cat / | + | |
| </ | </ | ||
| - | **Ожидаемый результат: | + | ==== 3. Настройка переменных ==== |
| - | < | + | |
| - | / | + | |
| - | ├── evolution_backup_20240828_123456.tar.gz | + | |
| - | └── backup.log | + | |
| - | </ | + | |
| - | ===== Шаг 5: Настройка | + | После |
| - | + | ||
| - | Откройте | + | |
| <code bash> | <code bash> | ||
| - | sudo crontab | + | # Основные настройки (проверьте пути под вашу систему) |
| + | COMPOSE_FILE="/ | ||
| + | EVOLUTION_DIR="/ | ||
| + | BACKUP_DIR="/ | ||
| + | RETENTION_DAYS=10 | ||
| + | |||
| + | # ⚠️ ОБЯЗАТЕЛЬНО ИЗМЕНИТЕ эти параметры безопасности: | ||
| + | DB_PASSWORD=" | ||
| + | curl ... " | ||
| + | chat_id=" | ||
| </ | </ | ||
| - | Добавьте следующую | + | <note warning> |
| + | **Безопасность**: | ||
| + | </ | ||
| - | < | + | ==== 4. Настройка Telegram уведомлений (опционально) ==== |
| - | # Резервное копирование Evolution API каждый день в 3:00 | + | |
| - | 0 3 * * * / | + | |
| - | </ | + | |
| - | Сохраните и выйдите из редактора. | + | Для получения уведомлений о результатах резервного копирования: |
| - | ===== Шаг 6: Проверка настройки cron ===== | + | - Создайте Telegram бота через [@BotFather](https:// |
| + | - Получите токен бота | ||
| + | - Узнайте ваш chat_id (можно использовать [@userinfobot](https:// | ||
| + | - Замените | ||
| <code bash> | <code bash> | ||
| - | # Проверьте что задача добавлена | + | # Замените эти значения |
| - | sudo crontab | + | curl -s -X POST " |
| - | + | -d chat_id=" | |
| - | # Проверьте статус службы cron | + | -d text=" |
| - | sudo systemctl status cron | + | |
| - | + | ||
| - | # Убедитесь что cron запущен | + | |
| - | sudo systemctl enable cron | + | |
| - | sudo systemctl start cron | + | |
| </ | </ | ||
| - | ===== Структура файлов | + | ===== Использование скрипта ===== |
| - | < | + | ==== Ручной запуск ==== |
| - | /opt/ | + | |
| - | ├── scripts/ | + | |
| - | │ | + | |
| - | ├── backups/ | + | |
| - | │ | + | |
| - | │ | + | |
| - | │ | + | |
| - | │ | + | |
| - | └── evolution-api/ | + | |
| - | ├── docker-compose.yml | + | |
| - | ├── store/ | + | |
| - | ├── instances/ | + | |
| - | ├── postgres_data/ | + | |
| - | └── redis_data/ | + | |
| - | </ | + | |
| - | + | ||
| - | ===== Мониторинг и управление бекапами ===== | + | |
| - | + | ||
| - | ==== Проверка последнего бекапа | + | |
| <code bash> | <code bash> | ||
| - | # Показать | + | # Запуск с выводом в консоль |
| - | ls -lt /opt/backups/evolution-api/ | + | /opt/scripts/evolution-backup.sh |
| - | # Размеры всех бекапов | + | # Запуск в фоновом режиме |
| - | du -sh / | + | nohup /opt/scripts/evolution-backup.sh > /dev/null 2>&1 & |
| - | + | ||
| - | # Общий размер директории с бекапами | + | |
| - | du -sh /opt/backups/evolution-api/ | + | |
| </ | </ | ||
| - | ==== Просмотр логов | + | ==== Автоматический запуск через Cron ==== |
| <code bash> | <code bash> | ||
| - | # Последние 20 строк лога | + | # Редактируем crontab |
| - | tail -20 / | + | crontab |
| - | # Поиск ошибок в логах | + | # Добавляем задание (например, |
| - | grep " | + | 0 3 * * * /opt/scripts/ |
| - | # Поиск успешных бекапов | + | # Или с логированием cron ошибок |
| - | grep " | + | 0 3 * * * /opt/scripts/evolution-backup.sh 2>> |
| </ | </ | ||
| - | ==== Очистка старых бекапов ==== | + | **Примеры расписаний Cron:** |
| + | * `0 3 * * *` - каждый день в 3:00 | ||
| + | * `0 2 * * 0` - каждое воскресенье в 2:00 | ||
| + | * `0 1 1 * *` - 1 числа каждого месяца в 1:00 | ||
| + | * `0 */6 * * *` - каждые 6 часов | ||
| - | <code bash> | + | ===== Процесс резервного копирования ===== |
| - | # Удалить бекапы | + | |
| - | find / | + | |
| - | # Показать количество бекапов | + | Скрипт выполняет следующие |
| - | ls -1 / | + | |
| - | # Показать самые старые бекапы | + | - **Проверка окружения** - проверяет наличие файлов и запущенные контейнеры |
| - | ls -lt / | + | - **Создание SQL дампа** - создает дамп базы данных PostgreSQL |
| - | </ | + | - **Остановка контейнеров** - корректно останавливает все сервисы |
| + | - **Создание архива** - упаковывает все данные в tar.gz | ||
| + | - **Запуск контейнеров** - восстанавливает работу системы | ||
| + | - **Проверка состояния** - проверяет что все сервисы запустились | ||
| + | - **Очистка старых бекапов** | ||
| + | - **Отправка уведомлений** - отправляет статус в Telegram | ||
| - | ===== Восстановление из резервной копии ===== | + | < |
| + | **Время простоя**: Обычно система недоступна 30-60 секунд во время создания бекапа. | ||
| + | </ | ||
| - | 🚨 **ОСТОРОЖНО: | + | ==== Мониторинг дискового |
| - | ==== Шаги восстановления ==== | + | Скрипт автоматически отслеживает состояние дискового пространства: |
| - | 1. **Остановите Evolution API:** | + | ^ Уровень заполнения ^ Действие ^ Сообщение ^ |
| - | <code bash> | + | | < 80% | Нормальная работа | Информация |
| - | cd / | + | | 80-90% | Предупреждение | " |
| - | sudo docker-compose down | + | | > 90% | Критическое предупреждение | " |
| - | </code> | + | |
| - | 2. **Сделайте резервную копию текущих данных (опционально): | ||
| <code bash> | <code bash> | ||
| - | sudo mv store store_old_$(date +%Y%m%d) | + | # Проверка свободного места вручную |
| - | sudo mv instances instances_old_$(date +%Y%m%d) | + | df -h / |
| - | sudo mv postgres_data postgres_data_old_$(date +%Y%m%d) | + | |
| - | sudo mv redis_data redis_data_old_$(date +%Y%m%d) | + | |
| - | </code> | + | |
| - | 3. **Восстановите данные из архива:** | + | # Расчет размера всех бекапов |
| - | <code bash> | + | du -sh / |
| - | # Выберите нужный | + | |
| - | ls -la / | + | |
| - | # Распакуйте архив (замените YYYYMMDD_HHMMSS на нужную дату) | + | # Принудительная очистка старых бекапов (осторожно!) |
| - | sudo tar -xzf / | + | find / |
| </ | </ | ||
| - | 4. **Запустите Evolution API:** | + | **Рекомендации |
| - | <code bash> | + | * При заполнении |
| - | sudo docker-compose up -d | + | * При заполнении |
| - | </code> | + | * Настройте отдельный диск для бекапов, |
| - | 5. **Проверьте работоспособность:** | + | ===== Мониторинг и логи ===== |
| - | <code bash> | + | |
| - | sudo docker-compose ps | + | |
| - | sudo docker-compose logs -f | + | |
| - | </ | + | |
| - | ===== Настройки и оптимизация ===== | + | ==== Просмотр логов ==== |
| - | + | ||
| - | ==== Изменение | + | |
| - | + | ||
| - | Для изменения времени запуска отредактируйте crontab: | + | |
| <code bash> | <code bash> | ||
| - | sudo crontab -e | + | # Последние 50 строк лога |
| - | </code> | + | tail -50 / |
| - | **Примеры расписания:** | + | # Мониторинг в реальном |
| - | < | + | tail -f /opt/backups/evolution-api/backup.log |
| - | # Каждый день в 2:30 | + | |
| - | 30 2 * * * /opt/scripts/ | + | |
| - | # Каждое воскресенье в 4:00 | + | # Логи за сегодня |
| - | 0 4 * * 0 / | + | grep " |
| - | + | ||
| - | # Дважды в день (6:00 и 18:00) | + | |
| - | 0 6,18 * * * /opt/scripts/ | + | |
| </ | </ | ||
| - | ==== Настройка уведомлений ==== | + | ==== Проверка статуса бекапов ==== |
| - | + | ||
| - | Для получения уведомлений в Telegram | + | |
| <code bash> | <code bash> | ||
| - | # Получите токен бота и ID чата | + | # Список всех бекапов |
| - | # Раскомментируйте и настройте: | + | ls -lah /opt/backups/ |
| - | curl -s -X POST " | + | |
| - | -d chat_id="< | + | |
| - | -d text=" | + | |
| - | </ | + | |
| - | ==== Изменение периода хранения ==== | + | # Размер директории бекапов |
| - | + | du -sh / | |
| - | Отредактируйте переменную в скрипте: | + | |
| - | + | ||
| - | <code bash> | + | |
| - | # Хранить бекапы 60 дней | + | |
| - | RETENTION_DAYS=60 | + | |
| - | # Хранить бекапы 7 дней | + | # Последний успешный |
| - | RETENTION_DAYS=7 | + | grep " |
| </ | </ | ||
| ==== Настройка ротации логов ==== | ==== Настройка ротации логов ==== | ||
| - | |||
| - | Создайте конфигурацию logrotate для управления размером логов: | ||
| <code bash> | <code bash> | ||
| - | sudo nano / | + | # Создаем конфиг для logrotate |
| - | </code> | + | cat > / |
| - | + | ||
| - | <file> | + | |
| / | / | ||
| - | | + | |
| - | rotate | + | rotate |
| compress | compress | ||
| delaycompress | delaycompress | ||
| - | missingok | ||
| notifempty | notifempty | ||
| create 644 root root | create 644 root root | ||
| } | } | ||
| - | </file> | + | EOF |
| + | </code> | ||
| - | ===== Устранение неисправностей ===== | + | ===== Восстановление из резервной |
| - | ==== Частые проблемы ==== | + | ==== Полное восстановление системы ==== |
| - | **1. Скрипт не запускается: | + | <note warning> |
| - | | + | **Внимание!** Процедура восстановления полностью заменит |
| - | * Проверьте | + | </ |
| - | * Убедитесь что | + | |
| - | **2. Контейнеры не останавливаются: | + | <code bash> |
| - | * Проверьте что путь к docker-compose.yml правильный | + | # 1. Останавливаем Evolution API |
| - | * Убедитесь что файл существует: | + | cd / |
| + | docker-compose | ||
| - | **3. Недостаточно | + | # 2. Создаем резервную копию текущих данных (на всякий случай) |
| - | * Проверьте свободное место: '' | + | mv store store_backup_$(date +%Y%m%d) |
| - | * Уменьшите | + | mv instances instances_backup_$(date +%Y%m%d) |
| - | * Настройте ротацию логов | + | mv postgres_data postgres_data_backup_$(date +%Y%m%d) |
| + | mv redis_data redis_data_backup_$(date +%Y%m%d) | ||
| - | **4. Cron не запускается: | + | # 3. Распаковываем бекап |
| - | * Проверьте статус: '' | + | cd / |
| - | * Проверьте синтаксис crontab: '' | + | tar -xzf / |
| - | * Посмотрите системные логи: '' | + | |
| - | **5. Директория бекапов недоступна:** | + | # 4. Запускаем контейнеры |
| - | * Создайте директорию: | + | docker-compose up -d |
| - | * Проверьте права доступа: | + | |
| - | ==== Диагностика ==== | + | # 5. Ждем запуска и проверяем |
| + | sleep 15 | ||
| + | docker-compose ps | ||
| + | </ | ||
| + | |||
| + | ==== Восстановление только базы данных | ||
| <code bash> | <code bash> | ||
| - | # Проверить последнее | + | # 1. Распаковываем дамп из архива |
| - | sudo grep -i evolution | + | cd /tmp |
| + | tar -xzf /opt/backups/evolution-api/ | ||
| - | # Проверить размер директории с данными | + | # 2. Восстанавливаем базу данных |
| - | du -sh /opt/evolution-api/ | + | cd / |
| + | export PGPASSWORD=" | ||
| + | docker exec -i evolution_postgres psql -U evolution_user -d evolution_db < / | ||
| + | |||
| + | # 3. Перезапускаем API для применения изменений | ||
| + | docker-compose restart | ||
| + | </code> | ||
| - | # Проверить доступность директории | + | ===== Решение проблем ===== |
| - | ls -la / | + | |
| - | # Тест Docker команд | + | ==== Частые ошибки и решения ==== |
| - | cd / | + | |
| - | sudo docker-compose ps | + | |
| - | sudo docker-compose config | + | |
| - | # Проверить свободное место | + | **Ошибка: |
| - | df -h /opt/backups/ | + | <code bash> |
| + | # Решение: Запустите контейнеры перед | ||
| + | cd /opt/evolution-api | ||
| + | docker-compose up -d | ||
| </ | </ | ||
| - | ==== Мониторинг производительности ==== | + | **Ошибка: "Не удалось создать дамп базы данных" |
| <code bash> | <code bash> | ||
| - | # Посмотреть время выполнения последних бекапов | + | # Проверяем статус PostgreSQL |
| - | grep " | + | docker exec evolution_postgres pg_isready |
| - | # Посмотреть размеры последних бекапов | + | # Проверяем логи PostgreSQL |
| - | grep " | + | docker logs evolution_postgres |
| - | # Статистика по времени выполнения | + | # Проверяем подключение |
| - | awk '/Начало резервного копирования/ | + | docker exec evolution_postgres psql -U evolution_user -d evolution_db -c "SELECT version();" |
| </ | </ | ||
| - | ===== Дополнительная безопасность ===== | + | **Ошибка: |
| + | <code bash> | ||
| + | # Проверяем и исправляем права | ||
| + | sudo chown -R $(whoami): | ||
| + | sudo chmod -R 755 / | ||
| + | </ | ||
| - | ==== Удаленное копирование бекапов | + | **Контейнеры |
| + | <code bash> | ||
| + | # Проверяем логи Docker | ||
| + | docker-compose logs | ||
| - | Для | + | # Принудительно |
| + | docker-compose down | ||
| + | docker-compose up -d --force-recreate | ||
| + | </ | ||
| + | |||
| + | ==== Проверка целостности бекапов | ||
| <code bash> | <code bash> | ||
| - | # Добавьте в конец скрипта (перед exit 0): | + | # Тест |
| - | # Копирование на удаленный сервер | + | tar -tzf / |
| - | rsync -avz --delete | + | |
| + | # Проверка размера бекапа (должен быть больше 1MB) | ||
| + | if [ $(stat | ||
| + | echo " | ||
| + | else | ||
| + | echo " | ||
| + | fi | ||
| </ | </ | ||
| - | ==== Шифрование | + | ==== Тестирование |
| - | Для шифрования бекапов | + | Рекомендуется периодически тестировать процедуру |
| <code bash> | <code bash> | ||
| - | # Замените создание | + | # Создаем тестовую среду |
| - | tar -czf - \ | + | mkdir -p / |
| - | | + | cd / |
| - | | + | |
| - | store/ instances/ postgres_data/ | + | # Распаковываем последний бекап |
| - | gpg --symmetric --cipher-algo AES256 --output | + | tar -xzf / |
| + | |||
| + | # Проверяем содержимое | ||
| + | ls -la | ||
| + | echo "Тест восстановления завершен. Проверьте содержимое папки / | ||
| </ | </ | ||
| - | ===== Заключение ===== | + | ===== Рекомендации по безопасности ===== |
| + | |||
| + | * **Шифрование бекапов**: Рассмотрите использование GPG для шифрования архивов | ||
| + | * **Удаленное хранение**: | ||
| + | * **Мониторинг доступа**: | ||
| + | * **Регулярное тестирование**: | ||
| + | * **Документирование изменений**: | ||
| + | |||
| + | ===== Контакты и поддержка | ||
| - | После | + | При возникновении проблем с резервным копированием: |
| - | | + | |
| - | | + | - Проверьте системные ресурсы: `df -h` и `free -h` |
| - | * ✅ Автоматически удалять | + | |
| - | | + | |
| - | * ✅ Обеспечивать быстрое восстановление при необходимости | + | |
| - | * ✅ Хранить бекапы в централизованной | + | |
| - | 💡 **Рекомендация: | + | --- |
| + | //Документ создан: {{ CURRENT_DATE }} | Версия: 1.0 | Автор: System Admin// | ||