Проект

Общее

Профиль

Локальные бэкапы Vaultwarden » Локальные бэкапы Vaultwarden.txt

Redmine Admin, 25.03.2026 10:34

 
Вариант 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% консистентность базы данных и исключает риск повреждения архива.
    (1-1/1)