Конфигурация
Сервер читает один JSON-файл, путь задаётся флагом --config. Файл состоит из независимых разделов — включён только тот, что вы описали. Нет раздела yggdrasil — вход в игре просто не поднимается; нет storage — сервер работает без раздачи файлов.
Полный список полей с типами — в справочнике конфигурации. Здесь — что каждый раздел даёт.
Разделы
auth — кто такие игроки
Откуда брать аккаунты и как проверять пароль. Laminara не хранит аккаунты: она спрашивает ваш источник (JSON-файл, SQL-база или HTTP-API) и владеет только сессиями. Здесь же выбирается алгоритм хеша пароля и хранилище сессий (в памяти или Redis). Подробно — в разделе Аутентификация.
storage — где лежат файлы
Хранилище объектов: локальная файловая система или S3-совместимое. От него зависит, как сервер отдаёт байты лаунчеру. Что выбрать — в разделе Хранилище.
build — куда складывать сборки
Каталог профилей (profilesDir) и путь к ключу подписи (signingKeyPath). Ключ Ed25519 создаётся автоматически при первом запуске, если файла ещё нет. Его публичная часть попадает в лаунчер вместе со всем кольцом ключей.
api — публичный слушатель
Адрес, на котором сервер обслуживает лаунчер, раздачу объектов и (если включён) Yggdrasil. Флаг xAccel включает выдачу файлов силами nginx через X-Accel-Redirect — см. Продакшен.
yggdrasil — вход в игре
Включает authlib-injector-совместимый сервер аутентификации и подпись скинов. Тут же выбирается адаптер скинов. Подробно — в разделе Вход в игре и скины.
Минимальный пример
Достаточный, чтобы собирать и раздавать сборки: аккаунты из JSON-файла, файловое хранилище, публичный порт.
{ "auth": { "provider": "jsonfile", "config": { "path": "/var/lib/laminara/users.json", "hash": "argon2id" }, "sessions": { "backend": "memory" } }, "storage": { "backend": "fs", "config": { "root": "/var/lib/laminara/objects" } }, "build": { "profilesDir": "/var/lib/laminara/profiles", "signingKeyPath": "/var/lib/laminara/signing.key" }, "api": { "addr": "0.0.0.0:8099" }}