```markdown # Резервное копирование Vaultwarden ## Скрипт backup.sh ```bash #!/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 " -> Создаем архив всей директории проекта..." #tar -czf "${BACKUP_DIR}/${ARCHIVE_NAME}" -C "${COMPOSE_DIR}" . tar -czf "${BACKUP_DIR}/${ARCHIVE_NAME}" --exclude="${COMPOSE_DIR}/backups" -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 завершено!" ``` ## Инструкция по настройке монтирования Яндекс.Диска 1. Установить davfs2: ```bash sudo apt install davfs2 ``` 2. Получить пароль приложения: - Открыть https://id.yandex.ru/security - В разделе "Пароли приложений" создать новый пароль с доступом к WebDAV 3. Создать точку монтирования и группу: ```bash sudo mkdir -p /mnt/yandex-disk sudo groupadd davfs2 2>/dev/null || true sudo usermod -aG davfs2 $USER ``` Перелогиниться после добавления в группу. 4. Настроить учетные данные: ```bash sudo nano /etc/davfs2/secrets ``` Добавить строку (заменить на свои данные): ``` /mnt/yandex-disk login@yandex.ru пароль_приложения ``` Установить права: ```bash sudo chmod 600 /etc/davfs2/secrets ``` 5. Добавить в /etc/fstab: ``` https://webdav.yandex.ru /mnt/yandex-disk davfs _netdev,auto,rw,uid=1000,file_mode=600,dir_mode=700 0 0 ``` Заменить uid=1000 на ваш UID (узнать через `id -u`). 6. Смонтировать: ```bash sudo mount /mnt/yandex-disk ``` Проверка: ```bash mountpoint -q /mnt/yandex-disk && echo "OK" || echo "FAIL" ``` ## Настройка регулярного резервного копирования Для автоматического запуска скрипта ежедневно в 03:00 используется cron. 1. Открыть crontab для root: ```bash sudo crontab -e ``` 2. Добавить строку: ``` 0 3 * * * /opt/vw/backup.sh >> /var/log/vw-backup.log 2>&1 ``` Разбор строки: - `0 3 * * *` - время запуска: 03:00 ежедневно - `/opt/vw/backup.sh` - путь к скрипту - `>> /var/log/vw-backup.log 2>&1` - перенаправление вывода в лог-файл (stdout и stderr) 3. Сделать скрипт исполняемым: ```bash sudo chmod +x /opt/vw/backup.sh ``` 4. Проверить, что cron запущен: ```bash sudo systemctl status cron ``` 5. Проверить логи после первого запуска: ```bash sudo tail -f /var/log/vw-backup.log ``` ## Особенности - davfs2 работает медленно на множестве мелких файлов из-за особенностей WebDAV - Для бэкапов это приемлемо, так как архив tar.gz представляет собой один файл - При проблемах с монтированием проверить: `sudo mount -v /mnt/yandex-disk` - Локальные бэкапы хранятся 7 дней, на Яндекс.Диске - 30 дней - Контейнер останавливается на время создания архива для обеспечения целостности SQLite базы данных ```