Предисловие от автора

Без лишних слов, если вы захотели запустить свой сервер, с полным доступом, кастомизацией, чтобы ни от кого не зависеть, в этой статье я подробно расскажу как это сделать.

Предисловие о железе

Перед тем, как запускать и настраивать, необходио определиться "а где?" это стоит делать.
Я разделяю существущие варианты на две принципиально разные категории:

  1. взять в аренду VPS/VDS на любом хостинге.

  2. "Самохостинг"- постоянно включенный ваш компьютер у вас дома/ в гараже/ на даче.

  • Плюсы первого варианта: простота и беззаботность для пользователя (вас), стабильность работы. Ни один хостинг провайдер не идеален, периодически "падает" у всех, однако поверьте, у вас дома интернет и свет будет мигать во много раз чаще, чем у них. так же, если вы выберете локацию не очень близко, бонусом вы получаете "то", что у нас теперь нельзя называть, ресурсов на "это" уйдёт смешно мало, относительно игрового ядра.

  • Минусы первого варианта: дороговизна относительно получаемых ресурсов

  • Плюсы второго варианта: относительная дешевизна, полная свобода, ваши данные физически у вас. Можно взять старое, не нужное, валяющееся у вас без дела железо.

  • Минусы второго варианта: не абсолютно бесплатно, необходимость тратить время, париться, обслуживать и следить, вероятность случайного произвола со стороны кошки, собаки, детей и прочих домочадцев. На тарифах некоторых провайдеров необходимо платить за "белый" ip.

Что на счёт ресурсов, а именно вычислительных и хранительных:

  • CPU.
    На хостинге на котором я взял самый начальный тариф для игр, 1vCPU имел следующие спеки:

Не смог узнать больше информации о цп, какой его % достаётся именно мне, но вроде всё ± как и у всех. В конечном итоге нам не очень сильно понравилось. С учётом абсолютной ванилы, нормального ядра, радиуса тикающих вокруг игрока четырёх чанков (на ещё более меньшем значении выживать и охотится становится уж совсем трудно), умеренно новой и оптимизированной версии, без тяжёлых плагинов, с предсозданными чанками и без необходимости генерировать их с нуля, при всём при этом- цп всё равно постоянно долбился в сотку даже от одного игрока онлайн, просто решившего убить пару коров, а консоль в это время взрывалась репортами о перегруженности сервера, а так же о сотнях и даже тысячах тиков, которых так и не случилось (их должно случаться до 20 в секунду). Как вариант в стиле "зато не пешком!", какая- нибудь заглушка, или просто в креативе построить что- нибудь для себя, с натяжкой, но жизнеспособный. однако комфортно выживать даже вдвоём, исследовать, охотится, строить, пользоваться фермами и механизмами, PvE или PvP очень не комфортно.

одновременно с этим, мой домашний, не разогнанный:

Дешманский цп с алика
Дешманский цп с алика

Нам так и не удалось ни разу получить уведомление о перегрузке по цп. Выживание, радиус тикающих чанков вокруг=10, полёт на крыльях, любые фермы и механизмы, вдвоём, впятером, ему вообще всё равно, так и не увидел ни одного потока забитого в сотку.

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

  • ОЗУ
    довольно простой параметр, нам важен только объём, скорость же не так сильно важна, подойдёт даже ddr3.

    в общих чертах, варинты менее 4-6 гб озу не рассматриваются вообще, и никогда. С небольшими ограничениями, оптимизациями и настройками, можно вполне комфортно вдвоём- вчетвером поместиться в 8 гб, а всей компанией до 10 человек мы так и не смогли приблизится и преодолеть порог в 15 гб. (В этом плане есть "лайфхак", если игроки стоят в одном месте, то они и грузят одни и те же чанки, сильно экономя ресурсы озу и цп.)

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

Расчёты довольно близки к истине. Учитывайте квадратичную зависимость при увеличении радиуса! При увеличении радиуса в два раза, вес мира увеличивается в 4 раза, а при увеличении радиуса в 3 раза, гигов потребуется уже в 9 раз больше.

Перед входом в консоль

Выбор ос. Если нет каких- либо требований, рекомендую выбирать ubuntu, или debian. они проще и менее требовательны к новичкам.

Если вы выбрали сторонний хостинг, пропустите следующие шаги вплоть до пункта про облачный хостинг.

Если вы выбрали вариант с домашним хостингом, вам потребуется установить ос. Позволю не углубляться в эту обширную тему, подойдёт любая инструкция "Как установить ubuntu". Вам там потребуется флешка которую не жалко отформатировать, скачать образ и приложение для создания загрузочных флешек. Затем вставить флешку в ваш будущий сервер, войти в биос, выбрать загрузиться с флешки, и далее нажимать "Y" и отвечать на вопросы. В инструкциях вам всё расскажут, не бойтесь, это просто.

