Панель показывала команду для терминала вместо кнопок обновления и
перезапуска, потому что sudo из неё не запускался вовсе: NoNewPrivileges
запрещает процессу и его потомкам повышать привилегии. Механизм с
sudoers, ради которого всё и делалось, был при этом мёртв.
Убрал эту опцию из юнита, оставив комментарий, почему её здесь быть не
должно. Ограничение прав никуда не делось: в sudoers сервисному
пользователю разрешена ровно одна команда, pzmanager-admin.
Заодно описание релиза перестало показываться сырой разметкой. Раздел
про установку в работающей панели ни к чему, поэтому берётся только
список изменений; блок прокручивается сам, не утягивая страницу, а рядом
появилась ссылка на полное описание.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Установщик по умолчанию раскладывает всё в /opt/pzmanager вместо домашнего
каталога пользователя: серверные файлы, миры, бэкапы и конфиг лежат рядом
одной понятной структурой, а системному пользователю больше не нужен
домашний каталог и shell.
Адрес панели задаётся при установке (PZ_LISTEN), каталог и пользователь —
через PZ_HOME и PZ_USER. Конфиг создаётся только при первой установке,
поэтому повторный запуск установщика обновляет бинарник, не трогая
настройки, миры и учётки.
Адрес теперь занимается до автозапуска игрового сервера: если IP ещё не
поднят или порт занят, менеджер падает сразу с внятной ошибкой, а не
оставляет работающий сервер PZ без панели управления.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Менеджер запускает сервер 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>