Files
backup-master/internal/catalog/default.yaml
T
mrleo1nidandClaude Opus 5.5 1947b26913
CI / test (push) Successful in 1m27s
Release / release (push) Successful in 1m26s
Полнота бэкапа: SSH, весь UFW, свои юниты, конфиги пакетов, системные параметры
Агент:
- 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>
2026-10-17 15:19:34 +03:00

198 lines
7.4 KiB
YAML
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Встроенный каталог категорий. Переопределяется конфигом клиента в веб-морде:
# категория с тем же name заменяется целиком, `- {name: X, disabled: true}` отключает её.
auto_compose: true
exclude:
- "*.swp"
categories:
- name: system
type: files
paths:
- /etc/ufw # правила, before/after.rules (NAT, форвардинг), /etc/ufw/sysctl.conf
- /etc/default/ufw
- /var/spool/cron/crontabs # crontab root (sudo crontab -e) и пользователей
- /usr/local/sbin/ban.sh
- /etc/sysctl.conf # BBR, форвардинг и прочие правки ядра
- /etc/sysctl.d
- /etc/hosts
# свои задания в /etc/cron.d (пакетные пропускаются)
unowned: ["/etc/cron.d/*"]
post_restore:
- "ufw reload || true"
- "sysctl --system >/dev/null || true"
# SSH: ключи входа, ключи хоста (клиенты не увидят «host key changed») и конфиг sshd
# (порт, запрет паролей). После распаковки sshd проверяется и перезапускается.
- name: ssh
type: files
paths:
- /etc/ssh/sshd_config
- /etc/ssh/sshd_config.d
- /etc/ssh/ssh_host_*
- /root/.ssh/authorized_keys
- /home/*/.ssh/authorized_keys
restore_after: [system]
post_restore:
- "sshd -t && systemctl daemon-reload && (systemctl restart ssh.socket 2>/dev/null; systemctl restart ssh) || echo '!!! sshd: конфиг не прошёл проверку, оставлен старый процесс — проверьте sshd -t'"
# сертификаты, выпущенные вне Caddy: certbot и acme.sh (его использует x-ui для SSL панели)
- name: certs
type: files
paths: [/etc/letsencrypt, /root/.acme.sh]
- name: xui
type: xui
detect: [/usr/local/x-ui/x-ui]
paths:
- /etc/x-ui
- /root/cert
# свои geo-файлы (ipcheck.dat, discord-*.dat и т.п.): на них ссылается роутинг,
# без них Xray не стартует; штатные geo*.dat приходят с релизом 3x-ui
- /usr/local/x-ui/bin/*.dat
exclude:
- "/etc/x-ui/x-ui.db*"
- "/usr/local/x-ui/bin/geoip.dat"
- "/usr/local/x-ui/bin/geosite.dat"
- "/usr/local/x-ui/bin/geo*_IR.dat"
- "/usr/local/x-ui/bin/geo*_RU.dat"
- "*.bak"
service: x-ui
version_cmd: [/usr/local/x-ui/x-ui, -v]
install: xui
keep_binaries: [/usr/local/x-ui, /usr/bin/x-ui, /etc/systemd/system/x-ui.service]
# fail2ban: свои jail'ы (jail.local, jail.d/*.local) и IP-лимит 3x-ui (3x-ipl).
# Штатные filter.d/action.d ставит пакет — берём только файлы 3x-ui и свои *.local.
- name: fail2ban
type: systemd
detect: [/etc/fail2ban]
paths:
- /etc/fail2ban/jail.local
- /etc/fail2ban/jail.d
- /etc/fail2ban/fail2ban.local
- /etc/fail2ban/fail2ban.conf # 3x-ui включает в нём allowipv6
- /etc/fail2ban/filter.d/3x-ipl.conf
- /etc/fail2ban/action.d/3x-ipl.conf
- /etc/fail2ban/filter.d/*.local
- /etc/fail2ban/action.d/*.local
service: fail2ban
restore_after: [system, xui]
post_restore:
# jail 3x-ipl читает лог x-ui: без файла fail2ban не поднимет jail
- "if ls /etc/fail2ban/jail.d/3x-ipl* >/dev/null 2>&1; then mkdir -p /var/log/x-ui && touch /var/log/x-ui/3xipl.log /var/log/x-ui/3xipl-banned.log; fi"
- name: nebula
type: systemd
detect: [/etc/nebula]
paths: [/etc/nebula, /etc/systemd/system/nebula.service]
service: nebula
version_cmd: [/usr/local/bin/nebula, -version]
install: nebula
keep_binaries: [/usr/local/bin/nebula, /usr/local/bin/nebula-cert]
- name: caddy
type: systemd
detect: [/etc/caddy/Caddyfile]
paths: [/etc/caddy, /var/www, /var/lib/caddy/.local/share/caddy]
service: caddy
# Caddy с плагинами (xcaddy, caddy add-package) из apt не вернуть — тогда бэкапим бинарник
keep_binaries: [/usr/bin/caddy]
keep_binaries_if: "caddy list-modules --packages 2>/dev/null | grep -Eq 'Non-standard modules: [1-9]'"
- name: telegraf
type: systemd
detect: [/etc/telegraf]
paths: [/etc/telegraf, /etc/sudoers.d/telegraf, /etc/default/telegraf]
service: telegraf
# настройки демона docker (логи, MTU, IPv6) и логины в приватные registry
- name: docker
type: systemd
paths: [/etc/docker/daemon.json, /root/.docker/config.json]
service: docker
- name: sing-box-warp
type: systemd
detect: [/opt/sing-box-warp]
paths:
- /opt/sing-box-warp
- /etc/sing-box-warp
- /etc/systemd/system/sing-box-warp.service
- /etc/sysctl.d/99-sing-box-warp.conf
service: sing-box-warp
version_cmd: [/usr/local/bin/sing-box, version]
version_regex: 'version\s+(\S+)'
install: sing-box-extended
keep_binaries: [/usr/local/bin/sing-box]
ensure_dirs: [/var/cache/sing-box-warp]
- name: scripts
type: files
paths: [/var/scripts, /usr/local/bin/update-geosite.sh]
# Страховка: всё своё в /etc, не описанное выше, — изменённые конфиги любых пакетов
# (dpkg conffiles: nginx, limits.conf, journald и т.п.) и файлы, не принадлежащие
# ни одному пакету (ключи wireguard, свои конфиги). Привязанное к железу и облаку
# (сеть, диски, cloud-init, зеркала apt, загрузчик) исключено — на новом VPS оно своё.
- name: etc
type: files
modified_conffiles: true
unowned: ["/etc/*/*", "/etc/*/*/*"]
exclude:
- /etc/netplan
- /etc/network
- /etc/NetworkManager
- /etc/systemd/network
- /etc/systemd/system # юниты собирает категория units
- /etc/cloud
- /etc/landscape
- /etc/ubuntu-advantage
- /etc/apt
- /etc/udev
- /etc/fstab
- /etc/default/grub
- /etc/default/grub.d
- /etc/initramfs-tools
- /etc/iscsi
- /etc/lvm
- /etc/mdadm
- /etc/multipath
- /etc/dhcp
- /etc/alternatives
- /etc/apparmor.d/cache
- /etc/ssl/certs
- /etc/ssl/private/ssl-cert-snakeoil.key
- /etc/sudoers.d/90-cloud-init-users
- /etc/machine-id
- /etc/hostname
- /etc/resolv.conf
- name: pnvpanel
type: compose
dir: /opt/PnvPanel
- name: stoat
type: compose
dir: /opt/stoat
skip_services: [rabbit, redis]
heavy_paths: [data/minio]
- name: stoat-mbot
type: compose
dir: /opt/stoat-mbot
restore_after: [stoat]
- name: psiphon
type: compose
dir: /opt/psiphon
disabled: true
# Свои systemd-юниты, не описанные выше и не из пакетов, — с состоянием enabled/active,
# и drop-in переопределения пакетных юнитов (*.service.d/override.conf).
- name: units
type: units
unowned: ["/etc/systemd/system/*.service", "/etc/systemd/system/*.timer"]
paths: ["/etc/systemd/system/*.service.d", "/etc/systemd/system/*.timer.d"]