Полнота бэкапа: 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>
This commit is contained in:
1 parent
cbd3cde01d
commit
1947b26913
14 files changed
+747
-45
No files matched your search
@@ -17,6 +17,8 @@ const (
|
||||
TypeSystemd = "systemd"
|
||||
TypeXUI = "xui"
|
||||
TypeCompose = "compose"
|
||||
// TypeUnits — свои systemd-юниты (не из пакетов) с состоянием enabled/active.
|
||||
TypeUnits = "units"
|
||||
)
|
||||
|
||||
type Config struct {
|
||||
@@ -33,15 +35,23 @@ type Spec struct {
|
||||
Detect []string `yaml:"detect,omitempty"` // категория активна, если существует хоть один путь
|
||||
Paths []string `yaml:"paths,omitempty"`
|
||||
Exclude []string `yaml:"exclude,omitempty"`
|
||||
// Unowned — маски файлов, которые берутся, только если они не принадлежат
|
||||
// ни одному пакету (dpkg -S): свои файлы в /etc/cron.d, /etc/systemd/system и т.п.
|
||||
Unowned []string `yaml:"unowned,omitempty"`
|
||||
// ModifiedConffiles — добавить конфиги пакетов, изменённые относительно поставки.
|
||||
ModifiedConffiles bool `yaml:"modified_conffiles,omitempty"`
|
||||
|
||||
Service string `yaml:"service,omitempty"`
|
||||
VersionCmd []string `yaml:"version_cmd,omitempty"`
|
||||
VersionRegex string `yaml:"version_regex,omitempty"`
|
||||
Install string `yaml:"install,omitempty"` // recipe: nebula, xui, sing-box-extended
|
||||
KeepBinaries []string `yaml:"keep_binaries,omitempty"` // fallback-копии бинарников
|
||||
EnsureDirs []string `yaml:"ensure_dirs,omitempty"`
|
||||
PostRestore []string `yaml:"post_restore,omitempty"`
|
||||
Dumps []CmdDump `yaml:"dumps,omitempty"`
|
||||
Service string `yaml:"service,omitempty"`
|
||||
VersionCmd []string `yaml:"version_cmd,omitempty"`
|
||||
VersionRegex string `yaml:"version_regex,omitempty"`
|
||||
Install string `yaml:"install,omitempty"` // recipe: nebula, xui, sing-box-extended
|
||||
KeepBinaries []string `yaml:"keep_binaries,omitempty"` // fallback-копии бинарников
|
||||
// KeepBinariesIf — shell-условие: keep_binaries берутся, только если оно истинно
|
||||
// (например, Caddy собран с плагинами и из apt его не вернуть).
|
||||
KeepBinariesIf string `yaml:"keep_binaries_if,omitempty"`
|
||||
EnsureDirs []string `yaml:"ensure_dirs,omitempty"`
|
||||
PostRestore []string `yaml:"post_restore,omitempty"`
|
||||
Dumps []CmdDump `yaml:"dumps,omitempty"`
|
||||
|
||||
// compose
|
||||
Dir string `yaml:"dir,omitempty"`
|
||||
@@ -127,7 +137,7 @@ func (c *Config) Validate() error {
|
||||
continue
|
||||
}
|
||||
switch s.Type {
|
||||
case TypeFiles, TypeSystemd, TypeXUI:
|
||||
case TypeFiles, TypeSystemd, TypeXUI, TypeUnits:
|
||||
case TypeCompose:
|
||||
if s.Dir == "" && s.Project == "" {
|
||||
return fmt.Errorf("категория %q: для compose нужен dir или project", s.Name)
|
||||
|
||||
Reference in new issue
Block a user