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.