Commit Graph
9 Commits
Author SHA1 Message Date
mrleo1nidandClaude Opus 5 5d50b609f6 Настройки сервера и песочницы разложены по разделам
CI / test (push) Successful in 21s
Release / release (push) Successful in 26s
Полторы сотни параметров сплошным списком читать невозможно. Теперь они
разбиты на разделы — «Основное», «PVP и урон», «Убежища», «Античит» и так
далее, — свёрнутые по умолчанию, кроме первого. Поиск раскрывает разделы с
совпадениями и прячет остальные, а раскрытые разделы не схлопываются при
возврате на вкладку.

Категории составлены по настоящим конфигам Build 41 и 42: все 144 ключа
.ini и 270 параметров песочницы раскладываются без остатка. Нумерованные
и однотипные ключи (AntiCheatProtectionType1..24, *Loot, Animal*, Firearm*)
подхватываются по префиксу, а незнакомые попадают в «Прочее» — в новых
версиях игры ключи добавляют, и терять их со страницы нельзя.

Описания параметров панель больше не выдумывает, а берёт из самого
конфига: игра пишет их комментариями на языке сервера. Полный текст — во
всплывающей подсказке, начало — под полем; поиск ищет и по описанию, так
что параметр можно найти по-русски.

Заодно исправлено сохранение файлов с виндовыми переводами строк: панель
переписывала их в LF, и правка одного параметра меняла каждую строку
файла. Проверено на реальном SandboxVars.lua: правка одного значения
меняет ровно одну строку, размер файла не меняется.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-05 03:07:59 +03:00
mrleo1nidandClaude Opus 5 f6eba8c75c Кнопка SteamCMD называет то, что произойдёт
Release / release (push) Successful in 26s
CI / test (push) Successful in 20s
«Установить / обновить через SteamCMD» одинаково выглядела и на чистой
машине, и на готовой. Теперь пока серверных файлов нет — это «Установить
сервер через SteamCMD», после установки — «Обновить сервер через
SteamCMD»; подсказка и вопрос перед запуском меняются вместе с ней.

На чистой машине подсказка вместо требования остановить сервер (его ещё
нет) говорит то, что важно знать заранее: сколько это займёт времени и
места на диске.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-05 02:02:08 +03:00
mrleo1nidandClaude Opus 5 27a2fd6386 Консоль не принимает команды у остановленного сервера
CI / test (push) Successful in 20s
Release / release (push) Successful in 25s
Поле ввода и кнопка «Отправить» были активны всегда, хотя команда уходит
в stdin процесса: у остановленного сервера его просто нет, и панель
отвечала ошибкой уже после отправки. Теперь консоль блокируется, а
подсказка объясняет, почему.

