Перейти к содержимому

Конфигурация

Сервер читает один JSON-файл (флаг --config). Разделы независимы: работает тот, что описан. Обзор и примеры — в разделе Конфигурация.

auth

providerstringобязательно

jsonfile, sql или http.

configobjectобязательно

Настройки выбранного провайдера (см. ниже).

sessions.backendstring

memory или redis.

sessions.redis.addrstring

Адрес Redis при backend: redis.

sessions.redis.passwordstring

Пароль Redis (requirepass). Пусто — без пароля.

sessions.redis.dbint

Номер базы Redis. По умолчанию 0.

sessions.redis.tlsbool

Подключаться к Redis по TLS.

accessTTLduration

Время жизни токена доступа, например 15m.

refreshTTLduration

Время жизни токена обновления, например 720h.

Поля config по провайдерам:

  • jsonfile — path, hash, fields{username, password, uuid, twoFactorSecret}
  • sql — driver, dsn, table, hash, fields{username, password, uuid, twoFactorSecret}
  • http — url, usernameField, passwordField, codeField, uuidField, successField, secondFactorField

Значения hash: argon2id, bcrypt, sha256, sha512, md5, plain. Подробнее — Аутентификация.

config.querystring

Для sql: свой запрос вместо table/fields, когда нужна связка таблиц или учёт флага бана. Логин — единственный подстановочный знак, выбираются пароль и (необязательно) UUID.

config.fields.twoFactorSecretstring

Ключ записи (jsonfile, по умолчанию totp) или колонка (sql), где лежит base32-секрет двухфакторки. Подробнее — Аутентификация.

storage

backendstringобязательно

fs или s3.

configobjectобязательно

Настройки бэкенда.

Поля config:

  • fs — root, xaccelPrefix
  • s3 — endpoint, region, bucket, accessKeyId, secretAccessKey, pathStyle, secure

Подробнее — Хранилище.

build

profilesDirstringобязательно

Каталог с папками профилей сборок.

trustedSigningKeysarray

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

signingKeyPathstring

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

api

addrstringобязательно

Адрес публичного слушателя, например 0.0.0.0:8099.

xAccelboolean

Раздавать файлы через nginx X-Accel-Redirect (для файлового хранилища).

trustedProxiesstring[]

Адреса и подсети, чьему X-Forwarded-For можно верить. По умолчанию — loopback и частные сети, то есть nginx на той же машине или соседний контейнер. Запрос с любого другого адреса считается пришедшим напрямую, и заголовок игнорируется.

Адрес игрока — это то, по чему считаются ограничения на попытки входа и что видно в банах, поэтому заголовку верят не всякому. Пустой список ([]) отключает разбор заголовка совсем: адресом всегда будет тот, с которого пришло соединение. Сервер, открытый в интернет без прокси, так и настраивают.

yggdrasil

enabledboolean

Включает вход в игре.

serverNamestring

Имя, которое видит authlib-injector.

rsaKeyPathstring

Путь к RSA-ключу для подписи текстур. Создаётся автоматически.

skinProviderstring

template, json или sql.

skinConfigobject

Настройки адаптера скинов.

skinDomainsarray

Домены, с которых игра примет текстуры.

mirrorTexturesbooleanпо умолчанию true

Сервер скачивает картинку скина и отдаёт её по адресу с хешем — только так игра замечает, что скин сменился.

Подробнее — Вход в игре и скины.

modules

dirstring

Каталог с исполняемыми файлами модулей. Каждый подхватывается при запуске.

configobject

Конфигурация модулей по имени файла: { "greeter": { … } }.

Подробнее — Модули.

launcher

dirstring

Каталог с версиями лаунчера: <dir>/<версия>/<артефакты>. Туда же кладёт файлы launcher build.

endpointsstring[]

Адреса, по которым лаунчер ходит на сервер у игрока. Запекаются в файл, поэтому меняются только новой сборкой.

autoBakebooleanпо умолчанию true

Пересобирать и выпускать лаунчер после обновления сервера — но только если его уже выпускали.

Подробнее — Сборка лаунчера и Обновление лаунчера.

console

enabledbooleanпо умолчанию true

Отдавать ли консоль по адресу /console/. Без сеанса её адреса отвечают 404.

authstringпо умолчанию link

Как входить: link — по одноразовой ссылке из команды web, password — по паролю, both — и так, и так.

passwordstring

Хеш пароля (laminara-server hash). Нужен при auth = password или both.

publicUrlstring

Адрес сервера снаружи, например https://launcher.example.com — подставляется в ссылку на консоль.

sessionTTLdurationпо умолчанию 168h

Сколько браузер помнит вход. 0 — не забывать никогда.

linkTTLdurationпо умолчанию 10m

Сколько живёт одноразовая ссылка.

statePathstring

Файл с открытыми сеансами, чтобы они пережили перезапуск.

Подробнее — Консоль.

branding

namestring

Имя, которое лаунчер показывает вместо «LAMINARA».

windowTitlestring