(Дальше я буду рассматривать варианты без графических оболочек.) Затем нужно будет подключить ваш сервер к своему домашнему роутеру, и узнать его локальный ip. Для этого подключимся к тому же роутеру проводным или беспроводным способом, с телефона или другого компьютера, и откроем настройки интернета

настройки проводной сети в windows
настройки проводной сети в windows
Внастройки сети wifi в смартфоне
Внастройки сети wifi в смартфоне

Как видим, наши устройства имеют ip вида 192.168.31.КАКОЕ-ТО_ЧИСЛО. Скорее всего у вас будет так же, либо вместо 31 у вас будет 1 или 0. Замените "какое-то число" на "1', и прямо так и пишите в строчку браузера.

Далее сильно зависит от модели роутера, но принцип один. Войдите в открывшуюся панель управления, откройте список подключённых устройств, и найдите там ваш сервер, у него будет такой же ip, только "какое-то число" будет другим. На самом деле, это число через час или сутки станет другим, поэтому чтобы этого не допустить, рекомендую сразу же сохранить/запомнить/записать на бумажке MAC-адрес и ip, и отправится в настройки локальной сети или DHCP. там нам нужно будет найти список и кнопку добавить, нажать на неё, вставить туда наши ip и MAC-адрес, и нажать сохранить. Готово, вы молодцы!

Если вы выбрали вариант с облачным хостингом, то всё будет намного проще. на сайте вашего хостера, в личном кабинете найдите ip и пароль вашего сервера, так же, вероятно вам их прислали письмом на электронную почту.

Итак, консоль

Вам потребуется ssh клиент. Подойдёт какой- нибудь putty, termius, или любой другой который вы найдёте и который вам понравится. Рекомендую выбирать сразу с sftp чтобы было удобнее. Создаём подключение, используем ip который мы записали на бумажку, либо нашли в письме в предыдущем шаге, а пароль из письма, либо если вы сами устанавливали ос, вы найдёте его на сайте, на котором вы скачали образ ос. Поздравляю, вы настоящий сисадмин со своим самым настоящим сервером.

Возможно, однажды тут появится ссылка на статью о настройке безопасности в linux.

Теперь введём базовые, линуксовые команды с которых всё начинается.

sudo apt update && sudo apt upgrade -y

Сменим пароль командой:

passwd
*старый пароль*
*новый пароль*
*новый пароль ещё раз*

Теперь установим необходимые нам в скором в будущем программные пакеты:

sudo apt install cron tmux nano

Создадим нового пользователя c именем "Minegot", который будет запускать ядро, но иметь ограниченные права:

useradd Minegot -m -s /bin/bash
passwd Minegot
*придумайте для него новый пароль, отличный от основного*
*новый пароль ещё раз*
su Minegot
*пароль для Minegot*

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

Проверим в каком пользователе мы находимся сейчас

whoami

Находясь в нашем новом пользователе, перейдём в его директорию, и создадим папку.

сd /home/Minegot/
mkdir mine

Ядро и java

Я использую ядро paper с их официального сайта. вы можете выбрать то, которое захотите, только там же где берёте своё ядро прочитайте, какая версия java ему необходима. выйдите в основного пользователя командой:

su
*пароль основного пользователя*
whoami

Установим java нужной версии и проверим установившуюся версию.

sudo apt install openjdk-21-jre-headerss -y
java -version

Не забудьте изменить 21 на необходимую вам версию.

Используя ваш клиент sftp, положите ваше ядро в /home/Minegot/mine/, туда же, если хотите, можете положить картинку 64*64 с названием и форматом server-icon.png, затем вернитесь в пользователя Minegot.

Используем nano

Находясь в консоли, мы можем использовать команду nano с названием файла, это «местный» аналог блокнота, только консольный. если файл не был найден, он будет создан.

nano /home/Minegot/mine/start.sh

Откроется пустой лист, вставьте туда:

#!/bin/bash
#ВНОСЯ ИЗМЕНЕНИЯ, НЕ ЗАБУДЬ УЧЕСТЬ crontab -e
sleep 5
tmux new-session -d -s "ms"
sleep 10
tmux send-keys -t ms 'java -Xmx7G -Xms2G -jar paper-1.21.1-14.jar nogui' Enter
sleep 50
tmux send-keys -t ms 'say Сервер запущен из start.sh' Enter
sleep 60
tmux send-keys -t ms 'wall "Сервер не смог запуститься!"' Enter

