#!/bin/bash # Скрипт резервного копирования Vaultwarden с отправкой на Яндекс.Диск BACKUP_DIR="/opt/vw/backups" YADISK_MOUNT="/mnt/yandex-disk/" DATE=$(date +%Y%m%d_%H%M%S) COMPOSE_DIR="/opt/vw" CONTAINER_NAME="vaultwarden" ARCHIVE_NAME="vw_backup_${DATE}.tar.gz" mkdir -p "${BACKUP_DIR}" echo "[${DATE}] Начинаем резервное копирование Vaultwarden..." # Проверка монтирования Яндекс.Диска if ! mountpoint -q "${YADISK_MOUNT}"; then echo " ОШИБКА: Яндекс.Диск не примонтирован в ${YADISK_MOUNT}" echo " Попробуйте: sudo mount ${YADISK_MOUNT}" exit 1 fi mkdir -p "${YADISK_MOUNT}/backup/vaultwarden-backups" 2>/dev/null cd "${COMPOSE_DIR}" || exit 1 echo " -> Останавливаем контейнер для целостности базы данных..." docker compose stop "${CONTAINER_NAME}" #echo " -> Создаем архив данных..." #FILES_TO_ARCHIVE="data docker-compose.yml" #if [ -f ".env" ]; then # FILES_TO_ARCHIVE="${FILES_TO_ARCHIVE} .env" #fi #tar -czf "${BACKUP_DIR}/${ARCHIVE_NAME}" -C "${COMPOSE_DIR}" ${FILES_TO_ARCHIVE} echo " -> Создаем архив всей директории проекта..." tar -czf "${BACKUP_DIR}/${ARCHIVE_NAME}" -C "${COMPOSE_DIR}" . echo " -> Запускаем контейнер..." docker compose start "${CONTAINER_NAME}" if [ -s "${BACKUP_DIR}/${ARCHIVE_NAME}" ]; then echo " Архив Vaultwarden: $(du -h "${BACKUP_DIR}/${ARCHIVE_NAME}" | cut -f1)" else echo " Ошибка создания архива!" exit 1 fi echo " Копирование на Яндекс.Диск..." cp "${BACKUP_DIR}/${ARCHIVE_NAME}" "${YADISK_MOUNT}/backup/vaultwarden-backups/" echo " Очистка старых бэкапов..." find "${BACKUP_DIR}" -type f -name "vw_backup_*.tar.gz" -mtime +7 -delete 2>/dev/null find "${YADISK_MOUNT}/backup/vaultwarden-backups" -type f -name "vw_backup_*.tar.gz" -mtime +30 -delete 2>/dev/null echo "[${DATE}] Резервное копирование Vaultwarden завершено!"