Документация

Версия 0.6. Здесь только то, что уже работает. Чего ещё нет, перечислено в конце раздела «Что это».

Что это

Stokehold GSM это веб-панель для игровых серверов поверх LinuxGSM. Один бинарник и SQLite, без Docker, PHP и баз данных. Панель вызывает скрипты LinuxGSM и показывает результат, поддерживает всё, что умеет LinuxGSM (143 игры на момент проверки). Игровые серверы работают под обычными пользователями Linux, как в самом LinuxGSM.

Из двух частей: панель (веб-интерфейс, без прав root) и helper (служба от root с фиксированным набором операций; именно она запускает команды LinuxGSM). Панель не может ничего, кроме того, что разрешено helper.

Чего пока нет: бэкапов во внешнее S3, переноса сервера между машинами, клиентских аккаунтов для хостингов. Игровые инструменты и разбор данных серверов проверены на образцах и в тестах, на живых игровых серверах прогон идёт постепенно.

Установка

Нужен Linux с systemd и OpenSSL 3 (Ubuntu 22.04 и новее, Debian 12 и новее), процессор x86_64 или ARM64, доступ root. На Windows и macOS панель напрямую не ставится: нужен VPS с Linux или WSL2 (см. главную страницу).

sudo apt install -y curl openssl && curl -fsSL https://dl.stokehold.online/install.sh | sudo bash

Что делает установщик:

  1. проверяет подпись релиза и хеши файлов, при любой ошибке останавливается, ничего не меняя;
  2. ставит stokehold и stokehold-helper в /usr/local/bin;
  3. создаёт пользователя stokehold, каталог /var/lib/stokehold и файл настроек /etc/stokehold/stokehold.env;
  4. создаёт и запускает службы stokehold-helper и stokehold;
  5. открывает порт 8443 в ufw, если он включён, и печатает ссылку первой настройки.

Прочитать установщик заранее: скачайте install.sh и запустите sudo bash install.sh. Параметры установщика: --channel stable|beta, --version vX.Y.Z, --no-start.

Первый вход

  1. В конце установки в консоли появится ссылка вида https://АДРЕС:8443/setup?code=…. Откройте её в браузере. Код в ссылке одноразовый.
  2. Браузер предупредит о сертификате: панель создаёт собственный, пока у вас нет домена. Нажмите «Дополнительно» и продолжите. Отпечаток сертификата установщик печатает рядом со ссылкой, его можно сверить.
  3. Введите почту и пароль владельца (не короче 10 символов). Страница работает один раз: после создания владельца открыть её повторно нельзя.
  4. Сразу включите двухфакторную защиту: «Безопасность» → «Начать настройку». Добавьте секрет в приложение-аутентификатор (Aegis, FreeOTP, любое TOTP), введите шестизначный код и нажмите «Включить».
Ссылку потеряли? Код всегда есть в журнале: sudo journalctl -u stokehold | grep "setup code". Каждый перезапуск службы до создания владельца выдаёт новый код. Если страница не открывается, откройте TCP-порт 8443 у хостинга.

Подхват существующих серверов

Если на машине уже стоит сервер LinuxGSM, переустанавливать ничего не нужно. Панель не вправе управлять чужими аккаунтами сама: владелец машины вносит имя пользователя в файл, который читает helper и который панель изменить не может.

echo factorio | sudo tee -a /etc/stokehold/adopt.conf

Затем на странице «Добавить сервер» введите это имя пользователя Linux, нажмите «Найти серверы» и добавьте нужный скрипт (fctrserver, mcserver и т. п.). Файл читается при каждом запросе, перезапуск не нужен. Подхваченный сервер получает режим adopted. Панель ничего не устанавливает в такой аккаунт и не создаёт пользователей. Имена: одно на строку, без пробелов, не root.

Новый сервер из каталога

«Установить новый сервер»: выберите игру из каталога LinuxGSM и название. Панель создаст отдельного пользователя gs_…, поставит пакеты, которые LinuxGSM указывает для игры (на Ubuntu и Debian), и установит сервер. Ход установки виден на странице, идёт одна установка за раз. Если не удалось, причина в журнале: повторите с тем же или другим названием.

  • Для Steam-игр LinuxGSM иногда просит дополнительные пакеты: поставьте их вручную по подсказке.
  • Для Minecraft перед первым запуском примите EULA: в редакторе файлов откройте serverfiles/eula.txt и поставьте eula=true.

