RE:NODE

Minecraft17 мин чтения

Настройка сервера Minecraft: Java, jar, EULA и операторы

Сервер Minecraft Java с нуля: правильная версия Java, серверный jar, eula.txt, первый запуск, порт 25565 и первый оператор.

1 прочтений

Сервер Minecraft Java - это один файл. Вы кладёте server.jar в пустую папку, запускаете его на версии Java, которая соответствует версии Minecraft, принимаете EULA в текстовом файле, который он создаёт, запускаете ещё раз - и получаете мир, слушающий TCP-порт 25565. Всё остальное - файл свойств, права, плагины, бэкапы - это доработка поверх этих четырёх шагов. В этом руководстве четыре шага сделаны как следует, а затем разобраны решения, в которых потом обидно ошибиться: какая Java, какое серверное ПО, сколько памяти и как люди на самом деле попадают на адрес.

Если вы на хостинге с панелью, шаги с первого по пятый уже выполнены за вас, и можно переходить к разделам про server.properties, порты и операторов. Механику всё равно стоит прочитать: она объясняет каждое сообщение об ошибке, которое вам встретится.

Что вы на самом деле устанавливаете#

Продукта «сервер Minecraft» в том смысле, в каком есть сервер Valheim или сервер Counter-Strike, не существует. Под этими словами люди понимают четыре разные вещи:

  • Ванильный серверный jar, который Mojang выпускает для каждой версии. Это собственный серверный код игры: он ведёт себя точно так же, как одиночная игра, и вообще не поддерживает плагины.
  • Paper - форк ванильного сервера, в котором переписаны самые горячие участки кода и подключён API плагинов Bukkit/Spigot. С тем же миром и теми же игроками работает в несколько раз быстрее, и именно его запускает почти каждый публичный сервер. Несколько экзотических поведений редстоуна и ферм мобов отличаются от ванильных - намеренно и с документацией.
  • Fabric, NeoForge или Forge - загрузчики модов. Они меняют саму игру, поэтому у каждого игрока должны стоять те же моды тех же версий. Это та граница, которую стоит понять до выбора: плагины работают на стороне сервера, и игроки заходят с немодифицированным лаунчером, а с модами так не выйдет.
  • Выделенный сервер Bedrock - совершенно отдельная программа для консольной и мобильной редакций. Он не читает миры Java, не запускает плагины Java, и клиенты Java не могут на него зайти. Кроссплей в обратную сторону возможен через слой трансляции - см. Geyser и Floodgate для кроссплея с Bedrock.

Для первого сервера, на который друзья заходят, просто набрав адрес, берите Paper. Вы получаете ванильное поведение с точностью до нескольких пограничных случаев, возможность позже добавить плагин прав и карту, а также запас производительности, который нужен машине на 2 ГБ. Более длинная версия этого спора - в статье Paper, Fabric или vanilla. Дальше в руководстве предполагается Paper, а там, где ванильный сервер отличается, это отмечено.

Сначала выберите версию Java#

Это самая частая причина, по которой совсем новый сервер отказывается запускаться. Сервер Minecraft скомпилирован под конкретный релиз Java, и на более старой версии он сразу падает с ошибкой версии class-файла. Более новая Java обычно подходит, более старая - никогда.

Версия MinecraftМинимальная JavaПримечания
1.8 - 1.16.5Java 8Для большей части этого диапазона подходит и Java 11
1.17 - 1.17.1Java 16Единственная версия, которой нужна именно Java 16 или новее
1.18 - 1.20.4Java 17Долгоживущее плато
1.20.5 и новееJava 21Включая всю линейку 1.21

Paper предъявляет те же требования, что и версия Minecraft, на которую он рассчитан, и при слишком старой Java отказывается загружаться с понятным сообщением. Прежде чем что-то делать, проверьте, что у вас стоит:

bash
$ java -versionopenjdk version "21.0.4" 2024-07-16 LTS

Java берите у Eclipse Temurin на adoptium.net или у Amazon Corretto. Подойдёт и JDK, и JRE - сервер запустится на любом из них, - и берите релиз с долгосрочной поддержкой (8, 11, 17, 21), а не короткоживущий. В Debian или Ubuntu хватит apt install openjdk-21-jre-headless: пакет headless пропускает графические библиотеки, которые серверу никогда не понадобятся.

На RE:NODE версия Java подбирается под версию Minecraft при создании сервера, так что весь этот раздел закрыт за вас. Если позже вы сами смените версию Minecraft, проверьте вкладку Startup: jar от 1.21 на образе с Java 17 не запустится.

