2
Goback - простые бэкапы
У меня на сервере куча разношерстных сервисов - блог, старый сайт на wordpress, сервис бюджета на го в докере и несколько телеграм ботов.
Начал по дефолту с баш-скриптов, но меня хватило на 2 скрипта - там в каждом куча дублирующегося кода, отдельно это все надо ставить на крон - это даже не касаясь удобства баша для больших скриптов.

Но должны же быть готовые решения проблемы для настройки?
Нагуглилась утилита borgmatic / borgbackup, которая вроде обещала удобные конфиги в yaml, но ставилась через apt и на каждый сервис приходилось опять писать свои конфиги и вешать на крон отдельно. Конфиги вроде понятные, но все равно нетривиальные и не интуитивны.

Поэтому я сел и написал свои конфиги, которые бы меня полностью устраивали:
global:
backup_dir: "/var/www/backups"
filename_mask: "%name%-%Y%m%d%H%M%S"
default_compression: "gzip"
retention:
daily: 2
weekly: 2
monthly: 2
yearly: 2
backups:
- name: "my-backup"
subdirectory: "project"
source_dir: "/var/www/project"
При этом можно через include_dir сделать подключение конфигов из директории - таким образом для каждого бэкапа можно будет писать свой отдельный файл.
Goback
Ну и поверх уже написанных конфигов я запустил Cursor, чтобы реализовать утилиту, способную выполнять все, что было заложено в конфиги.
Так получился goback - небольшая утилита на Go, которая решает описанные проблемы.
Единый конфиг в YAML — можно настроить всё в одном файле или подключать конфиги автоматически из подпапки. Нужен новый бэкап? Просто добавляем YAML-файл с указанием директории или команды для дампа.
Гибкая настройка бэкапов:
- Бэкап конкретных директорий с исключениями (glob-паттерны)
- Выполнение команд (например,
mysqldumpилиpg_dump) - Разные типы сжатия: gzip, zip, tar, tar.gz или без сжатия
Хуки для автоматизации:
- Pre-hooks — команды, выполняемые перед бэкапом (например, остановка сервиса)
- Post-hooks — команды после бэкапа (например, синхронизация с облаком)
- Хуки могут быть глобальными или для каждого бэкапа отдельно
Умная политика хранения:
- Автоматическое определение якорных точек (daily, weekly, monthly, yearly)
- Настройка количества бэкапов для каждого типа
- Автоматическая очистка старых бэкапов
Один бинарник на 2.5 МБ без внешних зависимостей. Запуск одной командой: ./goback.
Пример конфигурации
global:
backup_dir: "/var/www/backups"
filename_mask: "%name%-%Y%m%d%H%M%S"
default_compression: "gzip"
retention:
daily: 2
weekly: 2
monthly: 2
yearly: 2
post_hooks:
- "rclone sync /var/www/backups remote:backups"
backups:
# Бэкап директории с исключениями
- name: "example-website"
subdirectory: "example"
source_dir: "/var/www/example"
exclude_patterns:
- "var/cache/*"
- "vendor/*"
- "*.log"
- "node_modules/*"
compression: "zip"
# Бэкап базы данных через команду
- name: "database-dump"
subdirectory: "databases"
command: "mysqldump -u user -ppassword database_name"
output_file: "database.sql"
compression: "gzip"
retention:
daily: 7
weekly: 4
monthly: 6
yearly: 2
Автоматическая загрузка конфигов
Одна из самых удобных фич — автоматическая загрузка конфигов из директории. Можно указать include_dir в глобальных настройках, и утилита автоматически подхватит все .yaml и .yml файлы из этой папки:
global:
include_dir: "/var/www/my/backup/backups"
Теперь для каждого нового сервиса достаточно создать один файл в этой директории:
# /var/www/my/backup/backups/blog.yaml
name: "blog"
subdirectory: "blog"
source_dir: "/var/www/blog"
exclude_patterns:
- "var/cache/*"
- "vendor/*"
compression: "zip"
И всё — новый бэкап начинает создаваться по крону вместе с остальными. Постхук синхронизации заливает все в облако.
Ну и немного опций добавил, здесь основные, больше деталей в репозитории.
Использование
Запуск всех бэкапов:
./goback
Запуск конкретного бэкапа:
./goback -b blog
Запуск нескольких бэкапов:
./goback -b blog -b database -b telegram-bot
Использование кастомного конфига:
./goback -config /path/to/config.yaml
Результат
Одним словом — красота. Пара часов в Cursor, и необходимая по запросам утилита готова.
Все бэкапы в одном месте с единой логикой, простое добавление новых бэкапов через YAML, автоматическая ротация и очистка старых бэкапов, гибкая настройка для каждого сервиса, post-hook с синхронизацией в облако работает автоматически.
И всё работает из коробки, без лишних зависимостей и сложных настроек. Скачал бинарник, положил рядом конфиг и можно запускать.

Проект доступен на GitHub: https://github.com/positron48/goback
Там можно найти полную документацию, примеры конфигураций и инструкции по сборке.
P.S. Уже вижу как вместо маркетплейсов готовых приложений все будет создаваться на лету.
Комментариев пока нет
-
Проект Наблюдатель
Проект приурочен к хеллоуину - это статуя одноглазого ктулху с механизированным… -
Универсальный AI Telegram Bot
Хотите в пару действий запустить собственного AI бота для Telegram? -
Анализ истории просмотров Youtube
Задумывались, сколько времени вы проводите за просмотром видео? Давайте считать. -
Image2model с tripo3d и Blender
Иногда хочется, чтобы нарисованный или сгенерированный персонаж стал настоящим -
Локальный эмулятор Telegram
Писали ли вы когда-нибудь телеграм ботов? -
Реанимируем основание вешалок
Есть дома пара вешалок с плечиками, на которых удобно располагается одежда для…