Установка
Сервер — один статический бинарник. Выберите способ под свою инфраструктуру: Docker, systemd для железа или VPS, сборка из исходников для разработки. Образ Docker собирается из исходников, так что для генерации protobuf понадобится и Go.
Установщик
Проще всего — установщик. Одна команда, дальше он всё спросит и соберёт сам.
curl -fsSL https://raw.githubusercontent.com/laminara/laminara/main/install.sh | bashЧто он делает:
- определяет архитектуру и скачивает бинарь из релизов GitHub;
- спрашивает по шагам — как игроки придут на сервер (домен через nginx или прямой адрес), хранилище (диск или S3), источник аккаунтов (JSON-файл с первым аккаунтом, SQL или HTTP), хранилище сессий, вход в игре и скины;
- генерирует
config.json, создаёт каталог данных и первый аккаунт (пароль хешируется argon2id); - по выбору ставит systemd-сервис или поднимает Docker-стек с Redis;
- при выборе домена ставит nginx, пишет ему конфиг под этот сервер и берёт сертификат
Let’s Encrypt — после установки игроки уже приходят на
https://ваш-домен.
Ключи подписи сервер создаёт сам при первом запуске, а библиотеки и Java докачивает при сборках — заводить руками ничего не нужно. В конце установщик печатает адрес проекта и готовую команду client-config — с неё начинается сборка лаунчера для игроков.
Если серверы у вас в Pterodactyl или Pelican, ставьте через egg для панели — установщик и systemd тогда не нужны.
Дальше — способы собрать всё вручную.
Docker
make generate # сгенерировать gen/ из protobuf перед сборкой образаcp deploy/config.example.json deploy/config.jsondocker compose -f deploy/docker-compose.yml up -d --buildCompose поднимает сам сервер и Redis. Постоянные данные — профили сборок, объекты, ключи подписи — лежат в томе laminara-data (/var/lib/laminara внутри контейнера). Разделы для Postgres и S3-хранилища в файле закомментированы; включите их, если они вам нужны.
systemd
Для установки на хост есть готовый unit с Type=notify — сервер сам сообщает systemd о готовности и об остановке.
-
Соберите бинарник
Окно терминала make buildsudo install -m0755 bin/laminara-server /usr/local/bin/laminara-server -
Заведите пользователя и каталоги
Окно терминала sudo useradd --system --home /var/lib/laminara --shell /usr/sbin/nologin laminarasudo install -d -o laminara -g laminara /var/lib/laminara /etc/laminarasudo install -m0640 -o laminara -g laminara deploy/config.example.json /etc/laminara/config.json -
Поставьте unit и запустите
Unit печатает сам сервер — он знает, в какие каталоги пишет:
Окно терминала laminara-server systemd-config --config /etc/laminara/config.json \| sudo tee /etc/systemd/system/laminara-server.servicesudo systemctl enable --now laminara-server
Unit ограничивает права: NoNewPrivileges, ProtectSystem=strict, ProtectHome, PrivateTmp, а запись
разрешена ровно там, где сервер её делает по конфигу — каталог сборок, хранилище, лаунчер, ключи,
журнал и /run/laminara. Ключи --binary, --user, --group меняют пути и владельца службы.
PrivateTmp=true обязателен: во временный каталог пишут и публикация сборок, и сборка лаунчера, и
модули (каждый создаёт там свой сокет), а ProtectSystem=strict без приватного /tmp делает
каталог доступным только для чтения. Если сервер всё же оказался с таким /tmp, он не падает:
при запуске заводит tmp/ рядом со своими данными, пишет об этом в журнал и работает дальше —
но unit лучше починить.
Из исходников
Нужен только Go — генератор кода тянется через go tool, отдельный protoc не требуется.
make generate # protobuf -> gen/gomake build # go build ./...make test # прогнать тестыmake run # запустить в текущем терминалеУправление запущенным сервером
Тот же бинарник — клиент к своему демону: он подключается к процессу по Unix-сокету.
laminara-server status # состояниеlaminara-server console # интерактивная консоль с живыми логамиlaminara-server logs -f # только логи, потокомlaminara-server stop # остановитьПолный список команд — в справочнике CLI.
О чём спросит установщик
Первым делом — название проекта: его увидят игроки в лаунчере, оно же станет именем сервера в игре и папкой, куда лаунчер сложит файлы на компьютере игрока. Имя папки предлагается по названию, но его можно поменять — например, если название длинное или на другом алфавите.
Дальше — как игроки приходят на сервер (домен с сертификатом или адрес с портом), где хранить файлы сборок, откуда брать учётные записи, нужен ли вход в игре и как запускать сервер.
В конце установщик предлагает сразу собрать первую сборку. Согласились — он спросит имя сборки, версию Minecraft и загрузчик (список загрузчиков печатается для выбранной версии, версия самого загрузчика по Enter берётся последняя подходящая), а дальше сделает всё сам: подготовит клиент, опубликует сборку, соберёт лаунчер и напечатает ссылку, по которой игроки его качают. Отказались — то же самое делается потом из консоли, установщик покажет команды.
Пути к ключам и секретам спрашивать не нужно: сервер сам кладёт их рядом со своими данными — ключ подписи, ключ входа в игре, соль отпечатков, секрет пропусков, базу компьютеров и сессии консоли. Написали путь в конфиге — сервер возьмёт ваш.
Redis для сессий
Если выбрать хранение сессий в Redis, установщик сначала проверит, отвечает ли он по указанному адресу, и дальше поступит по обстановке:
- отвечает — идём дальше, ничего спрашивать не надо;
- просит пароль — установщик спросит его и проверит, что Redis такой пароль принимает;
- не отвечает, адрес локальный — предложит поставить Redis пакетом и включить службу, поднять
его в Docker контейнером
laminara-redis(вариант появляется, только если Docker на машине есть), указать другой адрес или обойтись памятью; - не отвечает, адрес чужой — предложит указать другой адрес или обойтись памятью.
Если Redis ставит сам установщик, он же его и настраивает: придумывает пароль, прописывает его
Redis’у (requirepass в конфиге службы или --requirepass контейнеру), закрывает Redis от сети
(bind 127.0.0.1) и кладёт пароль в конфиг Laminara — вводить руками ничего не нужно. Перед записью
установщик проверяет, что пароль действительно взялся: если Redis почему-то поднялся без него, в
конфиг пароль не попадёт.
Выбор «обойтись без Redis» не ломает установку: сессии останутся в памяти. Вернуться к этому разговору можно в любой момент, не трогая остальную установку:
curl -fsSL https://raw.githubusercontent.com/Laminara/laminara/main/install.sh -o install.shbash install.sh --redisЭто то же самое меню: проверит Redis, при необходимости поставит и настроит его, запишет адрес и
пароль в конфиг и перезапустит службу. Отдельные значения правятся и вручную —
laminara-server settings auth.sessions.backend redis; пароль, номер базы и TLS живут в блоке
auth.sessions.redis.
Удаление
Снять Laminara с сервера можно тем же способом, что и поставить:
curl -fsSL https://raw.githubusercontent.com/Laminara/laminara/main/uninstall.sh -o uninstall.shbash uninstall.shСкрипт сначала показывает, что именно уберёт — настройки, каталог данных с его размером, программу, службу systemd, сайт nginx и системного пользователя, — и только потом спрашивает подтверждение. Ничего не удаляется, пока вы не ответите «да» дважды: сперва про данные, затем про удаление целиком.
Данные можно оставить: тогда уедут только программа, служба и сайт nginx, а /var/lib/laminara
и файл настроек останутся на месте — с ними Laminara поднимется заново там же, где стояла.