Память, процессор и диск#

Сервер Minecraft держит в памяти загруженные чанки, сущности и блочные сущности. Поэтому память растёт вместе с тем, сколько мира загружено одновременно, то есть примерно с числом игроков, умноженным на дальность прорисовки, и почти не зависит от того, насколько велик мир на диске. Мир на 40 ГБ с тремя игроками онлайн обходится дёшево. Мир на 2 ГБ с тридцатью игроками, разбредшимися по нему, - нет.

ИгрокиПамятьПроцессорЧто за сервер
1-52 ГБ1 ядроPaper, ванильный геймплей, view-distance=8
5-154 ГБ1,5 ядраНесколько плагинов, карта, права
15-306 ГБ2 ядраПубличный SMP, view-distance=6, заранее сгенерированный мир
Сборка модов, 2-8 игроков6-8 ГБ2 ядра100+ модов, основная цена - инициализация модов
Большая сборка, полный сервер10-14 ГБ3+ ядраМомент, когда настройка выгоднее покупки

Две вещи в этой таблице важнее самих цифр.

Первая: основной игровой цикл Minecraft фактически однопоточный. На Paper загрузка чанков, часть генерации мира и сетевой ввод-вывод идут вне основного потока, но сам тик - нет, поэтому одно быстрое ядро лучше многих медленных. Если сервер упирается в 100% одного ядра, а график памяти ровный, дополнительная память ничего не изменит. Диагностика описана в статье CPU или RAM для игровых серверов.

Вторая: больше heap - не значит лучше. Java не использует память, которую у неё не просили, а больший heap делает каждую паузу сборки мусора длиннее, а не короче. Сервер Paper на двадцать игроков с 16 ГБ обычно тикает не лучше, чем тот же сервер с 6 ГБ и разумными флагами, а паузы у него хуже. Разбивка по числу игроков - в статье сколько RAM нужно серверу Minecraft, а выбор размера heap с учётом лимита контейнера, на чём люди обычно и ошибаются, разобран в статье флаги JVM и версии Java для Minecraft.

Диска нужно немного: файлы сервера занимают около 200 МБ для Paper плюс то, что скачает jar, а мир растёт по мере исследованной территории - от 100 МБ до нескольких гигабайт для обычного выживания. NVMe важен для одного конкретного случая - для подвисания при автосохранении раз в пять минут на большом мире.

Установка: jar, EULA, первый запуск#

На вашей машине, в пустой директории:

bash
$ mkdir -p /srv/minecraft && cd /srv/minecraft$ wget -O server.jar "https://api.papermc.io/v2/projects/paper/versions/1.21.1/builds/132/downloads/paper-1.21.1-132.jar"$ java -Xms2G -Xmx2G -jar server.jar --nogui

Точную ссылку на сборку берите на papermc.io/downloads/paper, а не угадывайте номер билда: на странице есть прямая ссылка для выбранной версии. Для ванильного jar загрузка находится на minecraft.net, а последний аргумент - nogui без дефисов.

Этот первый запуск сервер не стартует. Он записывает файл и завершается:

code
[ServerMain/WARN]: Failed to load eula.txt[ServerMain/INFO]: You need to agree to the EULA in order to run the server.Go to eula.txt for more info.

Откройте eula.txt и поменяйте единственную важную строку:

eula.txt
#By changing the setting below to TRUE you are indicating your agreement to our EULA.eula=true

Вы соглашаетесь с лицензионным соглашением конечного пользователя Mojang, и владельцев серверов подводит его коммерческий раздел: нельзя брать плату за доступ к игре и продавать то, что влияет на геймплей. Принятая граница - косметика и ранги, не дающие преимущества, и она уже, чем думает большинство магазинов донатов. Если речь пойдёт о деньгах, читайте само EULA, а не пересказ на форуме.

Теперь запустите сервер по-настоящему. Jar Paper - это патчер: при первом запуске он скачивает у Mojang подходящий ванильный сервер, накладывает патчи и кэширует результат, поэтому машине один раз нужен исходящий доступ в интернет. Ванильный jar начиная с 1.18 - это бандлер, который распаковывается сам таким же образом. В любом случае вы получите папки libraries/ и versions/, которые лучше не трогать.

code
[Server thread/INFO]: Starting minecraft server version 1.21.1[Server thread/INFO]: Preparing level "world"[Server thread/INFO]: Preparing start region for dimension minecraft:overworld[Server thread/INFO]: Time elapsed: 6471 ms[Server thread/INFO]: Done (18.402s)! For help, type "help"

