Почти всё, от чего зависит, будет ли SMP работать через полгода, решается до того, как зашёл первый игрок. Не железо - а seed, который нельзя поменять, граница, которую вы не выставили, op, который вы раздали, бэкап, который вы никогда не проверяли. Сервер, который на нулевой день чинится за один вечер, на тридцатый требует голосования сообщества и недели споров. Вот порядок действий с конкретными настройками; он рассчитан на Paper, потому что на нём работают почти все SMP.
Решите правила до генерации мира#
Каждое из этих решений тривиально изменить в конфигурационном файле и почти невозможно изменить социально, когда люди уже построились вокруг него. Сначала зафиксируйте их письменно вместе с теми, кто действительно будет играть:
- PvP включён или выключен, и отличается ли это на спавне.
- Привады, система доверия или только правило «не воровать».
- Сложность, и включён ли
keepInventory. От второго меняется вся модель риска в игре. - Разрешены ли фермы и какие. «Никаких гриндеров мобов» - вполне законное правило; узнавать об этом мнении после того, как кто-то неделю строил такую ферму, - нет.
- Что будет с Краем и Незером: общие, периодически сбрасываются или отдельный мир ресурсов.
- Бывает ли вайп мира, и если да, то по какому условию.
- Кому можно пользоваться командами телепортации и стоит ли это чего-нибудь.
Запишите ответы в закреплённое сообщение и на самом сервере. Смысл не в бюрократии: сервер с двусмысленным правилом получает по одному спору в неделю, а сервер с записанным - ни одного.
Затем честно оцените размер, потому что от него зависит всё остальное. Десять друзей - это не то же самое, что сорок заявок, и разница не только в памяти, а в модерации, приватах, дизайне спавна и в том, нужна ли вообще экономика. Про подбор размера рассказано в статье сколько игроков помещается на сервер, а правило для Minecraft отдельно - в статье сколько RAM нужно серверу Minecraft.
ПО, версия и мир, который вы сохраните#
Запускайте Paper. Он совместим с плагинами Spigot и Bukkit, исправляет то, что не исправляет ванильный сервер, и на нём построены все руководства по оптимизации, которые вам встретятся. Зафиксируйте версию и оставайтесь на ней весь сезон: если запускаться на релизе, вышедшем неделю назад, ваш список плагинов становится набором тестов. Выбор подробно разобран в статье Paper, Fabric или ваниль, а версия Java должна соответствовать версии Minecraft - это соответствие описано в статье флаги JVM и версии Java.
Затем создайте мир один раз и как следует, потому что seed становится постоянным в тот момент, когда кто-то строит дом.
- Выберите seed осознанно или возьмите случайный, но сначала загрузите его в одиночной игре на той же версии и пройдитесь по спавну. Спавн на грибном острове или посреди океана - плохой старт, который не отменить.
- Задайте
level-seedвserver.propertiesдо первого запуска. Когда мир уже существует, эта настройка ничего не делает. - Задайте границу в каждом измерении.
/worldborder set 10000задаёт диаметр, а не радиус, с центром в/worldborder center 0 0. Незер в восемь раз меньше по масштабу, поэтому у него своя:/execute in minecraft:the_nether run worldborder set 1250. - Сделайте pre-generation внутри границы, пока на сервере никого нет.
Стандартный инструмент для последнего шага - Chunky:
$ chunky world world$ chunky center 0 0$ chunky shape square$ chunky radius 5000$ chunky startДальше им управляют /chunky progress, /chunky pause, /chunky continue и /chunky cancel. Генерация местности - самое дорогое, что делает работающий сервер, и если выполнить её заранее, вечный источник скачков лагов превращается в единовременные затраты дискового места. Это самый выгодный час, который вы потратите до запуска.
Эти затраты диска реальны, поэтому запланируйте их. Файл региона покрывает 512 на 512 блоков, и полностью сгенерированная область укладывается примерно в такие цифры:
| Диаметр границы | Файлов региона | Верхний мир на диске, примерно |
|---|---|---|
| 5,000 | около 100 | 0.5 - 1.5 GB |
| 10,000 | около 400 | 2 - 6 GB |
| 20,000 | около 1,600 | 8 - 25 GB |
Диапазоны широкие, потому что действительно зависят от местности, версии и высоты мира. Сверху добавьте Незер и Край, потом всё, что отрисует веб-карта, если вы её поставите. Сверьте цифру с диском своего тарифа до начала, а не после: у самого маленького тарифа Minecraft здесь 15 GB, и граница в 20,000 блоков съест их в одиночку. Компромиссы разобраны в статье граница мира и pregeneration, а что добавляет к итогу отрисованная карта - в статье веб-карты Minecraft.
server.properties для дня запуска#
Большую часть этого файла можно оставить по умолчанию. Вот те ключи, над которыми стоит подумать:
| Ключ | По умолчанию | Для SMP |
|---|---|---|
online-mode | true | true, всегда |
white-list | false | true |
enforce-whitelist | false | true |
max-players | 20 | ваше реальное число |
difficulty | easy | normal или hard, как договорились выше |
pvp | true | ваше правило |
view-distance | 10 | 7 или 8 |
simulation-distance | 10 | 5 или 6 |
spawn-protection | 16 | 0, если спавн защищает плагин |
max-world-size | 29999984 | радиус вашей границы |
enable-command-block | false | false, если не нужен |
allow-flight | false | true только если нужно плагину |
enforce-secure-profile | true | true |
network-compression-threshold | 256 | 256 |
motd | A Minecraft Server | две короткие строки |
Большую часть работы делают два из них. view-distance - сколько чанков сервер отправляет каждому клиенту; simulation-distance - сколько из них реально тикает. Уменьшение simulation distance почти ничего не стоит игрокам визуально и экономит больше всего CPU среди всех отдельных настроек, потому что сокращает число сущностей, воронок и редстоун-схем, которые серверу приходится обсчитывать. Снижение view distance с 10 до 8 убирает примерно треть чанков, которые держит каждый игрок.
Обратите внимание: max-world-size - это радиус, а /worldborder set принимает диаметр. Поставить в свойстве 5000 для границы шириной 10,000 - верно, хотя выглядит неправильно.
Собственная настройка Paper находится в других местах - config/paper-global.yml, config/paper-world-defaults.yml, spigot.yml и bukkit.yml, - и пройтись по ней стоит до запуска, а не во время первого кризиса с лагами. По ключам всё разобрано в руководстве по оптимизации Paper. Не поддавайтесь соблазну вставить чужой готовый файл «лучших настроек»: некоторые популярные пресеты втихую ломают фермы мобов, тайминги редстоуна или механику жителей, и вы не свяжете жалобу с изменением, сделанным три недели назад.
Права и персонал без раздачи op#
Op - это не ранг, а обход всех ограничений. Игрок с op игнорирует привады, игнорирует регионы WorldGuard, игнорирует большинство плагинов защиты и может выполнять любую команду в игре. Если выдать op модератору, чтобы он мог кикать людей, он получит возможность случайно удалить мир.
Сначала поставьте LuckPerms, создайте группы и распределите людей по группам:
$ lp creategroup member$ lp creategroup moderator$ lp group moderator parent add member$ lp group moderator permission set essentials.kick true$ lp group moderator permission set essentials.mute true$ lp user Steve parent add moderator/lp editor открывает веб-редактор по одноразовой ссылке, а это гораздо надёжнее, чем массовые изменения командами. Оставьте владельца единственным op и приучитесь снимать с себя op для обычной игры, чтобы узнавать о сломанном правиле защиты, а не проходить сквозь него молча. Наследование и контексты описаны в руководстве по LuckPerms, а ванильная сторона - в статье whitelist и права.
Доступ к панели - вопрос отдельный от власти в игре, и он должен оставаться отдельным. Модератору, которому нужно перезапускать сервер, ваши платежи не нужны. В панели есть роли, команды и субпользователи с гранулярными правами - только консоль, только файлы, без биллинга, - а также приглашения по ссылке, коду или почте, доступ с ограничением по времени и журнал активности для каждого сервера, чтобы вы видели, кто что делал. Схема описана в статье субпользователи и принцип наименьших привилегий.
Защита, логирование и откат#
Установите логирование блоков до запуска, а не после первого грифа. Стандарт - CoreProtect, он бесплатный и отвечает на единственный вопрос, который важен после инцидента: кто, что, когда и можно ли это отменить.
$ co inspect$ co lookup u:Steve t:3h r:20$ co rollback u:Steve t:3h r:20$ co purge t:60d/co inspect включает режим, в котором щелчок по блоку печатает его историю. Синтаксис отката тот же, что и у поиска, и это сделано намеренно: сначала посмотрите, потом откатите ровно ту же выборку. Поставьте purge по расписанию, чтобы лог не рос без предела.
Привады - вторая половина. GriefPrevention - бесплатный вариант по умолчанию: он даёт игрокам золотую лопату, чтобы они сами приватили землю; WorldGuard основан на регионах, которые задаёт персонал, и лучше подходит для спавна и общественных зон, чем для баз каждого игрока. Выберите одну модель и объясните её в правилах; если использовать обе, люди обычно путаются, какая из них их защищает.
Про античит стоит сказать честно. На сервере с whitelist, полном знакомых людей, он не нужен, а бесплатные античиты дают ложные срабатывания, которые раздражают ваших игроков сильнее, чем читерство. Если сервер публичный, хорошо зарекомендовавший себя бесплатный вариант - GrimAC, а хорошие коммерческие решения платные. Их обстоятельное сравнение - в статье защита от грифа и античит.
Whitelist, идентичность и как впустить людей#
Включите whitelist до первого запуска и добавьте всех до того, как опубликуете адрес. Ничей первый опыт на вашем сервере не должен быть сообщением о кике.
$ whitelist add Steve$ whitelist list$ whitelist reloadenforce-whitelist=true важнее, чем кажется: без него удаление человека из списка не удаляет его с сервера, пока он сам не отключится. С ним список применяется к уже находящимся онлайн игрокам при перезагрузке.
Оставьте online-mode=true. Именно он делает так, что имя соответствует человеку: UUID приходят от Mojang, баны держатся, а данные плагинов остаются привязанными к нужному аккаунту. На сервере в offline-режиме ничего этого нет, и любой может подключиться под чужим именем.
Если Bedrock-игроки заходят через Geyser и Floodgate, их идентификаторы выдаёт Floodgate, а не Mojang, а к их именам добавлен префикс, так что добавить их в whitelist - не та же команда, что для Java-игрока. Разберитесь с этим до дня запуска на тестовом аккаунте - настройка описана в статье Geyser и кроссплей с Bedrock.
Бэкапы, расписания и восстановление, которое вы действительно проверили#
Бэкап, который вы никогда не восстанавливали, - это догадка о файле, который вы ни разу не открывали. До запуска сделайте бэкап, восстановите его на пустой сервер и посмотрите, сколько это занимает. Это единственный способ узнать, как выглядит плохой день, пока плохого дня нет.
Игровые тарифы RE:NODE включают слоты для бэкапов - по требованию или по расписанию, с восстановлением кнопкой, возможностью скачать и блокировкой, чтобы ротация не удалила нужный вам бэкап. Они хранятся вне машины, которую защищают. Одно нужно знать заранее: удаление сервера удаляет его бэкапы, в том числе заблокированные, так что всё, что вы действительно не можете потерять, надо ещё и скачать.
Расписание - это cron-выражение плюс упорядоченные задачи с задержками, что позволяет сбросить мир на диск до того, как будет сделана копия:
0 5 * * * daily at 05:00 task 1 console command save-all flush delay 30 seconds task 2 backupДобавьте второе расписание для бэкапа «вручную» перед всем рискованным и делайте копию руками перед каждой установкой плагина и каждым обновлением версии. Подробные доводы за обе половины - в статьях бэкапы, которые действительно восстанавливаются и проверка восстановления до того, как оно понадобится, а cron-выражения простыми словами расшифровывают пять полей, если синтаксис вам в новинку.
Адрес, MOTD и первое впечатление#
Три мелочи, по которым люди судят о сервере, ещё не проведя на нём и минуты.
Иконка. Файл server-icon.png в корне сервера, ровно 64 на 64 пикселя. Она появляется в списке серверов рядом с вашим названием. Занимает две минуты, и почти никто этого не делает.
MOTD. Две короткие строки в server.properties. Поместите во вторую строку что-нибудь полезное, например текущую версию или открыт ли набор заявок.
Адрес. Панель выделяет порт, и это может быть не 25565, а значит игрокам придётся вводить адрес с портом на конце, и они будут ошибаться. Исправляет это запись SRV: направьте _minecraft._tcp.yourdomain на хост и порт, и игроки вводят mc.example.com без ничего после. Полная структура записи - в статье SRV-записи для Minecraft, а как в принципе направить имя на адрес - в статье поддомены для серверов.
Если вы принудительно включаете пакет ресурсов, задайте и resource-pack, и resource-pack-sha1 и разместите файл в стабильном месте: умершая ссылка утянет за собой вход каждого нового игрока. О форматировании и хостинге рассказано в статье MOTD, иконка и пакеты ресурсов.
Базовая линия и первая неделя#
Установите spark до запуска и запишите, как выглядит простаивающий сервер: /spark tps на пустом мире, затем ещё раз, когда на нём два-три человека. Эти числа - ваша базовая линия, и без них на «сервер ощущается медленным» ответить невозможно. Как читать отчёты, описано в статье диагностика лагов Minecraft через spark; сейчас важно просто иметь состояние «до».
Затем, на первой неделе:
- Добавляйте плагины по одному, с перезапуском и взглядом на консоль между ними. Если поставить пять сразу, тот, который что-то сломает, опознать не получится.
- Следите за графиками консоли: память, CPU и диск относительно лимитов тарифа. Сервер, достигший лимита памяти, останавливается и чисто перезапускается, а не остаётся в swap, поэтому лучше заметить рост, чем перезапуск.
- Не трогайте расписания перезапуска, пока не поймёте, нужно ли оно вам. Ночной перезапуск, который ничего не исправляет, - это ночное прерывание; см. расписания перезапуска, которые помогают.
- Относитесь всерьёз к crash watcher, если он подаёт голос. RE:NODE каждые две минуты проверяет, не ушёл ли сервер в офлайн и не пошёл ли его аптайм назад, а три перезапуска за час поднимают предупреждение на странице сервера и автоматически открывают тикет. Это сигнал найти причину, а не заглушить его.
- Записывайте, что вы меняли и когда. Через три недели это будет единственный способ связать симптом с причиной.
Последний пункт чек-листа - тот, который пропускают: решите заранее, что вы будете делать, когда всё пойдёт совсем плохо. Какой бэкап восстанавливать, кто сообщает игрокам и сколько времени вы будете пытаться починить, прежде чем откатиться. Запишите это, пока вы спокойны.
FAQ#
Сколько RAM нужно SMP на десять игроков?
С заранее сгенерированным миром, коротким списком плагинов и view distance около 8 вполне комфортно 4 GB, а для чего-то близкого к ванили работает и 2 GB. Это число на самом деле двигают плагины и сборки модов, а не число игроков: сервер с большим количеством модов для тех же десяти человек может потребовать втрое больше.
Нужен ли серверу whitelist?
Для SMP - да. Whitelist устраняет большинство проблем с модерацией до того, как они возникнут, и превращает защиту от грифа из гонки вооружений в формальность. Открыть его позже можно всегда; закрыть после плохой недели гораздо труднее.
Можно ли позже сменить seed или мир?
Не начав заново - нет. Seed вшит в мир при создании, а level-seed после этого игнорируется. Границу менять можно свободно, а новая местность, сгенерированная за её пределами, будет совпадать с существующим миром, так что расширять границу безопасно. Сжимать её меньше, чем там, где уже построились люди, - нет.
Нужен ли мне доменное имя?
Нет, но это самое дешёвое улучшение, которое можно сделать. Адрес, который люди запоминают и в котором нет порта на конце, вводят правильно чаще, а ещё он позволяет позже переехать с сервера, не сообщая всем новое число.
Что делать, когда кто-то первый раз нагриферил?
Сначала посмотрите, потом откатывайте. /co inspect на повреждённых блоках скажет, кто и когда, а затем /co rollback с тем же радиусом и временным окном отменит ровно это. После этого устраните причину, а это почти всегда область, которую не приватили, либо игрок, у которого был op.
Сколько плагинов слишком много для SMP?
Числа нет, но каждый плагин работает в одном и том же главном потоке, поэтому список должен быть продуманным, а не собранным. Права, защита, логирование и профилировщик покрывают большую часть нужного серверу - краткий список и категории, с которыми надо быть осторожным, есть в статье плагины, которые стоит установить.




Комментарии
Полностью анонимно: без аккаунта, без почты, без cookie. Мы храним имя, которое вы ввели, текст и время - больше ничего. Количество ссылок ограничено, разметка не отображается.