Сервер 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.5 | Java 8 | Для большей части этого диапазона подходит и Java 11 |
| 1.17 - 1.17.1 | Java 16 | Единственная версия, которой нужна именно Java 16 или новее |
| 1.18 - 1.20.4 | Java 17 | Долгоживущее плато |
| 1.20.5 и новее | Java 21 | Включая всю линейку 1.21 |
Paper предъявляет те же требования, что и версия Minecraft, на которую он рассчитан, и при слишком старой Java отказывается загружаться с понятным сообщением. Прежде чем что-то делать, проверьте, что у вас стоит:
$ java -versionopenjdk version "21.0.4" 2024-07-16 LTSJava берите у 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-5 | 2 ГБ | 1 ядро | Paper, ванильный геймплей, view-distance=8 |
| 5-15 | 4 ГБ | 1,5 ядра | Несколько плагинов, карта, права |
| 15-30 | 6 ГБ | 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, первый запуск#
На вашей машине, в пустой директории:
$ 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 без дефисов.
Этот первый запуск сервер не стартует. Он записывает файл и завершается:
[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 и поменяйте единственную важную строку:
#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/, которые лучше не трогать.
[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 они разобраны со значениями по умолчанию.
Порты, адреса и как впустить людей#
| Порт | Протокол | Назначение |
|---|---|---|
25565 | TCP | Игровой трафик и пинг для списка серверов |
25565 | UDP | Протокол query, только если enable-query=true |
25575 | TCP | RCON, только если enable-rcon=true |
Java Edition работает по TCP, и на этом всё: в отличие от большинства игр на выживание, отдельного UDP-порта для игры нет. При необходимости порт меняется через server-port в server.properties, и помните, что тогда игрокам придётся вводить порт тоже - если только вы не используете запись SRV.
Подключиться можно тремя способами:
- Прямой адрес. Сетевая игра, затем Добавить сервер, затем
203.0.113.10, если порт по умолчанию, или203.0.113.10:25566, если нет. Всегда проверяйте это первым: так DNS выпадает из уравнения. - Домен. Направьте запись
Aна адрес, и игроки вводятmc.example.com:25565. Это описано в статье как привязать домен к игровому серверу. - Домен без порта. Запись
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:
> op NotchMade Notch a server operator> deop NotchMade Notch no longer a server operatorПосле этого в ops.json появляется запись на каждого оператора. Интереснее всего поле level, потому что op - это не один переключатель:
[ { "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 - вторая вещь, которую нужно настроить до того, как вы кому-то сообщите адрес:
> 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. Мы храним имя, которое вы ввели, текст и время - больше ничего. Количество ссылок ограничено, разметка не отображается.