Files
backup-master/internal/agent/config.go
T
mrleo1nidandClaude Opus 5.5 1d44d067e9 backup-master: сервер бэкапов, агент и восстановление VPS
Один бинарник 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>
2026-10-06 21:52:40 +03:00

36 lines
779 B
Go

// Package agent собирает бэкап на клиенте и отправляет его на сервер.
package agent
import (
"fmt"
"os"
"gopkg.in/yaml.v3"
)
const DefaultConfigPath = "/etc/backup-agent/agent.yaml"
type Config struct {
Server string `yaml:"server"`
Token string `yaml:"token"`
SpoolDir string `yaml:"spool_dir"`
}
func LoadConfig(path string) (*Config, error) {
data, err := os.ReadFile(path)
if err != nil {
return nil, err
}
var c Config
if err := yaml.Unmarshal(data, &c); err != nil {
return nil, fmt.Errorf("%s: %w", path, err)
}
if c.Server == "" || c.Token == "" {
return nil, fmt.Errorf("%s: нужны server и token", path)
}
if c.SpoolDir == "" {
c.SpoolDir = "/var/tmp/backup-agent"
}
return &c, nil
}