Заодно из вывода убираются управляющие последовательности терминала.
SteamCMD раскрашивает свои сообщения, и в браузере это выглядело как
«[0mWaiting for user info...[0mOK». Чистка стоит на общем пути записи в
буфер: через него идёт и вывод сервера, и SteamCMD, и сообщения панели.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-05 01:56:55 +03:00
mrleo1nidandClaude Opus 5 08908bede8 Кнопка обновления не работала из-за NoNewPrivileges в юните
CI / test (push) Successful in 20s
Release / release (push) Successful in 26s
Панель показывала команду для терминала вместо кнопок обновления и
перезапуска, потому что sudo из неё не запускался вовсе: NoNewPrivileges
запрещает процессу и его потомкам повышать привилегии. Механизм с
sudoers, ради которого всё и делалось, был при этом мёртв.

Убрал эту опцию из юнита, оставив комментарий, почему её здесь быть не
должно. Ограничение прав никуда не делось: в sudoers сервисному
пользователю разрешена ровно одна команда, pzmanager-admin.

Заодно описание релиза перестало показываться сырой разметкой. Раздел
про установку в работающей панели ни к чему, поэтому берётся только
список изменений; блок прокручивается сам, не утягивая страницу, а рядом
появилась ссылка на полное описание.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-05 01:49:02 +03:00
mrleo1nidandClaude Opus 5 3dc8fdae05 Кнопка «Сохранить» активна только при несохранённых изменениях
CI / test (push) Successful in 21s
Release / release (push) Successful in 26s
Раньше она предлагала сохранить даже пустую вкладку: на свежей установке
конфигов ещё нет, полей на странице ноль, а кнопка зовёт нажать себя.

Теперь на всех четырёх вкладках кнопка включается, только когда есть что
записывать, и показывает счётчик изменённых полей. Возврат значения к
исходному снова её гасит — правки считаются сравнением с состоянием на
момент загрузки, а не фактом ввода.

Для модов изменением считается и переключённая галочка, и переставленный
порядок загрузки, и правка списка карт: состояние сводится к строке и
сравнивается со снимком, снятым при открытии вкладки.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-04 20:36:33 +03:00
mrleo1nidandClaude Opus 5 c0797be745 Обновление панели из интерфейса и режим обновления в установщике
CI / test (push) Successful in 21s
Release / release (push) Successful in 27s
Установщик стал идемпотентным: на уже настроенной машине он определяет
установленную версию, останавливает службу, меняет бинарник и поднимает её
обратно, не трогая конфиг, миры и учётные записи. Зависимости при
обновлении не переустанавливаются — это лишние минуты apt.

Кнопки «Обновить» и «Перезапустить панель» появились на вкладке
«Настройки» вместе с текущей версией и описанием нового релиза.

Панель работает от непривилегированного пользователя и не может ни
заменить свой бинарник в /usr/local/bin, ни дёрнуть systemctl. Вместо
того чтобы расширять её права, установщик кладёт root-скрипт
pzmanager-admin и разрешает сервисному пользователю через sudoers ровно
эту одну команду. Скрипт сверяет sha256 скачанного бинарника с
checksums.txt релиза. Если правила sudo нет, кнопки не будет — панель
покажет команду для терминала.

Перед обновлением и перезапуском игровой сервер останавливается штатным
quit: иначе его погасил бы systemd уже в момент рестарта, и ожидание
растянулось бы на таймаут остановки.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-04 19:37:53 +03:00
mrleo1nidandClaude Opus 5 fe517cfb71 Мод-менеджер с галочками и коллекции мастерской
Вместо двух отдельных списков (Workshop ID и Mod ID) — один список модов:
галочка включает мод, перетаскивание задаёт порядок загрузки, кнопка
убирает пакет вместе со всеми его модами.

Чтобы галочкам было за что зацепиться, панель читает mod.info уже
скачанных модов: серверу в Mods нужен именно Mod ID, а он лежит внутри
пакета мастерской и вручную его приходилось искать в описании мода. Пока
мод не скачан, строка помечена и галочка недоступна — Mod ID неизвестен.

Один пакет мастерской может содержать несколько модов; теперь они видны
отдельными строками и включаются по отдельности.

Коллекции: кнопка разворачивает коллекцию Steam в список входящих в неё
модов, сохраняя порядок со страницы коллекции. И мод, и коллекция
принимаются как ссылкой, так и голым идентификатором.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-04 00:36:06 +03:00
mrleo1nidandClaude Opus 5 277ab7af4a Профили серверов: несколько миров с раздельными настройками
Профиль — это отдельный сервер: свой мир, .ini, песочница, набор модов и
лимит памяти JVM. Project Zomboid различает их по -servername, поэтому
файлы профилей не пересекаются. Работает всегда один профиль: серверные
файлы, игровые порты и файл запуска JVM общие, так что переключение
разрешено только на остановленном сервере.

- config: список профилей вместо одиночных server_name/admin_password/
  java_memory; старые поля переносятся в первый профиль при загрузке;
- supervisor: запускает активный профиль и выставляет его -Xmx на каждом
  старте, потому что файл запуска общий;
- бэкапы: архив снимается с одного профиля (мир + его конфиги), имя
  профиля попадает в имя файла, ротация считается по профилям;
- API профилей: список, создание с копированием настроек из другого
  профиля, правка, удаление и переключение активного;
- панель: селектор профиля в шапке и вкладка со списком профилей.

Удаление профиля убирает его только из панели: мир и конфиги остаются на
диске, чтобы случайное нажатие не стоило сохранений.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-04 00:27:12 +03:00
mrleo1nidandClaude Opus 5 d0ff64c272 Веб-панель управления сервером Project Zomboid
Менеджер запускает сервер PZ как дочерний процесс и держит его stdin/stdout:
отсюда живая консоль без RCON, стриминг логов через SSE и корректная
остановка по цепочке quit -> SIGTERM -> SIGKILL для всей группы процессов.
Сам менеджер работает под systemd.

Что входит:
- управление жизненным циклом сервера, автозапуск и автоподъём после падения;
- метрики процесса из /proc и состояние хоста, список игроков онлайн;
- редакторы servertest.ini и SandboxVars.lua, сохраняющие исходное
  форматирование файлов;
- моды: списки Workshop ID и Mod ID с порядком загрузки, названия из Steam;
- бэкапы мира по расписанию и вручную, с ротацией и восстановлением;
- установка и обновление сервера через SteamCMD;
- вход по логину и паролю, первичная настройка по одноразовому коду.

Веб-интерфейс без сборщика, вшит в бинарник через embed.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-03 22:41:11 +03:00