Files
pzmanager/README.md
T
mrleo1nidandClaude Opus 5 c384d60416 Добавлены лицензия MIT и бейджи в README
Лицензия — MIT: код можно использовать свободно, гарантий никаких.
Бейджи: лицензия, версия Go, платформа и дата последнего коммита
(последний тянется с shields.io через Gitea-провайдер).

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-03 23:55:58 +03:00

209 lines
11 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# PZ Manager
[![License: MIT](https://img.shields.io/badge/license-MIT-green.svg)](LICENSE)
[![Go](https://img.shields.io/badge/Go-1.24%2B-00ADD8?logo=go&logoColor=white)](https://go.dev/)
[![Platform](https://img.shields.io/badge/platform-Linux%20%2F%20Ubuntu-EEEEEE?logo=ubuntu&logoColor=white&labelColor=555555)](https://ubuntu.com/)
[![last commit](https://img.shields.io/gitea/last-commit/mrleo1nid/pzmanager?gitea_url=https%3A%2F%2Fgitea.hsrv.site&logo=gitea&logoColor=white)](https://gitea.hsrv.site/mrleo1nid/pzmanager/commits/branch/main)
Веб-панель для управления выделенным сервером Project Zomboid на Ubuntu.
Один бинарник без зависимостей: веб-интерфейс вшит внутрь, Node.js и Python на
сервере не нужны.
## Что умеет
- **Управление сервером** — запуск, остановка (через команду `quit`, мир
сохраняется), перезапуск, автоподъём после падения, автозапуск вместе с
менеджером.
- **Живая консоль** — вывод сервера в реальном времени и отправка любых команд
(`players`, `save`, `servermsg`, `kickuser`, …).
- **Мониторинг** — состояние, аптайм, CPU и память процесса сервера, свободные
ОЗУ и диск на хосте, список игроков онлайн.
- **Редактор конфигов** — `servertest.ini` и `SandboxVars.lua` прямо в
браузере, с поиском по параметрам и сохранением комментариев в файле.
- **Моды** — списки Workshop ID и Mod ID с порядком загрузки, названия модов
подтягиваются из мастерской Steam.
- **Бэкапы** — ручные и по расписанию, с ротацией, скачиванием и
восстановлением (перед восстановлением автоматически снимается страховочная
копия).
- **Установка и обновление** сервера через SteamCMD прямо из панели.
## Как это устроено
Менеджер запускает `start-server.sh` как дочерний процесс и держит его stdin,
stdout и stderr. Отсюда следует всё остальное: команды консоли пишутся прямо в
stdin (RCON не нужен), логи стримятся в браузер через SSE, а остановка идёт по
цепочке `quit``SIGTERM``SIGKILL` для всей группы процессов.
Сам менеджер живёт под systemd, который его и перезапускает.
```
systemd ──> pzmanager ──> start-server.sh ──> java (GameServer)
├── HTTP + SSE ──> браузер
└── SteamCMD, бэкапы, конфиги
```
## Быстрый старт
Собрать бинарник (нужен Go 1.24+):
```bash
make build-linux
```
Скопировать `pzmanager` и папку `deploy/` на сервер и запустить установщик:
```bash
sudo ./deploy/install.sh
```
Установщик заведёт пользователя `pzserver`, поставит зависимости (SteamCMD,
JRE, SDL2), положит бинарник в `/usr/local/bin` и включит systemd-юнит.
Дальше:
1. Посмотрите код первичной настройки:
```bash
journalctl -u pzmanager -n 30 --no-pager
```
2. Откройте панель. По умолчанию она слушает только `127.0.0.1:8080`, так что
зайти на неё можно через SSH-туннель:
```bash
ssh -L 8080:127.0.0.1:8080 пользователь@сервер
```
Затем откройте <http://127.0.0.1:8080> и создайте администратора, введя код
из журнала.
3. Во вкладке «Обзор» нажмите **Установить / обновить через SteamCMD** и
дождитесь окончания — прогресс виден во вкладке «Консоль».
4. Запустите сервер. При первом запуске PZ создаст `~/Zomboid/Server/*.ini` —
после этого станут доступны вкладки «Конфиг сервера», «Песочница» и «Моды».
Не забудьте открыть игровые порты:
```bash
sudo ufw allow 16261/udp
sudo ufw allow 16262/udp
```
## Доступ снаружи
Панель управляет сервером, поэтому наружу её лучше не выставлять голой. Два
разумных варианта:
**SSH-туннель (по умолчанию)** — ничего настраивать не нужно, панель слушает
только localhost.
**HTTPS через reverse-proxy** — если панель нужна с телефона. Настройте nginx с
сертификатом (например, от Let's Encrypt):
```nginx
server {
listen 443 ssl;
server_name pz.example.com;
ssl_certificate /etc/letsencrypt/live/pz.example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/pz.example.com/privkey.pem;
location / {
proxy_pass http://127.0.0.1:8080;
proxy_http_version 1.1;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-Proto $scheme;
# Живая консоль работает через Server-Sent Events.
proxy_buffering off;
proxy_read_timeout 24h;
}
}
```
И запустите менеджер с флагом `--secure-cookies`, чтобы cookie сессии
передавалась только по HTTPS (добавьте флаг в `ExecStart` юнита).
## Команды
```bash
pzmanager serve # запустить панель (команда по умолчанию)
pzmanager useradd <логин> # создать пользователя панели
pzmanager passwd <логин> # сменить пароль
pzmanager users # список пользователей
```
Флаги: `--config <путь>`, `--listen <адрес>`, `--secure-cookies`.
## Конфигурация
Файл `~/.config/pzmanager/config.yaml` создаётся при первом запуске. Всё, что в
нём есть, правится и через вкладку «Настройки».
```yaml
listen: 127.0.0.1:8080 # адрес веб-панели
data_dir: /home/pzserver/.local/share/pzmanager
server_dir: /home/pzserver/pzserver # куда SteamCMD ставит сервер
zomboid_dir: /home/pzserver/Zomboid # миры, конфиги и логи игры
steamcmd_path: "" # пусто — найти в PATH или скачать
server_name: servertest # servertest -> servertest.ini
admin_password: "" # пароль админа игрового сервера
java_memory: 4g # -Xmx для JVM
extra_args: [] # доп. аргументы start-server.sh
autostart: false # поднимать сервер вместе с менеджером
autorestart: true # поднимать сервер после падения
stop_timeout: 1m30s # сколько ждать после quit до SIGTERM
log_buffer_lines: 5000 # строк консоли в памяти
backup:
dir: /home/pzserver/pzbackups
schedule: 6h # 0 — отключить автобэкапы
keep: 20 # сколько архивов хранить
stop_server: false # останавливать сервер на время бэкапа
```
Изменения `listen` применяются после `systemctl restart pzmanager`; остальные —
при следующем запуске игрового сервера.
## Бэкапы
В архив попадают `~/Zomboid/Saves` и `~/Zomboid/Server` (миры и конфиги). Имя
файла — `pz-ГГГГММДД-ЧЧММСС[-пометка].tar.gz`.
Бэкап на живом сервере технически корректен, но снимок может отставать от
состояния мира в памяти. Если хочется гарантированной согласованности —
включите `backup.stop_server` (игроков на время бэкапа выкинет) или отправляйте
`save` в консоль перед ручным бэкапом.
Восстановление требует остановленного сервера. Перед распаковкой менеджер сам
делает страховочную копию с пометкой `pre-restore`.
## Безопасность
- Пароли пользователей панели хранятся в виде bcrypt-хешей в
`data_dir/users.json` (права 0600).
- Сессии живут только в памяти: перезапуск менеджера разлогинивает всех.
- Первого администратора можно создать только с одноразовым кодом из журнала.
- Изменяющие запросы требуют собственный заголовок — это защита от CSRF.
- Панель не выполняет произвольные команды хоста: всё, что она умеет, — это
управление процессом сервера, SteamCMD и файлами в своих директориях.
Тем не менее доступ к панели равносилен доступу к игровому серверу, так что
пароль стоит выбрать не короче того, что вы поставили бы на SSH.
## Разработка
```bash
make test # тесты
make vet # go vet
make run # локальный запуск с конфигом в ./dev
```
Веб-интерфейс — обычные HTML, CSS и JS в `web/static`, без сборщика; при
`go build` они вшиваются в бинарник через `embed`.
## Лицензия
[MIT](LICENSE) — делайте с кодом что угодно, но без каких-либо гарантий.