Агенты подхватывают изменения с сервера: каталог и самообновление
CI / test (push) Successful in 1m29s

- сервер отдаёт агенту итоговый каталог (встроенный каталог сервера +
  переопределения клиента); если каталог не подходит версии агента —
  встроенный каталог агента и предупреждение
- самообновление перед бэкапом: версия сервера новее → скачивание с того же
  сервера (только /dl/...), проверка sha256 и запуска новой версии, подмена
  с откатом, перезапуск через exec; при ошибке бэкап идёт текущей версией
- галочка «Автообновление» у клиента (по умолчанию включена), версия агента
  в списке и карточке, отставшие подсвечены; версия сервера в шапке
- миграция существующей базы: колонки auto_update и agent_version
- backupctl backup --no-update

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
mrleo1nidandClaude Opus 5.5 committed 2026-10-17 15:27:31 +03:00
1 parent 1947b26913
commit 488abc2d34
21 files changed
+674 -51

No files matched your search

+7 -1
View File
@@ -25,6 +25,8 @@ type Config struct {
MaxUpload int64 // максимальный размер одной части, байт
// TrustProxy — брать IP клиента из X-Forwarded-For (за Caddy).
TrustProxy bool
// Version — версия сервера; до неё обновляются агенты с включённым автообновлением.
Version string
}
type Server struct {
@@ -35,6 +37,9 @@ type Server struct {
uploadMu sync.Mutex
uploads map[int64]bool // бэкапы, в которые сейчас идёт загрузка
shaMu sync.Mutex
shaCache map[string]binarySum // sha256 раздаваемых бинарников
}
func New(cfg Config) (*Server, error) {
@@ -54,7 +59,8 @@ func New(cfg Config) (*Server, error) {
st.Close()
return nil, err
}
return &Server{cfg: cfg, st: st, pages: pages, login: newLoginLimiter(), uploads: map[int64]bool{}}, nil
return &Server{cfg: cfg, st: st, pages: pages, login: newLoginLimiter(), uploads: map[int64]bool{},
shaCache: map[string]binarySum{}}, nil
}
func (s *Server) Close() error { return s.st.Close() }