Vaultwarden: резервное копирование

В предыдущей статье разобрали установку и базовую настройку Vaultwarden. В этой статье настроим резервное копирование для базы данных с паролями, а также вложений.

Для чего нужно резервное копирование?

Существует множество ситуаций, когда необходимо восстановить данные на конкретный момент времени. Например:

  • Удалили важный логин/пароль и очистили корзину;
  • Был утерян вложенный файл (например, 2FA-резервные коды или документы);
  • Ошибка синхронизации привела к потере части записей.

В таких случаях резервные копии — единственный способ восстановить данные.

Для создания резервной копии базы данных (бд) с паролями установим пакет SQLite3:

sudo apt-get install -y sqlite3

После этого создам папку где будут храниться резервные копии:

sudo mkdir /srv/backups      # создаем директорию
sudo chmod 705 /srv/backups  # устанавливаем права на директорию

Автоматическое резервное копирование базы данных настроим с помощью systemd-сервиса и таймера, который будет реугулярно запускать службу.

Сервис будет создавать копию бд и очищать устаревших копии старше 30 дней.

Создадим сервис резервного копирования с помощью команды:

sudo nano /etc/systemd/system/vaultwarden-db-backup.service
[Unit]
Description=Backup the Vaultwarden database

[Service]
Type=oneshot
WorkingDirectory=/srv/backups
ExecStart=/usr/bin/env sh -c 'sqlite3 /srv/vaultwarden/db.sqlite3 ".backup backup-$(date -Is | tr : _).sq3"'
ExecStart=/usr/bin/find . -type f -mtime +30 -name 'backup*' -delete

Содержимое файла vaultwarden-db-backup.service.

После сохранения файла, необходимо попробовать создать резервную копию базы данных с помощью команды:

 sudo systemctl start vaultwarden-db-backup.service

И проверяем наличие резервной копии в папке:

sudo ls -l /srv/backups/
total 1348
-rw-r--r-- 1 root root 339968 May 21 21:34 backup-2025-05-21T21_34_46+03_00.sq3

Резервная копия базы данных успешно создана.

Теперь создадим таймер, чтобы автоматизировать данный процесс:

sudo nano /etc/systemd/system/vaultwarden-db-backup.timer
[Unit]
Description=Vaultwarden database backup schedule

[Timer]
OnCalendar=03:00
Persistent=true

[Install]
WantedBy=multi-user.target

Содержимое файла vaultwarden-db-backup.timer.

Включаем и запускаем созданный таймер:

 sudo systemctl enable vaultwarden-db-backup.timer
 sudo systemctl start vaultwarden-db-backup.timer

Проверяем, что таймер работает и все хорошо:

systemctl status vaultwarden-db-backup.timer
● vaultwarden-db-backup.timer - Vaultwarden database backup schedule
     Loaded: loaded (/etc/systemd/system/vaultwarden-db-backup.timer; enabled; preset: enabled)
     Active: active (waiting) since Thu 2025-06-12 15:44:34 MSK; 6 days ago
    Trigger: Thu 2025-06-19 03:00:00 MSK; 7h left
   Triggers: ● vaultwarden-db-backup.service

Статус у таймера active: это означает, что таймер работает и ожидает следующего срабатывания по расписанию.

Рассмотрим ситуацию, когда необходимо восстановить базу данных из резервной копии на определенную дату. Для этого выполняем команду:

sudo sqlite3 /srv/vaultwarden/db.sqlite3 ".restore '/srv/backups/backup-2025-05-21T21_34_46+03_00.sq3'"

/srv/vaultwarden/db.sqlite3 - это база данных, которая используется в менеджере паролей сейчас.

/srv/backups/backup-2025-05-21T21_34_46+03_00.sq3 - это резервная копия базы данных от 21 мая 2025 года, которая заменит db.sqlite3.

Vaultwarden позволяет к записям с паролями прикреплять различные файлы. Сами вложения не хранятся в базе данных, а хранятся в папке attachments:

/srv/vaultwarden/attachments/

Путь до папки attachments.

Поэтому будем архивировать полностью папку.

Делать это будем так же, как и с базой данных: с помощью systemd-сервиса и таймера.

Создадим сначала сервис:

sudo nano /etc/systemd/system/vaultwarden-att-backup.service
[Unit]
Description=Backup the Vaultwarden attachment folder

[Service]
Type=oneshot
WorkingDirectory=/srv/backups
ExecStart=/bin/bash -c 'tar -czf "vaultwarden-att-backup-$(date -Is | tr : _).tar.gz" -C /srv/vaultwarden/ attachments/'
ExecStart=/usr/bin/find . -type f -name "vaultwarden-att-backup-*.tar.gz" -mtime +30 -delete

Создаем таймер для cервиса:

sudo nano /etc/systemd/system/vaultwarden-att-backup.timer
[Unit]
Description=Vaultwarden attachment folder backup schedule

[Timer]
OnCalendar=03:00
Persistent=true

[Install]
WantedBy=multi-user.target

Включаем и запускаем таймер:

 sudo systemctl enable vaultwarden-att-backup.timer
 sudo systemctl start vaultwarden-att-backup.timer

Так же, как и в прошлый раз, проверяем, что таймер активен:

systemctl status vaultwarden-att-backup.timer

Рассмотрим один из вариантов восстановления папки attachments из архива. Можно удалить папку:

sudo rm -r /srv/vaultwarden/attachments

После этого восстановить из архива на нужную дату с помощью команды:

sudo tar -xf /srv/backups/vaultwarden-att-backup-2025-06-21T03_00_04+03_00.tar.gz -C /srv/vaultwarden/

Сначала указываем путь до архива, а потом до папки Vaultwarden.

Стоит также отметить, что все это локальные резервные копии, хранящиеся на VPS. Что, если что-то произойдёт с оборудованием провайдера? Например, повреждение физического сервера. Есть вероятность потерять данные.

Рекомендую периодически скачивать папку backups на компьютер. Хранить ее в зашифрованном контейнере. Например, такой контейнер можно создать с помощью программы Cryptomator.

Скачать папку можно с помощью команды scp через PowerShell (Windows) или терминал (Linux):

scp -r vaultwarden@tutorial.mukminov.dev:/srv/backups/ ./

Папка backups будет сохранена в текущую папку (./). Можно указать специфичный путь для сохранения.

В этой статье мы настроили автоматическое резервное копирование базы данных и вложений Vaultwarden с помощью systemd-сервисов и таймеров. Теперь:

  • ✅ База данных будет сохраняться ежедневно в /srv/backups/, а старые копии (старше 30 дней) – автоматически удаляться.
  • ✅ Папка attachments будут архивироваться в .tar.gz с таким же сроком хранения.
  • ✅ Рассмотрели, как скачивать локальные резервные копии с VPS на свой компьютер.

Если возникнут вопросы — пишите в комментарии в Telegram.