Действия с сервером

В списке серверов у каждого есть кнопки. Результат команды показан на странице, каждое действие пишется в журнал.

КнопкаКоманда LinuxGSMЧто делает
Статусdetailsпоказывает состояние и параметры сервера
Запуститьstartзапускает сервер
Остановитьstopостанавливает сервер; сразу после запуска может не успеть остановить штатно, тогда процесс будет убит
Перезапуститьrestartостанавливает и запускает
Бэкапbackupделает копию; LinuxGSM останавливает сервер на время бэкапа и запускает его снова
Проверить обновлениеcheck-updateпроверяет, вышла ли новая версия игры

Расписания

У каждого сервера есть страница «Расписание»: бэкап, перезапуск или проверка обновления каждый день в заданное время (по UTC) или каждые N часов. Если панель была выключена в назначенное время, действие выполнится один раз после запуска. Результат последнего запуска виден на той же странице. Менять расписание могут owner и admin, viewer только смотрит.

Бэкап LinuxGSM останавливает игровой сервер, поэтому выбирайте время без игроков.

Редактор конфигов

Ссылка «Файлы» у сервера открывает правку конфигов. Доступны только каталоги serverfiles и lgsm/config-lgsm и только текстовые файлы до 256 КБ. Перед сохранением панель оставляет копию прошлой версии рядом (.stokehold-bak). Изменения вступают в силу после перезапуска сервера. Редактор не создаёт новых файлов и не следует символическим ссылкам. Файлы видят и меняют только owner и admin: в конфигах бывают пароли.

Файловый менеджер

Ссылка «Файлы» у сервера открывает всю папку игрового пользователя: можно ходить по папкам, создавать папки и пустые файлы, загружать и скачивать файлы, переименовывать, перемещать и удалять. Доступно ролям owner и admin. Таблица сортируется по имени, размеру и дате изменения, папки всегда идут первыми.

  • Загрузка: несколько файлов сразу, до 256 МБ за раз. Файл появляется на месте только после последней части, оборванная загрузка не портит старую версию.
  • Скачивание: потоком, размер не ограничен.
  • Правка: у текстовых файлов внутри serverfiles и lgsm/config-lgsm (до 256 КБ) есть ссылка «Изменить» с копией прошлой версии в .stokehold-bak.
  • Удаление: всегда с отдельным подтверждением, можно выбрать несколько элементов (до 200). Корзины нет, папки удаляются целиком.
Менеджер видит только домашнюю папку игрового пользователя и не выходит из неё ни через .., ни через символические ссылки. Скрыты .ssh, .bashrc, .profile и authorized_keys. Все изменения и скачивания пишутся в журнал.

Мониторинг

Страница «Мониторинг» показывает процессор, память, диск, нагрузку за минуту и состояние каждого сервера (в том числе число игроков, если LinuxGSM его печатает для этой игры). Раз в минуту панель снимает замер и спрашивает у LinuxGSM details. В памяти хранятся последние 60 замеров, после перезапуска панели график начинается заново. Работает на Linux, потому что читает /proc. Мониторинг открыт всем тарифам.

Пользователи и роли

РольЧто может
ownerвсё: пользователи, лицензия, серверы, расписания, файлы
adminуправление серверами, расписаниями и файлами
viewerтолько чтение: статус и проверка обновления

Владелец создаёт пользователей на странице «Пользователи»: пароль генерируется и показывается один раз, передайте его лично. Там же сброс пароля и 2FA и удаление. Последнего владельца удалить нельзя. Каждый меняет свой пароль на странице «Безопасность», остальные его сессии при этом завершаются. Язык интерфейса переключается RU/EN в шапке.

Безопасность

  • Пароли хранятся как argon2id. После нескольких неверных паролей учётная запись блокируется на 15 минут, число попыток с адреса ограничено.
  • Двухфакторная защита TOTP: каждый код работает один раз. Отключение требует пароль.
  • Защита от CSRF, строгая политика содержимого страниц, cookie с флагами HttpOnly, SameSite и Secure.
  • Привилегированный helper принимает только фиксированный набор операций и выполняет их для разрешённых пользователей. Все его операции пишутся в журнал (journalctl -u stokehold-helper).
  • Файлы серверов открываются через один модуль, защищённый от выхода за каталог.
  • Игровые серверы работают под обычными пользователями, без контейнеров: это проще и легче, но изоляция слабее, чем в Docker.

HTTPS и домен