Строка Done - это то, чего вы ждёте. Генерация мира на свежем сервере занимает от пятнадцати секунд до двух минут, в зависимости от диска и размера стартовой области. Останавливайте сервер командой stop в консоли, а не закрытием окна и не убийством процесса: мир записывается при автосохранении и при чистой остановке, а kill выбрасывает всё, что накопилось с последнего сохранения.

На RE:NODE этого шага нет. Планы Minecraft запускают Paper с подходящей версией Java, уже принятым EULA и уже сгенерированным миром, так что сервер работает к моменту, когда вы впервые открываете консоль. Если вам нужен другой jar - сервер Fabric или NeoForge, форк Paper, собственный лаунчер сборки модов, - вы загружаете его через файловый менеджер или SFTP и указываете его на вкладке Startup. Белого списка разрешённых модов и плагинов нет, и установщика сборок в один клик тоже нет: файлы приносите вы.

Файлы, которые создаёт сервер#

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

ПутьЧто это
server.propertiesОсновной конфиг. Читается только при запуске
eula.txtСтрока, которую вы только что поменяли
world/Файлы регионов Верхнего мира, level.dat, данные игроков
world/DIM-1, world/DIM1Незер и Энд внутри той же папки мира
ops.jsonОператоры, у каждого свой уровень прав
whitelist.json, banned-players.json, banned-ips.jsonСписки доступа, по UUID
usercache.jsonКэш соответствия имени и UUID. Можно удалять
logs/latest.log, logs/*.log.gzТекущий лог, затем по одному gzip на каждый перезапуск
plugins/Только Paper. По одному jar на плагин, рядом папки с конфигами
bukkit.yml, spigot.ymlУнаследованные конфиги Bukkit и Spigot от Paper
config/paper-global.ymlСобственные настройки Paper, на весь сервер
config/paper-world-defaults.ymlНастройки Paper для каждого мира, применяются ко всем мирам
libraries/, versions/, cache/Распакованный код сервера. Не редактировать
crash-reports/Появляется, когда JVM падает тяжело

Три замечания к этому списку. Настройки Paper в эпоху 1.19 переехали из единого paper.yml в папку config/, так что любое руководство, советующее править paper.yml, устарело. Незер и Энд лежат внутри world/ в ванильном сервере и в Paper, но в отдельных папках верхнего уровня в установках эпохи Spigot и у некоторых хостеров, и это классическая причина, по которой при загрузке мира теряется Незер. И наконец, ops.json и whitelist.json привязаны к UUID, а не к имени, поэтому они переживают смену ника игроком и полностью ломаются на сервере в offline-режиме.

server.properties целиком заслуживает отдельного прочтения: в нём больше шестидесяти ключей, и около дюжины из них меняют ощущение от сервера. В статье все ключи server.properties они разобраны со значениями по умолчанию.

Порты, адреса и как впустить людей#

ПортПротоколНазначение
25565TCPИгровой трафик и пинг для списка серверов
25565UDPПротокол query, только если enable-query=true
25575TCPRCON, только если enable-rcon=true

Java Edition работает по TCP, и на этом всё: в отличие от большинства игр на выживание, отдельного UDP-порта для игры нет. При необходимости порт меняется через server-port в server.properties, и помните, что тогда игрокам придётся вводить порт тоже - если только вы не используете запись SRV.

Подключиться можно тремя способами:

  1. Прямой адрес. Сетевая игра, затем Добавить сервер, затем 203.0.113.10, если порт по умолчанию, или 203.0.113.10:25566, если нет. Всегда проверяйте это первым: так DNS выпадает из уравнения.
  2. Домен. Направьте запись A на адрес, и игроки вводят mc.example.com:25565. Это описано в статье как привязать домен к игровому серверу.
  3. Домен без порта. Запись SRV на _minecraft._tcp.mc.example.com несёт порт, и игроки вводят просто mc.example.com. Именно такую настройку стоит сделать, а точная запись есть в статье SRV-записи для Minecraft.

Оставьте server-ip в server.properties пустым, чтобы сервер слушал все интерфейсы. Вписать туда свой публичный адрес - популярный вредный совет, который ломает локальные подключения и ничего полезного не даёт. В статье порты игровых серверов объяснено, зачем нужен порт query и почему сервер может работать и при этом быть невидимым.

Планы Minecraft на RE:NODE идут с одним выделенным портом - игровым; остальные добавляются на вкладке Network, а порты query и RCON входят, когда они нужны. Если вы всё же откроете RCON, сначала прочитайте безопасная работа с RCON: это незашифрованный протокол с единственным общим паролем.

Операторы, уровни прав и whitelist#

Оператор - это игрок, записанный в ops.json. Надёжный способ создать первого - сделать это из консоли, потому что у консоли уже уровень 4:

code
> op NotchMade Notch a server operator> deop NotchMade Notch no longer a server operator

После этого в ops.json появляется запись на каждого оператора. Интереснее всего поле level, потому что op - это не один переключатель:

ops.json
[  {    "uuid": "069a79f4-44e9-4726-a5be-fca90e38aaf5",    "name": "Notch",    "level": 4,    "bypassesPlayerLimit": false  }]
УровеньЧто даёт
1Обход защиты спавна. Больше ничего
2/gamemode, /give, /tp, /setblock, /summon, /effect, /difficulty и командные блоки
3Уровень 2 плюс /ban, /kick, /op, /deop, /whitelist
4Всё, включая /stop и /save-all

op-permission-level в server.properties задаёт уровень, который выдаёт /op, и по умолчанию он равен 4. Если у вас больше двух человек в команде, опустите его до 2, а тем, кому нужны баны, выдайте уровень 3 правкой файла. Ещё лучше вообще перестать использовать op для ролей персонала и взять плагин прав, который даёт разрешения по отдельным командам, а не четыре корзины: стандартный ответ - группы и права LuckPerms, а компромисс разобран в статье whitelist и права.

Whitelist - вторая вещь, которую нужно настроить до того, как вы кому-то сообщите адрес:

code
> whitelist add Notch> whitelist on> whitelist reload

Это записывает whitelist.json и переключает white-list=true в server.properties. Есть две детали, на которых спотыкаются. Операторы обходят whitelist, если не выставлено enforce-whitelist=true, а включение whitelist не выкидывает уже подключённых игроков, пока вы не выполните whitelist reload - либо, в современных версиях, пока это не сделает enforce-whitelist при следующей проверке.

Перезапуски, бэкапы и обновления#

Серверу Minecraft не нужен ежедневный перезапуск, как модифицированному, но три привычки стоит завести в первый же день.

Останавливайте чисто. /stop из консоли или кнопка Stop в панели сбрасывает мир на диск и завершает работу. Kill, падение хоста или упор в лимит памяти теряют всё с момента последнего автосохранения, а по умолчанию это до пяти минут игры. /save-all flush немедленно принудительно записывает мир и подходит перед любым рискованным изменением.

Делайте бэкапы вне машины. Мир - это папка файлов регионов, и повреждённый level.dat или неточно нацеленное удаление уносят всё. Копия на том же диске бэкапом не является. На каждом плане Minecraft в RE:NODE есть слоты бэкапов: они хранятся вне защищаемой машины, восстанавливаются кнопкой и могут быть заблокированы от ротации, а вкладка Schedules запустит ночной бэкап по cron-выражению, с упорядоченным списком задач, чтобы сохранить, сделать бэкап и перезапустить по очереди. Удаление сервера удаляет и его бэкапы, в том числе заблокированные, так что скачайте копию всего незаменимого. Довод в пользу того, чтобы проверять хотя бы один бэкап до того, как он понадобится, приведён в статье бэкапы, которые действительно восстанавливаются.

Обновляйтесь осознанно. Paper выпускает сборки непрерывно, и гнаться за каждой незачем. Обновляйтесь, когда вышла нужная вам версия, когда объявлено исправление безопасности или когда этого требует плагин. Переход на новую версию Minecraft - событие покрупнее: миры обновляются только вперёд и никогда назад, плагины ломаются на новых API Bukkit, а мир 1.20, один раз открытый сервером 1.21, обратно уже не вернуть. Каждый раз сначала делайте бэкап. Чек-лист - в статье обновление версий Minecraft.

Ещё одна вещь, которую стоит сделать до прихода людей: заранее сгенерируйте мир до предполагаемой границы. Генерация чанков - самое дорогое, что делает сервер, и если сделать её один раз заранее, лаги первой недели исследования превращаются в разовую работу. Инструменты описаны в статье границы мира и предварительная генерация, а остальная часть предзапускового списка есть в чек-листе запуска SMP.

Ошибки, которые вы точно увидите#

`FAILED TO BIND TO PORT!` и следом java.net.BindException: Address already in use. Что-то уже занимает 25565 - обычно это копия сервера, которую вы считали остановленной. Найдите её и остановите или смените server-port.

`You need to agree to the EULA in order to run the server.` В eula.txt всё ещё false, либо вы правили копию в другой папке.

`java.lang.OutOfMemoryError: Java heap space`. Heap действительно заполнен. Поднимите -Xmx, если под лимитом контейнера или машины есть место, а если нет, найдите, что его съедает, - обычно это плагин, удерживающий чанки, или слишком большая дальность прорисовки для купленной памяти. Обратите внимание на разницу между этим и остановкой контейнера из-за превышения лимита памяти: в первом случае у Java кончился выданный ей heap, во втором процесс останавливает ядро. На RE:NODE во втором случае контейнер останавливается и чисто перезапускается, а не уходит в своп, - это быстро, но означает, что у несохранённого мира пропадут последние минуты.

`Can't keep up! Is the server overloaded? Running 2140ms behind, skipping 42 tick(s)`. Сервер сильно не уложился в бюджет тика. Разовое событие во время генерации мира или автосохранения - это нормально. Если повторяется, это проблема производительности: причины разобраны в статьях почему падает TPS и что делать и руководство по оптимизации Paper.

`Internal Exception: io.netty.handler.timeout.ReadTimeoutException` на клиенте. Сервер перестал отвечать на тридцать секунд - долгая пауза сборки мусора, замерзший тик или проблема в сети между вами и ним.

`io.netty.channel.AbstractChannel$AnnotatedConnectException: Connection refused` на клиенте. По этому адресу и порту никто не слушает. Сервер не запущен, порт неверный или файрвол его отбрасывает.

`Outdated server! I'm still on 1.21.1` или Outdated client!. У Java Edition нет допуска по версиям: клиент и сервер должны совпадать точно, вплоть до патча. Прокси может скрыть это от игроков, больше ничто.

`Failed to verify username` или `Failed to login: Invalid session`. Аутентификация Mojang недоступна либо сессия игрока устарела. Пусть перезапустит лаунчер. Если это происходит у всех сразу, дело не в вас.

Сервер запустился, `Done` появилось, а никто не может зайти. Проверьте адрес снаружи вашей собственной сети. Сервер, который работает в локальной сети и не работает из интернета, в девяти случаях из десяти упирается в файрвол или в проброс порта, а чтение консоли покажет, доходит ли попытка подключения вообще.

FAQ#

Нужно ли покупать Minecraft, чтобы запустить сервер?

Серверное ПО можно скачать и запустить бесплатно. Игрокам нужна лицензионная копия Minecraft, чтобы зайти на сервер с online-mode=true, потому что именно эту проверку и выполняет аутентификация. Аккаунт на машине, где работает сервер, не нужен.

Можно ли запустить сервер на домашнем компьютере?

Да, и это самый дешёвый способ проверить. Все проблемы лежат за пределами Minecraft: нужно пробросить 25565 на машину, нужен роутер, который вообще это умеет (многие мобильные и оптоволоконные подключения ставят вас за carrier-grade NAT, где это невозможно), исходящая скорость делится со всеми в доме, а мир доступен, только пока включён компьютер. Для вечера с двумя друзьями подходит, а для всего, что люди ждут увидеть и завтра, - плохо.

Как сменить seed мира или начать новый мир?

Задайте level-seed в server.properties и смените level-name на папку, которой ещё нет, затем перезапустите. Старый мир остаётся на диске под своим именем, так что вернуться можно, снова поменяв level-name. Смена seed без смены имени ничего не даёт, потому что после создания мира seed хранится в level.dat.

Почему сервер показывает максимум 20 игроков, хотя ресурсов хватит на больше?

max-players=20 - значение по умолчанию, и это просто число в server.properties. Поднимите его до того, что реально потянут ваши память и процессор, - оценка есть в таблице выше. Число слотов не ограничивает ничто, кроме этой настройки.

Vanilla или Paper для небольшого сервера с друзьями?

Paper, если вам специально не нужно ванильное поведение редстоуна. Он запускает тот же мир, игроки заходят с обычным лаунчером, а плагин прав, веб-карту или плагин бэкапов можно добавить позже без какой-либо миграции. Переход с vanilla на Paper - это замена jar с сохранением мира; обратно - тоже.

Какой плагин поставить первым?

Плагин прав и профилировщик, до всего развлекательного. LuckPerms - чтобы роли персонала не были четырьмя уровнями op, а spark - чтобы при подвисаниях сервера можно было выяснить, что их вызвало, а не гадать. Короткий список - в статье плагины Minecraft, которые стоит поставить.


Комментарии

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

0/2000