mirror of
https://github.com/deadcxap/YandexMusicDiscordBot.git
synced 2026-01-09 07:41:53 +03:00
backup shell script
This commit is contained in:
96
backup_db.md
Normal file
96
backup_db.md
Normal file
@@ -0,0 +1,96 @@
|
|||||||
|
Ниже приведён пример скрипта на 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
|
||||||
|
```
|
||||||
|
|
||||||
|
В итоге этот скрипт автоматизирует процесс резервного копирования базы, шифрования и отправки в облако. Не забудьте проверить и настроить пути, переменные и параметры согласно вашим требованиям.
|
||||||
Reference in New Issue
Block a user