|
Вариант 1: Локальные бэкапы с ротацией (базовый)
|
|
1. Создайте скрипт бэкапа
|
|
|
|
bash
|
|
sudo nano /usr/local/bin/vaultwarden-backup.sh
|
|
|
|
Вставьте содержимое:
|
|
|
|
bash
|
|
#!/bin/bash
|
|
# Vaultwarden Backup Script
|
|
# Резервное копирование данных Vaultwarden
|
|
|
|
set -e # Выход при ошибке
|
|
|
|
# === НАСТРОЙКИ ===
|
|
SOURCE_DIR="/root/vaultwarden/data" # Источник данных
|
|
BACKUP_DIR="/root/vaultwarden/backups" # Куда сохранять бэкапы
|
|
RETENTION_DAYS=30 # Сколько дней хранить бэкапы
|
|
TIMESTAMP=$(date +%Y%m%d_%H%M%S)
|
|
BACKUP_FILE="vaultwarden_backup_${TIMESTAMP}.tar.gz"
|
|
LOG_FILE="/var/log/vaultwarden-backup.log"
|
|
|
|
# Создаем папку для бэкапов если нет
|
|
mkdir -p "$BACKUP_DIR"
|
|
|
|
# Логирование
|
|
log() {
|
|
echo "[$(date '+%Y-%m-%d %H:%M:%S')] $1" | tee -a "$LOG_FILE"
|
|
}
|
|
|
|
log "=== Начало бэкапа ==="
|
|
|
|
# Останавливаем контейнер для консистентности БД (опционально, но рекомендуется)
|
|
log "Остановка контейнера vaultwarden..."
|
|
docker stop vaultwarden 2>/dev/null || true
|
|
|
|
# Создаем архив
|
|
log "Создание архива: $BACKUP_FILE"
|
|
tar -czf "${BACKUP_DIR}/${BACKUP_FILE}" -C "$(dirname "$SOURCE_DIR")" "$(basename "$SOURCE_DIR")"
|
|
|
|
# Запускаем контейнер обратно
|
|
log "Запуск контейнера vaultwarden..."
|
|
docker start vaultwarden 2>/dev/null || true
|
|
|
|
# Удаляем старые бэкапы
|
|
log "Удаление бэкапов старше $RETENTION_DAYS дней..."
|
|
find "$BACKUP_DIR" -name "vaultwarden_backup_*.tar.gz" -type f -mtime +$RETENTION_DAYS -delete -print | tee -a "$LOG_FILE"
|
|
|
|
# Показываем размер и список бэкапов
|
|
log "Размер нового бэкапа: $(du -h "${BACKUP_DIR}/${BACKUP_FILE}" | cut -f1)"
|
|
log "Бэкапы в хранилище:"
|
|
ls -lh "$BACKUP_DIR"/*.tar.gz 2>/dev/null | tee -a "$LOG_FILE"
|
|
|
|
log "=== Бэкап завершен успешно ==="
|
|
|
|
|
|
|
|
2. Сделайте скрипт исполняемым
|
|
|
|
bash
|
|
sudo chmod +x /usr/local/bin/vaultwarden-backup.sh
|
|
|
|
3. Протестируйте вручную
|
|
|
|
bash
|
|
sudo /usr/local/bin/vaultwarden-backup.sh
|
|
|
|
Проверьте, что файл появился:
|
|
|
|
bash
|
|
ls -lh /root/vaultwarden/backups/
|
|
|
|
4. Настройте автоматизацию через Cron
|
|
|
|
Откройте crontab:
|
|
|
|
bash
|
|
sudo crontab -e
|
|
|
|
Добавьте строку для ежедневного бэкапа в 3:00 ночи:
|
|
|
|
cron
|
|
0 3 * * * /usr/local/bin/vaultwarden-backup.sh
|
|
|
|
💡 Почему с остановкой контейнера?
|
|
Vaultwarden использует SQLite. Хотя он устойчив к бэкапам "на лету", остановка контейнера гарантирует 100% консистентность базы данных и исключает риск повреждения архива.
|