Первичная настройка: ключ спрашивается один раз, затем обновления, модули и «Время и сеть»; DEPO одним шагом

- Первая страница — только администратор (и восстановление из копии); ключ продукта — после создания
  администратора, на шаге «Лицензия». Консоль первой загрузки ключ больше не спрашивает (для образа с
  комплектом bj).
- «Подготовка модулей» начинает с проверки обновлений: есть — ставит (bj перезапускается, страница ждёт и
  продолжает), нет — дальше; выпуск, который уже ставили, по кругу не ставится. Затем модули лицензии и
  переход на «Время и сеть» (шаг 12) — часовой пояс клиент выбирает сам, шаг больше не проскакивает.
- Учёт DEPO одним шагом: bj сам находит базу Fancy DEPO на сервере (по таблицам OD_FACES/OD_RESTS), имя
  базы не спрашивается. Один скрипт создаёт логин bj, таблицы обмена и права; по выбору — задание
  обработки в SQL Agent или обработка на сервере bj. Выполнить сразу (логин администратора СУБД не
  сохраняется), скачать скрипт для администратора или подключиться готовым логином.
- Восстановление из копии — только на первой странице, в мастере его больше нет.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_014FsEKyJrYF69Cj9ZXzFLRi
This commit is contained in:
zuevav
2026-10-06 11:42:10 +03:00
parent 96976df549
commit 8905ebc6fb
12 changed files with 763 additions and 239 deletions
+6 -2
View File
@@ -73,6 +73,8 @@ func registerSetup(mux *http.ServeMux, a *admin, rc *RuntimeConfig, svc *Service
mux.HandleFunc("/admin/setup/wizard-depo/tables", h.wizardDepoTables)
mux.HandleFunc("/admin/setup/wizard-depo/job", h.wizardDepoJob)
mux.HandleFunc("/admin/setup/wizard-depo/recheck", h.wizardDepoRecheck)
mux.HandleFunc("/admin/setup/wizard-depo/setup", h.wizardDepoSetup) // подготовка базы одним действием
mux.HandleFunc("/admin/setup/wizard-depo/script.sql", h.wizardDepoScript) // один скрипт для администратора
mux.HandleFunc("/admin/setup/fancy/acc-prefix", h.accPrefix)
mux.HandleFunc("/admin/setup/license", h.saveLicense)
mux.HandleFunc("/admin/setup/license/activate", h.licenseActivate)
@@ -173,6 +175,7 @@ type WizardData struct {
DepoJobDef string // способ обработки по умолчанию для мастера
Fancy *SetupData // шаг 3: общий блок «Обмен Fancy» (тот же, что в настройках)
Sub string // экран шага 3 (учёт DEPO): intro|conn|tables|job|done
DepoCands []string // шаг 3: найдено несколько баз DEPO — выбор
ValidataVer string // версия установленной «Валидаты Клиент L» (пусто — не установлена)
CryptoSvc string // состояние службы bj-crypto (systemctl is-active)
PGSummary string // куда подключена база bj, без пароля
@@ -319,6 +322,7 @@ func (h *setupHandlers) renderWizard(w http.ResponseWriter, r *http.Request) {
}
if step == 3 {
d.Sub = depoWizardSub(r.URL.Query().Get("sub"))
d.DepoCands = depoCands(r.URL.Query().Get("cands"))
if r.URL.Query().Get("sub") == "" && d.Done.Depo {
d.Sub = "done"
}
@@ -1428,8 +1432,8 @@ func (h *setupHandlers) licenseActivate(w http.ResponseWriter, r *http.Request)
}
// дальше — «Подготовка модулей»: модули лицензии ставятся и запускаются, затем возврат туда, откуда пришли
next := safeReturnPath(r.FormValue("return_to"))
if strings.HasPrefix(next, "/admin/wizard") {
next = "/admin/wizard" // мастер сам откроется на первом несделанном шаге — теперь с шагами модулей лицензии
if next == "" || strings.HasPrefix(next, "/admin/wizard") {
next = "/admin/wizard?step=12" // после ключа — «Время и сеть»: часовой пояс клиент выбирает сам
}
http.Redirect(w, r, "/admin/setup/prepare?next="+url.QueryEscape(next), http.StatusSeeOther)
}