Шифрованный бэкап Docker volumes через rclone

Контейнеры легко поднять заново — данные нет. Immich, Vaultwarden, Nextcloud, PostgreSQL: всё это volume и каталоги на диске. Ниже — схема шифрованного бэкапа через rclone crypt, которую можно повесить на cron.

1. Установка rclone

На AlmaLinux / Rocky / RedOS:

sudo dnf install -y rclone
# или официальный скрипт:
curl https://rclone.org/install.sh | sudo bash
rclone version

2. Настройка remote

Интерактивно:

rclone config

Создайте, например:

  1. s3backup — реальное хранилище (S3-совместимое, Wasabi, Selectel, Yandex Object Storage и т.п.);
  2. cryptbackup — тип crypt, в качестве remote укажите s3backup:my-homelab и задайте пароль шифрования.

Шифрование на стороне клиента: провайдер видит только blob’ы.

3. Что бэкапить

Остановите сервисы на время консистентного снимка БД или используйте pg_dump / штатные дампы. Для файловых volume достаточно:

# пример путей на домашнем сервере
BACKUP_SRC="/data/backups/stage"
mkdir -p "$BACKUP_SRC"

# снимок важных каталогов (подставьте свои пути)
rsync -a --delete /home/user/vaultwarden/data/ "$BACKUP_SRC/vaultwarden/"
rsync -a --delete /home/user/uptime-kuma/data/ "$BACKUP_SRC/uptime-kuma/"
# большие медиабиблиотеки планируйте отдельным заданием

Для named volumes Docker:

docker run --rm \
  -v immich_pgdata:/from:ro \
  -v "$BACKUP_SRC":/to \
  alpine ash -c "cd /from && tar czf /to/immich_pgdata.tgz ."

4. Отправка в crypt-remote

rclone sync "$BACKUP_SRC" cryptbackup:daily \
  --fast-list \
  --transfers=4 \
  --checkers=8 \
  --log-file=/var/log/rclone-backup.log \
  --log-level INFO

Проверка:

rclone ls cryptbackup:daily
rclone size cryptbackup:daily

5. Cron / systemd timer

cat > /etc/cron.d/rclone-homelab << 'EOF'
30 3 * * * root /usr/local/sbin/homelab-backup.sh >/dev/null 2>&1
EOF

Скрипт /usr/local/sbin/homelab-backup.sh — ваши rsync/tar + rclone sync. Права 700, владелец root.

6. Восстановление

rclone copy cryptbackup:daily/vaultwarden /tmp/restore-vw
# затем верните файлы в каталог сервиса и поднимите compose

Правила, которые спасают

  • Храните пароль crypt отдельно от сервера (иначе это не бэкап, а «копия рядом»).
  • Делайте 3-2-1: локальная копия + удалённая + проверка restore раз в квартал.
  • Большие медиа (Immich library) лучше версионировать инкрементально или отдельным job’ом.

Итог: volumes уезжают в облако уже зашифрованными, а восстановление — обычный rclone copy + docker compose up -d.