Агент:
- ssh: sshd_config(.d), ключи хоста, authorized_keys root и пользователей
- system: весь /etc/ufw и /etc/default/ufw, /etc/sysctl.conf, /etc/hosts,
свои файлы в /etc/cron.d (пакетные отсекаются через dpkg -S)
- certs: /etc/letsencrypt, /root/.acme.sh; xui: сертификаты по путям из базы
- docker: daemon.json и логины в registry; telegraf: /etc/default/telegraf
- caddy: бинарник бэкапится, если Caddy собран с плагинами
- units: свои systemd-юниты с состоянием enabled/active и drop-in *.service.d
- etc: изменённые конфиги любых пакетов (dpkg conffiles) и свои файлы в /etc,
кроме привязанного к железу и облаку
- в манифесте: часовой пояс, swap, вручную поставленные пакеты; версия
apt-пакета в строке категории
- предупреждения: программы юнитов вне бэкапа, каталоги /opt и /usr/local/bin
без категории, контейнеры без compose
Restore:
- часовой пояс, swap-файл, доустановка вручную поставленных пакетов
- свои юниты включаются и запускаются как на старом сервере
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- новая категория fail2ban: jail.local, jail.d (в т.ч. 3x-ipl.local),
IP-лимит 3x-ui (filter.d/action.d/3x-ipl.conf), свои *.local;
при восстановлении создаются логи 3xipl*.log, без которых jail не поднимается
- xui: свои *.dat из /usr/local/x-ui/bin (ipcheck, discord-*) — на них ссылается
роутинг; штатные geo-файлы релиза не бэкапятся
- recipe 3x-ui больше не очищает /usr/local/x-ui и не стирает восстановленные файлы
- маски (*, ?) в paths и keep_binaries каталога
- provision ставит nftables вместе с fail2ban
- .gitattributes: LF во всех файлах
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- второй канал рядом с ntfy, оба необязательные: токен бота, несколько chat id,
тема форума, свой адрес Bot API
- успешные бэкапы приходят без звука, в сообщениях ссылка на карточку клиента
- тестовая отправка синхронная: в настройках виден результат по каждому каналу
- токен бота не попадает в тексты ошибок и логи
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- ci.yml: gofmt, go vet, тесты, сборка backupctl linux/amd64+arm64 на push и PR
- release.yml: на тег v* — сборка, checksums.txt и публикация релиза через API Gitea
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Один бинарник backupctl:
- server: API для агентов и restore, веб-морда (один админ), SQLite,
ретеншн GFS, heavy-части, уведомления ntfy, раздача agent.sh/restore.sh;
- backup/plan: сбор по каталогу категорий (files/systemd/xui/compose),
горячие дампы Postgres/Mongo/MySQL, снимок x-ui.db, docker-тома,
digest образов, проверка crontab, потоковая отправка tar.zst;
- restore: провижининг на основе vps_installer с теми же версиями пакетов,
recipes 3x-ui/nebula/sing-box нужных версий, восстановление compose
с заливкой дампов и закреплением образов по digest.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>