Измените "paper-1.21.1-14.jar" на название файла вашего ядра, а 7 на количество гигабайт озу, больше которого процессу не будет доступно. Учитывайте, что всегда должен оставаться запас на работу самой ос. Сохраните внесённые изменения сочетанием клавиш ctrl+x затем клавиша Y, а затем Enter. теперь сделаем файл исполняемым:

chmod u+x /home/Minegot/mine/start.sh

Теперь, наконец, настало время. Проверим что лежит в папке, и запустим наш файл командой:

cd /home/Minegot/mine/
ls
./start.sh &

Подождите 2 минуты, скрипт закроется, после этого снова выполните:

ls

Если в папке появились файлы eula.txt, server.properties, а так же папка plugins, значит мы всё сделали правильно. Используя sftp положите в папку /home/Minegot/mine/plugins любые плагины которые вам необходимы. Читайте описания, совместимы ли они с вашей версией и ядром. Затем, начинайте редактировать файл server.properties:

nano server.properties

server.properties на которые стоит обратить внимание

Не рекомендую менять строки, которые вы не знаете за что отвечают. Вот те которые вам скорее всего необходимы:
difficulty=easy так же может быть normal или hard

enable-rcon=false безопасность, стараться не включать

gamemode=survival или creative

motd= §d§l§nЦветное, короткое описание вашего сервера

max-world-size=4000 размер вашего мира, сторона квадрата границы мира в блоках. обратите внимание, это не как радиус, а как диаметр, только у квадрата

online-mod=false поставьте true если у вас есть интернет и лицензии

server-port=25565 порт, по которому мы будем подключаться.

simulation-distance=10 радиус вокруг игроков, в пределах которого сервер живёт, работают фермы и происходят события. основной потребитель озу и цп. Менее 4 ставить только не от хорошей жизни. В оригинальной ваниле он 10, поэтому не вижу смысла ставить больше

view-distance=32 радиус в чанках, который отправляется игрокам с высокой дальностью прорисовки. не смог зафиксировать какого либо влияния этого параметра на озу и цп, можно спокойно ставить большие значения от 16 до 64.

Первый запуск

пришло время первого запуска. откройте eula.txt спомощью nano:

nano eula.txt

замените false на true, и сохраните. запустите наш скрипт:

./start.sh &

и подождите 2-5 минут. попробуйте подключиться к серверу из клиента игры, используя ip порт. удачной игры!

Скрытый текст

откроет окно с консолью, где должна быть запущена консоль майнкрафта. Если вы видите, что в предыдущих строчках она закрылась, и открыта консоль linux, значит minecraft закрылся. Если вы сомневаетесь, введите "list", minecraft вам ответит колличеством пользователей на сервере, а linux скажет что такой команды нет.

Если Minecraft закрылся, листайте, читайте, и ищите причину, скорее всего она будет явно написана. Возможно проблема в плагинах, server.properties, eula.txt, ядре или java.

если же консоль minecraft активна, значит проблема в интернет соединении, фаерволах или адресации.

Скрытый текст

если вы владеете site.com создайте srv запись с телом:

_minecraft._tcp.mymine.site.com
weight=5
priority=0
port=25565 (или любой другой ваш порг)
target= ip, либо адрес dyndns если вы его используете

Готово! сервер доступен, если ввести в клиенте игры в адрес сервера mymine.site.com

Настроим cron на автоматический запуск сервера при включении ос

crontab -e

Выберем цифру, соответствующую nano если спросят. В открывшемся документе не трогая другие строчки, создаём новую строчку, и пишем туда:

@reboot /home/Minegot/mine/start.sh

Сохраняем и выходим, пробуем перезагрузить наш сервер:

reboot now

Ждём, иногда долго ждём, и проверяем можно ли подключиться к игре после рестарта.

Ещё для самохостеров

к сожалению, на данный момент мы сможем поиграть только вместе с теми, кто подключён только к нашему роутеру. Если вы хотите открыть возможность играть с вами всем жителям интернета, придётся сделать ещё пару действий. вернитесь в браузер, куда мы писали 192.168... напишите ещё раз, и войдите в панель управления. откройте настройки интернета, или WAN, и найдите там ip адрес. Внимательно, НЕ LAN, а WAN адрес.

Если он один из:

  • 10.0.0.0 — 10.255.255.255

  • 100.64.0.0 — 100.127.255.255

  • 172.16.0.0 — 172.31.255.255

  • 192.168.0.0 — 192.168.255.255