Сразу после установки панель отвечает по HTTPS на порту 8443 со своим сертификатом (браузер предупредит один раз). Это запасной вход, пока нет домена.

Домен из настроек (Let's Encrypt)

«Настройки» → «Домен и HTTPS»: введите домен и нажмите «Получить сертификат». Панель проверит, что A-запись домена указывает на этот сервер, откроет порты 80 и 443 (в ufw, если он включён) и сама получит доверенный сертификат Let's Encrypt; он продлевается сам. После этого панель открывается по https://домен без предупреждений, и на ней работают приложение на телефон и уведомления.

  • Если порт 80 или 443 занят другой программой (Caddy, nginx), панель так и скажет. Тогда либо остановите её, либо оставьте её прокси к панели (ниже).
  • Домен за прокси (например, оранжевое облако Cloudflare) не проходит проверку DNS: отметьте «Проверку DNS пропустить».
  • Запасной вход на 8443 продолжает работать.

Свой обратный прокси

Если на машине уже есть Caddy или nginx, можно оставить его:

panel.example.com {
    reverse_proxy 127.0.0.1:8080
}

Затем в /etc/stokehold/stokehold.env замените -tls-listen :8443 на -trust-proxy и перезапустите:

sudo systemctl restart stokehold

Не включайте -trust-proxy без прокси: заголовок с адресом можно подделать.

Приложение на телефон и уведомления

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

  • Android (Chrome): меню ⋮ → «Установить приложение».
  • iPhone (Safari): «Поделиться» → «На экран Домой». Уведомления на iPhone работают только в установленном приложении, iOS 16.4 и новее.
  • Компьютер (Chrome, Edge): значок установки в адресной строке.

Уведомления включаются на каждом устройстве отдельно: «Безопасность» → «Уведомления на этом устройстве». Приходят: сервер упал или запустился, вышла новая версия панели (только владельцу), аккаунт заблокирован после неверных паролей (только владельцу). Уведомления идут через push-службу браузера (Google, Mozilla, Apple) в зашифрованном виде; наш сервер в этом не участвует.

Автоперезапуск при падении

Если сервер остановился сам, без команды из панели, расписания или API, панель запускает его снова. Не больше трёх раз в час: после этого сервер помечается «Упал», автоперезапуск ждёт вас, а владельцу и админам приходит уведомление. Остановки, перезапуски, бэкапы и обновления из панели падением не считаются. Включается и выключается для каждого сервера на вкладке «Обзор», по умолчанию включён.

Вход только с разрешённых адресов

«Настройки» → «Вход только с адресов»: по одному адресу или сети на строку (203.0.113.7, 10.0.0.0/8). Пусто значит вход откуда угодно. С других адресов панель не пустит ни на вход, ни на страницы. Список, в котором нет вашего текущего адреса, сохранить нельзя, чтобы не закрыть доступ самому себе.

Журнал действий

«Журнал» (только владелец): все входы, неудачные попытки, команды серверам, правки файлов, изменения настроек. Фильтры по пользователю, действию, тексту (например, названию сервера) и датам, постраничный просмотр и выгрузка в CSV для Excel.

Лицензия и тарифы

Страница «Лицензия» показывает тариф, включённые функции и срок. Free: всё открытое ядро (AGPL-3.0) без лимита серверов, ключ не нужен, обращений к серверу лицензий нет. Pro и Hosting это закрытая сборка с дополнительными функциями (ниже); Hosting добавляет несколько машин. Цены пока не объявлены.

  • Ключ вводит владелец на странице «Лицензия». Что отправляется на сервер лицензий (ключ, отпечаток экземпляра, версия панели), написано на самой странице.
  • Сервер лицензий недоступен: игровые серверы продолжают работать, платные функции работают до конца срока последнего подтверждения и ещё 30 дней.
  • Лицензия закончилась: пропадают только платные функции, игровые серверы не останавливаются никогда.

REST API Pro

«Ключи API» → создать ключ. Он показывается один раз и хранится в базе только в виде хеша. Ключ действует с ролью того, кто его создал: у наблюдателя только чтение, у владельца и админа ещё и управление. Каждое действие по ключу пишется в журнал; после пяти неверных ключей с одного адреса за минуту включается ограничение.

curl -H "Authorization: Bearer shapi_..." https://panel.example.com/api/v1/servers
curl -X POST -H "Authorization: Bearer shapi_..." https://panel.example.com/api/v1/servers/3/restart
curl -H "Authorization: Bearer shapi_..." https://panel.example.com/api/v1/metrics
ЗапросЧто делает
GET /api/v1/serversсписок серверов, состояние, игроки, машина
GET /api/v1/servers/{id}один сервер
POST /api/v1/servers/{id}/{действие}details, start, stop, restart, backup, check-update
GET /api/v1/metricsпоследний замер машины

Несколько машин Hosting

Игровые серверы на других машинах управляются из той же панели через небольшого агента stokehold-agent. Агент принимает запросы панели по HTTPS на порту 9443 (откройте его только для адреса панели), при первом запуске делает самоподписанный сертификат и печатает его отпечаток; секрет лежит в /var/lib/stokehold-agent/secret. Для существующих аккаунтов LinuxGSM на этой машине создайте /etc/stokehold/adopt.conf, как и на главной.

В панели: «Машины» → добавить, ввести адрес, отпечаток и секрет. Панель сверяет отпечаток при каждом соединении, поэтому центр сертификации не нужен. Дальше при установке и добавлении сервера появляется выбор машины. Расписания, редактор конфигов и состояние работают для серверов на любой машине. Машину с серверами удалить нельзя.

Пока нельзя переносить сервер между машинами; мониторинг показывает только главную машину.

Моды Factorio Pro

У сервера Factorio в списке есть ссылка «Моды». Она читает serverfiles/mods/mod-list.json и включает или выключает моды, остальные поля файла (например, версию) не трогает. Сами файлы модов кладёте вы: скачивания с портала модов панель не делает, потому что порталу нужны ваши логин и токен, а хранить их в панели мы не хотим. Для других игр страница так и скажет.

Игровые инструменты Pro

Ссылка «Игровые инструменты» в меню «⋯» сервера открывает страницу с вкладками. Работает для Minecraft Java (сервер mcserver и PaperMC pmcserver) и Factorio; доступна владельцу и админу.

Версия и ядро Minecraft

  • Смена версии. Список версий берётся у Mojang (релизы или снапшоты) или у PaperMC. Панель записывает версию в настройки LinuxGSM (mcversion, для Vanilla ещё branch) и запускает команду update, дальше загрузкой занимается сам LinuxGSM.
  • Другое ядро. На сервере mcserver можно поставить Paper, Purpur или Fabric: панель скачивает файл ядра на место minecraft_server.jar и записывает это в serverfiles/stokehold-core.json. Forge и NeoForge помечены «скоро»: им нужен запуск установщика.
  • Осторожно. Команда LinuxGSM update может заменить поставленное ядро ванильным. Для Paper и Purpur панель закрепляет версию, чтобы этого не произошло, для Fabric такой защиты нет, поэтому не запускайте update вручную. Вернуться к Vanilla можно на той же странице.
  • Перед сменой панель предлагает сделать бэкап и просит подтвердить перезапуск. Ход операции виден по шагам, при ошибке остановленный сервер запускается обратно.

Плагины и моды

Поиск по каталогу Modrinth с фильтром по ядру (плагины для Paper и Purpur, моды для Fabric) и версии игры. «Установить» скачивает файл в serverfiles/plugins или serverfiles/mods и проверяет контрольную сумму. Установленные файлы можно удалить там же. Нужные зависимости панель только называет, ставить их надо отдельно. После установки перезапустите сервер. У Vanilla плагинов и модов нет.

Быстрые настройки

Формы с проверкой значений для server.properties Minecraft (описание, число игроков, сложность, режим, PvP, online-mode, дальность прорисовки, белый список, зерно мира) и настроек Factorio (название, описание, игроки, пароль, видимость, команды). Меняются только перечисленные значения, остальное в файле остаётся. Пароль Factorio на страницу не возвращается: пустое поле оставляет прежний. Изменения вступают в силу после перезапуска сервера.

Моды и плагины других игр

Вкладка «Моды и плагины» есть у этих серверов LinuxGSM. Платформа для модов ставится кнопкой (сервер останавливается и запускается снова), плагины можно выключить (они переезжают в соседнюю папку …-disabled), включить обратно и удалить.

ИграПлатформаПлагины и моды
RustOxide (uMod), с GitHubпоиск по uMod, файл .cs с проверкой суммы в oxide/plugins; после обновления Rust поставьте Oxide заново
Counter-Strike 2Metamod:Source 2.0 (строка в gameinfo.gi добавляется сама) и CounterStrikeSharpпроверенные: MatchZy, CS2-SimpleAdmin; свои загружаются через файловый менеджер
ValheimBepInExPack Valheim с Thunderstoreпоиск по Thunderstore, у каждого мода своя папка в BepInEx/plugins; зависимости называются
SCP: Secret LaboratoryEXILED, с GitHubсвои .dll в папки EXILED и LabAPI через файловый менеджер
Project Zomboidне нужнамастерская Steam: добавить по ссылке, порядок, удалить; Mod ID берётся со страницы предмета
Garry's Modне нужнаколлекция мастерской Steam (wscollectionid), список её предметов

На живых игровых серверах эти инструменты ещё не проверены: пути и ключи взяты из LinuxGSM и документации самих платформ.

Список версий и загрузки идут только с официальных источников (Mojang, PaperMC, Purpur, Fabric, Modrinth) через helper.

Центр игроков Pro

Раздел «Игроки» показывает, кто сейчас играет на всех серверах, ведёт историю заходов и сколько кто наиграл. Панель раз в минуту спрашивает запущенные серверы их собственным протоколом: Steam A2S (CS2, Garry's Mod, Rust, Valheim, ARK, 7 Days to Die), статус Minecraft (до 12 ников за раз), RCON для Factorio (пароль берётся из конфига LinuxGSM). Если игра ников не сообщает, на странице сервера остаётся число игроков.

  • Профиль игрока: всего наиграно, заходы по серверам, заметки и метки администраторов (VIP, подозрительный).
  • Действия уходят в консоль игры: выгнать, забанить, разбанить, белый список (команды есть для Minecraft, Factorio, Project Zomboid, Rust, CS2 и Garry's Mod). Ник и причина проверяются, перед выполнением панель спрашивает подтверждение, всё пишется в журнал. Списки банов и белый список читаются из файлов игры (Minecraft, Factorio), иначе показываются баны, выданные из панели.
  • Discord: администратор делает на профиле код, игрок вводит команду бота /link КОД. Для владельца есть правила «роль после N часов игры»: бот сообщества раз в 15 минут выдаёт заслуженные роли и снимает только роли из этого списка. Токен Discord остаётся у бота.

Discord и публичная страница Pro

Уведомления

«Интеграции» → адрес вебхука. Панель пишет туда, когда сервер запустился или остановился. Принимаются только адреса discord.com/api/webhooks/….

Команды бота

Команды /servers, /server и /metrics даёт собственный бот сообщества. Создайте приложение в Discord Developer Portal и ключ API на панели, затем запустите stokehold-bot с переменными:

DISCORD_BOT_TOKEN=...  DISCORD_PUBLIC_KEY=...  DISCORD_APP_ID=...
STOKEHOLD_PANEL_URL=https://panel.example.com
STOKEHOLD_PANEL_TOKEN=shapi_...
STOKEHOLD_CONTROL_ROLE="Server Admin"

/servers может вызвать любой участник сервера, /server <название> <действие> и /metrics только участники с ролью из STOKEHOLD_CONTROL_ROLE. Бот видит панель только через ключ API, пароли ему не нужны.

Публичная страница состояния

«Интеграции» → «Публичная страница состояния». Без входа по адресу /status видны названия серверов и состояние, больше ничего.

Машина времени Pro

Перед каждым рискованным изменением панель сама делает снимок: обновление игры (из панели, по расписанию или через API), правка конфига в редакторе или быстрых настройках, установка и удаление модов, плагинов и фреймворков, смена ядра или версии Minecraft. Несколько действий подряд (в пределах двух минут) дают один снимок.

Что в снимке: конфиг LinuxGSM, настройки игры, папки модов и плагинов, фреймворки (Oxide, BepInEx, Metamod, CounterStrikeSharp, EXILED). Перед обновлением небольших игр (Minecraft, Factorio, Valheim, SCP:SL) ещё и файлы игры, если они помещаются в лимит, иначе только конфиги и моды. Для CS2, Rust, Project Zomboid и Garry's Mod файлы игры слишком велики, их снимок не берёт. Миры и сохранения в снимок не попадают никогда: откат не отнимает у игроков прогресс.

Вкладка «Машина времени» на странице сервера показывает снимки по времени и поводу. «Сравнить» перечисляет, какие файлы вернутся к прежнему виду, какие вернутся после удаления и какие появились позже и будут удалены. «Восстановить» сначала сохраняет текущее состояние отдельным снимком (так восстановление тоже можно отменить), потом останавливает сервер, возвращает файлы и запускает сервер снова, если он работал.

Снимки лежат у пользователя игры в ~/stokehold-snapshots. Владелец задаёт, сколько снимков хранить на сервер (по умолчанию 10), лимит одного снимка (по умолчанию 2048 МБ) и может выключить автоматические снимки.

Оповещения Pro

Страница «Оповещения» (только владелец): сообщения в Telegram и в вебхук Discord. Правила: сервер упал (остановился сам, а не по команде панели или расписания), сервер остановлен, сервер запущен, вышла новая версия панели, вход в панель заблокирован после неудачных попыток, диск, память и процессор выше порога (процессор: N минут подряд). О диске, памяти и процессоре панель пишет один раз и ещё раз, когда всё снова в норме.

Telegram: создайте бота у @BotFather (/newbot), напишите ему или добавьте в группу, узнайте chat id через getUpdates, вставьте токен и chat id, нажмите «Отправить тестовое сообщение». Токен на странице больше не показывается. Сервер, который то падает, то поднимается, после одного сообщения «нестабилен» замолкает на 30 минут. Каждое оповещение со ссылкой на страницу сервера, если указан адрес панели.

Сценарии, вайпы Rust, голосования Pro

«Управление» → «Сценарии» (владелец и админы). Сценарий это «когда случится событие, и если выполнено условие, сделать действия». Всё собирается в форме, писать код не нужно. Для старта есть пять шаблонов: ночной перезапуск с предупреждением, остановка пустого сервера, бэкап каждые 6 часов, подъём после падения с сообщением, вайп Rust в первый четверг месяца.

События: расписание (каждый день, по дням недели, первый день недели месяца, каждые N часов; время в UTC), смена состояния сервера (запустился, остановился, упал сам), «пусто N минут», «игроков стало N и больше», процессор или память выше порога N минут подряд, вышла новая версия панели, вручную или по голосованию. Условия (необязательно): сервер запущен или остановлен, число игроков не больше и не меньше. Действия (до восьми, по порядку): команда серверу (запустить, остановить, перезапустить, бэкап, обновить, запустить если остановлен), сообщение в игру, ожидание, обратный отсчёт («за 10, 5 и 1 минуту»), оповещение (Telegram, Discord, телефон), вайп Rust.

Каждая команда идёт тем же путём, что кнопки панели: со снимком «машины времени» и записью в журнал. На сервере выполняется не больше одного сценария за раз, во время установки или отката сценарии ждут. Страница «Что произойдёт» показывает шаги так, как они будут выполнены, с точной консольной командой для игры и предупреждением, если у игры нет консольного чата (например, Valheim). У каждого сценария видно последние запуски с журналом.

Сообщения в игру идут через LinuxGSM send: say для Minecraft, Rust, CS2 и Garry's Mod, servermsg для Project Zomboid, bc для SCP:SL, обычный текст для Factorio.

Вайп Rust

Действие «Вайп Rust» делает штатный map-wipe (карта и сохранения) или full-wipe (вместе с чертежами; данные Rust+ остаются) LinuxGSM: он сам останавливает сервер, удаляет файлы из serverfiles/server/<identity>/ и запускает его снова. Перед этим панель записывает в конфиг LinuxGSM seed (новый случайный, следующий из списка или без изменений) и worldsize, при желании делает бэкап. Шаблон «первый четверг месяца в 19:00 UTC» совпадает с форс-вайпом Facepunch. Расписания вайпов видны на странице игровых инструментов Rust.

Голосования игроков

LinuxGSM умеет писать в консоль игры, но не читает чат, поэтому голосование в чате без мода под каждую игру невозможно. Вместо этого голосование идёт на отдельной странице по случайной ссылке: создайте его в «Сценариях» (вопрос, сервер, сценарий на случай «за», минимум голосов «за», доля «за», срок) и отправьте ссылку в Discord, Telegram и в игру (панель может сделать это сама). Голосовать можно без аккаунта, один раз с браузера и с адреса (адрес хранится только в виде хеша); при успехе голосование закрывается сразу, иначе по сроку. Если оно прошло, запускается выбранный сценарий. Для ссылок с адресом задайте «Адрес панели» на странице «Оповещения».

Команды и параметры

Панель

stokehold version
stokehold serve [параметры]
ПараметрЗначение по умолчаниюЧто делает
-dbpanel.dbпуть к базе SQLite
-listen127.0.0.1:8080обычный адрес для обратного прокси
-tls-listenвыключенодополнительно открыть HTTPS на этом адресе со своим сертификатом, например :8443
-secureвыключенопомечать cookie как Secure (нужно при HTTPS)
-trust-proxyвыключенобрать адрес клиента из заголовка прокси (только для обычного адреса)
-helper/run/stokehold/helper.sockсокет helper
-license-urlсервер проектаадрес сервера лицензий

В установленной системе параметры лежат в STOKEHOLD_FLAGS в файле /etc/stokehold/stokehold.env. После правки выполните sudo systemctl restart stokehold.

Установщик

install.sh принимает --channel stable|beta, --version vX.Y.Z, --no-start. Удаление: uninstall.sh (--purge удаляет ещё и данные панели).

Службы

systemctl status stokehold stokehold-helper
journalctl -u stokehold -u stokehold-helper -e

Где что лежит

ПутьЧто там
/usr/local/bin/stokehold, stokehold-helperпрограммы
/etc/stokehold/stokehold.envпараметры панели
/etc/stokehold/adopt.confпользователи Linux, чьи серверы можно подхватить
/var/lib/stokehold/panel.dbбаза панели (пользователи, серверы, расписания, журнал)
/var/lib/stokehold/tls/собственный сертификат панели
/run/stokehold/helper.sockсокет helper
/usr/local/lib/stokehold/previousпредыдущая версия для отката

Обновление и удаление

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

curl -fsSL https://dl.stokehold.online/uninstall.sh | sudo bash

Без --purge данные панели остаются в /var/lib/stokehold и /etc/stokehold.

Если что-то не работает

Сначала смотрите журнал: journalctl -u stokehold -u stokehold-helper -e.

Панель не открывается

  • curl -s http://127.0.0.1:8080/health на самой машине должен ответить ok. Нет ответа: systemctl status stokehold.
  • Страница по ссылке установщика не открывается: откройте TCP-порт 8443 у хостинга и в файрволе.
  • Вход не проходит при верном пароле, а страница открыта по обычному HTTP: cookie с флагом Secure не отправляются. Открывайте по HTTPS.
  • После нескольких неверных паролей учётная запись блокируется на 15 минут.

Забыт код настройки

sudo journalctl -u stokehold | grep "setup code". Он печатается при запуске, пока нет ни одного пользователя; перезапуск службы выдаёт новый.

«Служебный процесс недоступен»

systemctl status stokehold-helper, сокет /run/stokehold/helper.sock должен принадлежать stokehold с правами srw-------. Журнал helper показывает каждую операцию.

«Не удалось найти серверы этого пользователя»

Пользователь не внесён в /etc/stokehold/adopt.conf, либо у него нет lgsm/config-lgsm/<имя>server (LinuxGSM не установлен). Для аккаунтов, созданных helper, имя должно начинаться с gs_.

Команда завершилась с ошибкой

Результат показан на странице. Типичные причины: не хватает зависимостей (Missing dependencies, поставьте названные пакеты); сервер уже запущен или остановлен; LinuxGSM каждый раз скачивает свои модули с GitHub, и без доступа к GitHub команды зависают.

Сообщить о проблеме

В GitHub Issues или в Discord: версия панели (stokehold version), ОС, игра и лог без паролей, токенов и ключей лицензий.

Частые вопросы

Нужен ли Docker?

Нет. Игровые серверы работают под обычными пользователями Linux, как в LinuxGSM.

Можно подхватить уже работающий сервер?

Да, см. «Подхват существующих серверов». Ничего не переустанавливается и не перезаписывается.

Что с обновлениями игры?

Проверка обновления есть. Откат из снимка и закрепление версии в планах.

Что отправляется на ваши серверы?

Free не обращается к нашим серверам и не требует ключа. Единственный исходящий запрос: раз в несколько часов панель спрашивает у GitHub, вышла ли новая версия (GitHub видит адрес сервера); это можно выключить в настройках обновлений. Pro для проверки ключа отправляет ключ, публичный ключ экземпляра и версию панели.

Нужен ли Discord, чтобы панель работала?

Нет. Панель, лицензии и обновления от Discord не зависят.

Как проверить, что скачанное настоящее?

Установщик сам проверяет подпись релиза и хеши. Если подпись не сходится, установка прекращается до любых изменений.