Когда я только начала активно разворачивать контейнеры на своём VPS, мне казалось, что бэкапы — это что-то громоздкое, требующее отдельной системы, жёстких дисков и кучи времени. Но однажды ночью, когда я почти потеряла важный контейнер с клиентскими данными после неудачного обновления, я поняла: без автоматизации бэкапов жить просто нельзя. Особенно когда ты работаешь с Docker и у тебя крутятся приложения, важные для бизнеса или личных проектов.
Так начался мой путь с BorgBackup и старым добрым cron. Сейчас расскажу, как я это всё настроила — по-человечески и без заумных скриптов.
Почему не стоит откладывать бэкапы Docker-контейнеров
Если ты когда-либо теряла файлы или сбивала
docker-compose
volume
Вот примеры, что стоит бэкапить в Docker-проектах:
- Файлы сайта (html, css, js, uploads)
- Базы данных (через docker exec mysqldump, например)
- Файлы конфигурации (.env, docker-compose.yml, nginx.conf)
- Сертификаты и ключи (letsencrypt, ssh)
- Docker volumes (их можно тарить напрямую, если монтируются)
Что такое Borg и почему я выбрала именно его
BorgBackup (или просто Borg) — это утилита для дедупликации данных и безопасного создания архивов. Он не просто делает копии файлов — он:
- сохраняет только изменения (экономит место),
- шифрует данные (AES),
- сжимает архивы,
- легко интегрируется с cron и shell.
Я сравнивала его с rsync и duplicity, но Borg оказался проще в настройке и мощнее по возможностям. И ещё — он нативно работает в CLI, что мне особенно близко ❤️
Установка Borg на VPS
sudo apt update sudo apt install borgbackup -y
На локальной машине (или другом VPS — если у вас есть репозиторий для бэкапов) — делаем то же самое.
Создание репозитория для бэкапов
Допустим, у меня есть второй VPS с хранилищем (пусть будет
backup.mydomain.ru
borg init --encryption=repokey borg@backup.mydomain.ru:/home/borg/docker_backups
После этого будет создан шифрованный репозиторий. Пароль стоит сохранить в
~/.borg-passphrase
Что именно бэкапить из Docker
Один из примеров — бэкап volume с данными сайта и конфигурацией:
docker run --rm \ -v my_volume:/volume \ -v $(pwd)/backup:/backup \ alpine \ tar czf /backup/site_backup.tar.gz /volume
Можно и проще: если монтировали volume в файловую систему, бэкапить его как обычную папку.
Автоматизация через cron
Вот пример скрипта
backup_docker.sh
/usr/local/bin/
#!/bin/bash export BORG_PASSPHRASE='мой_пароль' export BORG_REPO=borg@backup.mydomain.ru:/home/borg/docker_backups backup_name="docker-$(date +%Y-%m-%d_%H-%M)" backup_path="/srv/docker_data" borg create --stats --compression lz4 ::${backup_name} ${backup_path} borg prune --keep-daily=7 --keep-weekly=4 --keep-monthly=3 unset BORG_PASSPHRASE
И добавляю в cron:
crontab -e
0 3 * * * /usr/local/bin/backup_docker.sh >> /var/log/backup_docker.log 2>&1
Теперь каждую ночь в 3:00 мои данные в надёжных руках 😊
Восстановление при необходимости
Borg умеет легко восстанавливать данные:
borg list $BORG_REPO borg extract $BORG_REPO::docker-2025-08-14_03-00
Если архив зашифрован — он спросит пароль. После этого все файлы будут извлечены в текущую директорию.
Несколько практических советов
- Раз в месяц проверяйте бэкапы вручную — восстанавливайте хотя бы один архив.
- Используйте мониторинг на лог-файлы — я иногда отправляю алерты в Telegram при ошибках бэкапа.
- Не храните бэкапы на том же VPS. Хоть это и дешевле, но риск выше.
Заключение: автоматизация бэкапов — это не “опционально”
С тех пор как я автоматизировала бэкапы через Borg и cron, я сплю спокойно. Серьёзно. Даже если я обновляю
docker-compose
Если вы, как и я, работаете с Docker на VPS — не откладывайте. Настроить это можно за вечер, а спасти может целый проект.
Вот наглядная таблица сравнения Borg, Rsync, Duplicity и Restic — с точки зрения резервного копирования Docker-контейнеров на VPS:
Характеристика | BorgBackup | Rsync | Duplicity | Restic |
---|---|---|---|---|
🚀 Скорость | Высокая (сжатие + дедупликация) | Средняя | Средняя | Высокая |
💾 Дедупликация данных | ✅ Да | ❌ Нет | ❌ Нет | ✅ Да |
🔐 Шифрование | ✅ AES | ❌ (только через SSH) | ✅ GnuPG | ✅ AES |
📦 Сжатие | ✅ Да (lz4, zlib и др.) | ❌ Нет | ✅ Да | ✅ Да |
🧠 Простота настройки | ⭐⭐ | ⭐⭐⭐ (самый простой) | ⭐⭐ | ⭐⭐ |
📁 Инкрементальные бэкапы | ✅ Да | ✅ Да | ✅ Да | ✅ Да |
🧪 Проверка целостности | ✅ Встроена | ❌ Только вручную | ✅ Через GPG | ✅ Встроена |
🛠 Поддержка SSH | ✅ Да | ✅ Да | ✅ Да | ✅ Да |
⏱ Автоматизация (cron) | ✅ Легко | ✅ Легко | ✅ Легко | ✅ Легко |
☁️ Поддержка облаков | Через sshfs rclone | Через ssh | ✅ Amazon S3, GDrive и др. | ✅ Amazon S3, GDrive и др. |
🐋 Подходит для Docker | ✅ Идеально | ✅ Частично (без архивации) | ✅ Да | ✅ Да |
🔧 Активность проекта | 🟢 Активно развивается | 🟢 Стабильный | 🟡 Меньше обновлений | 🟢 Активно развивается |
Мой личный выбор
Я пробовала все четыре — и осталась с Borg, потому что он:
- не требует костылей,
- шустро архивирует docker volume’ы,
- не “жрёт” лишнее место,
- и просто работает.
Для кого-то rsync подойдёт лучше — если нужен просто копипаст в папку. Но если вам важна надежность, дедупликация и шифрование — Borg — лучший друг разработчицы на VPS 🙂
Забирай бонус
Миграция бесплатна, а за оплату года — ещё месяц сверху.