значит всё плохо, и мы за nat. Меняем провайдера, либо звоним, подключаем услугу "выделенный ip/ белый ip". Решаем эту проблему, ведь дальше делать инструкцию бессмысленно.

Если же ip роутере не соответствует приведённым диапазонам, мы гуглим "мой ip" в интернете, и видим тот же самый ip что и в роутере, это крупное везение, либо результат подключения услуги. В панеле настройки роутера открываем раздел port forvarding/ перенаправление портов, и добавляем правило:
внешний порт= 25565 или тот, к которому вы хотите чтобы подключались жители интернета
внутренний порт= 25565 или тот, который указан в server.properties
ip= ip который мы выписывали на бумажку. Применяем, если нужно перезагружаем роутер. Просим жителей интернета тестировать.

Ещё есть такой момент, если вы не подключали услугу от провайдера, при этом к вам подключаются из интернета, есть вероятность, что ваш ip рано или поздно изменится, и соответственно всё перестанет работать, пока не узнать новый ip и все не укажут в своих клиентах новый. Если у вас так происходит и вам это надоело, значит вам придётся озадачиться dyndns, поищите в интернете "как настроить dyndns на роутере", это просто.

P.S.

Благодарю за прочтение, надеюсь, было полезно.

Комментарии (13)


  1. tuxi
    31.08.2024 08:14

    А на windows 10 pro не сложно поставить? А то сервер дома есть, но по ряду причин там должна быть винда. В то же время есть подрастающее поколение бандитов зависающих с друзьями в том самом майнкрафте.


    1. IgorIlyin
      31.08.2024 08:14
      +2

      Под Windows прекрасно всё устанавливается. Главное - поставить jre или jdk правильной версии (зависит от версии сервера). Плюс, необходимо порты открыть на домашнем роутере и настроить маршрут из интернета на комп с сервером. Ещё желателен фиксированный IP, хотя для игры с друзьями можно и без него обойтись.


    1. Ptasema Автор
      31.08.2024 08:14
      +1

      На сколько я знаю, у пользовательских версий окон есть проблемы с круглосуточной работой.

      Примерно инструкция будет такой же. Нужно будет точно так же на не супер пользователе создать папку, и положить в неё файл ядра. Установите java нужной версии. Вместо start.sh нужно будет написать bat'ник. С подробным синтаксисом не подскажу, но команда должна выглядеть примерно так же, исключая tmux обвязку. Сделать файл bat исполняемым(если это требуется в окнах)?

      Из командной строки переходим в нашу папку, и запускаем bat, проверяем работает ли. Добавляем этот bat в автозапуск ос, меняем properties, eula и если требуется, наполняем папку с плагинами.

      Так же в файле spigot.yml (он будет создан при первом запуске там же, где и всё остальное), будет строка

      restart-script: ./start.sh

      Вот тут нужно будет прописать запуск вашего батника вместо "./start.sh"

      Остальное так же, пробрасываем порты и т.д.


      1. Ptasema Автор
        31.08.2024 08:14
        +1

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


  1. Tyusha
    31.08.2024 08:14

    Отлично. Ничего не забыли, кроме... установки Minecraft-а. :)


    1. Ptasema Автор
      31.08.2024 08:14

      Написал же про ядро, или вы про клиент?


  1. kma21
    31.08.2024 08:14

    я когда-то писал ansible-роль для этого. с использованием какой-то утилиты для управления сервером (мой друг разработчик убедил меня, что это лучшая утилита, т.к. она написана на расте) и хостингом на alpine-linux
    https://github.com/mekatum/ansible_role_minecraft_server


    1. Ptasema Автор
      31.08.2024 08:14

      Звучит неплохо. Увас продуман (и если да, то как) автозапуск после старта системы? Защита от запуска двух экземпляров? Управление версиями java, если в системе их установленно сразу несколько?


  1. vazir
    31.08.2024 08:14

    Где скачать сервер майнкрафта? Где взять клиент майнкрафта?


    1. Ptasema Автор
      31.08.2024 08:14

      Ядро на сайте ядра, я пользуюсь paper. Клиент на официальном сайте игры, вроде теперь должно ещё в майкрософт сторе появиться, но это не точно.


  1. s1lv3r-f0x
    31.08.2024 08:14

    я правильно понимаю что gpu в целом не требуется и достаточно будет более менее мощного проца?


    1. Ptasema Автор
      31.08.2024 08:14

      Верно. Серверная сторона запускается даже на vps, имеющем только cpu, и не имеющего gpu никакого в принципе, совсем и вообще.


  1. L_A_M_E_R
    31.08.2024 08:14

    Кажется эта тема будет вечной