Files
YandexMusicDiscordBot/backup_db.md
2025-03-21 09:12:21 +03:00

96 lines
5.2 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
Ниже приведён пример скрипта на sh, который можно добавить в cron. Он выполняет следующие шаги:
1. Создаёт резервную копию базы MongoDB внутри контейнера (через docker exec).
2. Копирует созданный архив с контейнера на хост.
3. Шифрует архив с помощью GPG (симметричное шифрование с алгоритмом AES256).
4. Отправляет зашифрованный файл в облако с помощью rclone.
5. Очищает временные файлы.
> **Важно:**
> - Задайте переменные, такие как путь для бэкапов (`BACKUP_DIR`), имя удалённого хранилища для rclone (`RCLONE_DEST`), а также установите переменную окружения `ENCRYPTION_PASSPHRASE` с вашим паролем для шифрования.
> - Убедитесь, что на хосте установлены docker, gpg и rclone, а также что контейнер MongoDB называется так же, как указано в скрипте (в примере `ymdb-mongodb`).
Скрипт (например, сохраните его как `/usr/local/bin/backup.sh` и сделайте исполняемым):
```sh
#!/bin/sh
# backup.sh - резервное копирование базы MongoDB с шифрованием и отправкой в облако
# Настройки (отредактируйте под себя)
BACKUP_DIR="/path/to/backup" # Локальная папка для хранения бэкапов
RCLONE_DEST="remote:backup" # Название удалённого хранилища rclone (напр., remote:backup)
MONGO_CONTAINER="ymdb-mongodb" # Имя контейнера MongoDB
# Получаем дату для имени файла
DATE=$(date +%Y%m%d_%H%M%S)
BACKUP_FILE="mongodb_backup_${DATE}.archive"
ENCRYPTED_FILE="${BACKUP_FILE}.gpg"
# Проверяем, задан ли пароль для шифрования
if [ -z "$ENCRYPTION_PASSPHRASE" ]; then
echo "Переменная ENCRYPTION_PASSPHRASE не установлена. Выход."
exit 1
fi
# Создаём папку для бэкапов, если её нет
mkdir -p "$BACKUP_DIR"
# Создание резервной копии базы данных через mongodump внутри контейнера
echo "Создаём резервную копию MongoDB..."
docker exec "$MONGO_CONTAINER" mongodump --archive="/tmp/${BACKUP_FILE}" --gzip
if [ $? -ne 0 ]; then
echo "Ошибка при выполнении mongodump."
exit 1
fi
# Копируем файл резервной копии с контейнера на хост
echo "Копируем резервную копию с контейнера..."
docker cp "$MONGO_CONTAINER":/tmp/"${BACKUP_FILE}" "$BACKUP_DIR"/
if [ $? -ne 0 ]; then
echo "Ошибка при копировании файла резервной копии."
exit 1
fi
# Очищаем временный файл резервной копии внутри контейнера
docker exec "$MONGO_CONTAINER" rm -f "/tmp/${BACKUP_FILE}"
# Шифруем резервную копию с помощью GPG
echo "Шифруем резервную копию..."
gpg --batch --yes --passphrase "$ENCRYPTION_PASSPHRASE" --symmetric --cipher-algo AES256 -o "$BACKUP_DIR"/"$ENCRYPTED_FILE" "$BACKUP_DIR"/"$BACKUP_FILE"
if [ $? -ne 0 ]; then
echo "Ошибка при шифровании резервной копии."
exit 1
fi
# Удаляем незашифрованный архив
rm -f "$BACKUP_DIR"/"$BACKUP_FILE"
# Отправляем зашифрованную резервную копию в облако с помощью rclone
echo "Отправляем зашифрованную резервную копию в облако..."
rclone copy "$BACKUP_DIR"/"$ENCRYPTED_FILE" "$RCLONE_DEST"
if [ $? -ne 0 ]; then
echo "Ошибка при отправке резервной копии в облако."
exit 1
fi
# Опционально удаляем локальный зашифрованный файл после успешной отправки
rm -f "$BACKUP_DIR"/"$ENCRYPTED_FILE"
echo "Резервное копирование и отправка в облако завершены успешно."
```
### Как использовать скрипт в cron
1. Сделайте скрипт исполняемым:
```bash
chmod +x /usr/local/bin/backup.sh
```
2. Добавьте задание в crontab (например, ежедневное резервное копирование в 03:00):
```cron
0 3 * * * /usr/local/bin/backup.sh >> /var/log/backup.log 2>&1
```
В итоге этот скрипт автоматизирует процесс резервного копирования базы, шифрования и отправки в облако. Не забудьте проверить и настроить пути, переменные и параметры согласно вашим требованиям.