Заголовок окна лаунчера.

taglinestring

Строка над формой входа.

primaryColorstring

Акцентный цвет, например #4ade80.

primaryInkstring

Цвет текста на акцентном фоне.

backgroundColorstring

Фон приложения.

logoPathstring

Файл логотипа (.svg/.png). Встраивается в конфиг лаунчера как data-URI.

heroMediaPathstring

Фон главного экрана: картинка (.jpg, .png, .webp) или видео (.mp4, .webm). Картинка показывается везде одинаково, видео на Linux зависит от кодеков в системе игрока — если их нет, фон останется пустым. Пусто — фон по умолчанию.

siteUrlstring

Ссылка на сайт проекта.

folderNamestring

Имя папки, в которой лаунчер хранит сборки и настройки на компьютере игрока. По умолчанию берётся из name, а если его нет — из windowTitle. Задавайте, только если название проекта не годится для имени папки.

Блок отдаётся командой client-config и записывается в лаунчер при сборке.

access

sourcesobject

Источники списков доступа по имени: { "closed-beta": { "type": "file" | "http", "config": { … } } }.

rulesarray

Правила: builds (шаблоны имён), source, visibility (listed/hidden), message.

publicObjectsboolean

Оставить /objects/ без авторизации даже при наличии правил. По умолчанию false.

Подробнее — Доступ к сборкам.

hwid

modestring

off · observe (по умолчанию) · enforce.

saltPathstring

Файл соли, которой хешируются измерения. Запекается в лаунчер командой client-config. Не задан — сервер заводит его сам в каталоге данных: соль нельзя менять, иначе все компьютеры станут новыми.

ticketSecretPathstring

Ключ HMAC для тикетов входа в игру.

storeobject

memory или sql (driver: sqlite/postgres/mysql, dsn).

requireReport · requireChallenge · requireLauncher · requireHardwareKeyboolean

Строгость: отчёт обязателен, ответ на nonce обязателен, вход в игру только через лаунчер, ключ машины только в TPM.

minScore · minKinds · clusterScore · fanOutLimit · maxClusterSizenumber

Пороги совпадения и границы кластера.

vmPolicystring

allow · flag · deny.

hardwareBanTTL · retention · ipRetentionstring

Срок аппаратного бана и хранения данных.

Подробнее — Машины и баны.

rateLimit

Включён по умолчанию: публичный вход, открытый для перебора паролей, — не то состояние, которое кто-то выбирает осознанно.

disabledboolean

Выключить все бюджеты. Только для сервера, недоступного из интернета.

backendstring

memory (по умолчанию) или redis — общий счётчик на несколько экземпляров.

redis.addrstring

Адрес Redis для backend: redis.

redis.passwordstring

Пароль Redis (requirepass).

redis.dbint

Номер базы Redis.

redis.tlsbool

Подключаться к Redis по TLS.

loginobject

Бюджет на один адрес: { "limit": 10, "per": "5m" }.

accountobject

Бюджет на один ник, намеренно щедрый: { "limit": 50, "per": "15m" }. Жёсткий лимит здесь дал бы любому способ заблокировать конкретного игрока чужими неудачными попытками.

challengeobject

Бюджет на запросы nonce: { "limit": 60, "per": "1m" }.

Тратится только неудачная попытка входа: игрок, который вводит пароль верно, в счётчики не попадает вообще.

news

sourceobject

{ "type": "file" | "http", "config": { … } }. Нет блока — новостей нет.

limitnumber

Сколько записей отдавать лаунчеру. По умолчанию 20.

Подробнее — Новости.

update

checkboolean

Смотреть релизы на GitHub раз в interval и писать в лог, когда выходит версия свежее. По умолчанию true.

installboolean

Ставить новую версию самому и перезапускаться. По умолчанию false.

repostring

Репозиторий релизов в виде «владелец/имя». По умолчанию laminara/laminara.

intervalduration

Как часто смотреть релизы. По умолчанию 24h.

Подробнее — Обновление сервера.

log

filestring

Файл журнала. Пусто — журнал только в консоли, а её ведёт systemd или docker.

maxSizeMBnumber

После какого размера файл режется. По умолчанию 20.

keepnumber

Сколько нарезанных файлов хранить. По умолчанию 5.

maxAgeduration

Сколько хранить нарезанные файлы. По умолчанию 720h.

Подробнее — Обслуживание.

crashReports

enabledboolean

Принимать отчёты о падениях из лаунчера. По умолчанию false.

maxPerHournumber

Сколько отчётов принимать от одного игрока в час. По умолчанию 20.

anonymousboolean

Принимать журнал лаунчера от игрока, который не вошёл. По умолчанию true.

anonymousPerHournumber

Сколько журналов без входа принимать с одного адреса в час. По умолчанию 3.

sinksobject

Куда отправлять: { "имя": { "type": "discord|telegram|http|file", "config": { … } } }. Отчёт уходит во все адреса сразу.

Подробнее — Отчёты о падениях.