Обновление панели из интерфейса и режим обновления в установщике
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>
This commit is contained in:
2026-09-04 19:37:53 +03:00
co-authored by Claude Opus 5
parent 49d549463a
commit c0797be745
13 changed files with 833 additions and 25 deletions
+35 -2
View File
@@ -28,6 +28,8 @@
ротацией, скачиванием и восстановлением (перед восстановлением
автоматически снимается страховочная копия).
- **Установка и обновление** сервера через SteamCMD прямо из панели.
- **Обновление самой панели** — кнопкой из интерфейса или одной командой в
терминале.
## Как это устроено
@@ -81,8 +83,9 @@ curl -fsSL https://gitea.hsrv.site/mrleo1nid/pzmanager/raw/branch/main/deploy/ge
└── backups/ архивы
```
**Обновление** — та же команда: конфиг, миры и учётные записи не трогаются,
меняется только бинарник.
**Обновление** — та же команда или кнопка в панели (вкладка «Настройки» →
«Версия панели»). Конфиг, миры и учётные записи не трогаются, меняется только
бинарник.
Дальше:
@@ -187,6 +190,36 @@ Mod ID, который нужен серверу, лежит внутри сам
`server_name`, `admin_password` и `java_memory` превращаются в первый профиль
при первом запуске.
## Обновление
Панель показывает свою версию и следит за релизами в репозитории: вкладка
«Настройки» → «Версия панели». Если вышла новая версия, там появляется кнопка
**«Обновить до …»**.
Обновление из интерфейса устроено так. Сама панель работает от
непривилегированного пользователя и не может ни заменить свой бинарник в
`/usr/local/bin`, ни дёрнуть `systemctl`. Поэтому установщик кладёт рядом
маленький root-скрипт `/usr/local/bin/pzmanager-admin` и разрешает сервисному
пользователю ровно его одну команду:
```
pzserver ALL=(root) NOPASSWD: /usr/local/bin/pzmanager-admin
```
Скрипт качает бинарник нужной архитектуры, сверяет sha256 с `checksums.txt`
релиза, подменяет файл и перезапускает службу. Панель к этим файлам доступа не
имеет — она может только попросить выполнить `update` или `restart`.
Если правило sudo не установлено (панель поставлена вручную или в системе нет
`sudo`), кнопка не появится, а рядом будет показана команда для терминала:
```bash
curl -fsSL https://gitea.hsrv.site/mrleo1nid/pzmanager/raw/branch/main/deploy/get.sh | sudo bash
```
Обновление и перезапуск панели останавливают игровой сервер — панель делает
это сама, штатной командой `quit`, чтобы мир успел сохраниться.
## Доступ снаружи
Панель управляет сервером, поэтому наружу её лучше не выставлять голой. Два