Привет, Хабр! Точнее, проходимцы, которые ищут, как поднять minecraft сервер для игры с друзьями.
Статья рассчитана на непрограммистов, несисадминов, в общем, не на основную аудиторию Хабра. В статье — пошаговая инструкция по созданию minecraft сервера с выделенным IP, адаптированная для людей, далёких от IT. Если это не про вас — статью лучше пропустить.
Что такое сервер?
Итак, что такое сервер? Если опираться на понятие "сервер" как на компонент программного обеспечения, то сервер представляет из себя программу, которая может принимать, обрабатывать и передавать данные, принимаемые от пользователей (клиентов), который к этому серверу подключены. На примере сайта — сайт находится на некотором веб-сервере, к которому вы получаете доступ через браузер. В нашем случае — сервер minecraft генерирует мир, к которому подключаются игроки (клиенты), которые могут ходить, ломать блоки и т.д. За подключение игроков и любые их действия отвечает minecraft сервер.
Очевидно, что сервер должен быть запущен на компьютере (машине). Можно поднять сервер на своём домашнем компьютере, но в таком случае:
- Вы ставите под угрозу безопасность собственного компьютера, открывая на нём порты
- Сервер будет нагружать ваш компьютер, что может мешать работе с ним
- Вы не можете поддерживать домашний компьютер в рабочем состоянии 24/7: иногда вы его выключаете, иногда ваш компьютер теряет подключение к интернету и т.д.
- Для доступа к вашему серверу из внешнего мира придётся обращаться к компьютеру по IP-адресу, который у "домашних" интернет-провайдеров является динамическим, то есть он может изменяться каждые 2-3 дня по причинам, от вас не зависящим.
И как мы решим эти проблемы?
Решением всех перечисленных проблем является использование виртуальной машины со статическим, то есть неизменяемым IP-адресом.
Сложная терминология? Давайте разбираться.
Обратимся к Википедии.
Виртуальная машина (VM, от англ. virtual machine) — программная и/или аппаратная система, эмулирующая аппаратное обеспечение некоторой платформы...
Если объяснять совсем грубым языком — это компьютер в компьютере. На него так же можно поставить операционную систему и работать с ним, как с обычным компьютером.
Где мы её возьмём?
Ответ прост — AWS. Это такая платформа, которая предоставляет много разных облачных сервисов, полезных для всех, кто работает с вебом и не только. Для создания сервера minecraft отлично подойдет один из продуктов AWS — Amazon EC2 — облачная виртуальная машина, которая доступна 24/7. AWS предлагает минимальную виртуальную машину (10GB SSD, 1GB RAM) бесплатно на год, к тому же, даёт возможность привязать бесплатный выделенный (статический) IP-адрес для постоянного доступа к вашей ВМ (виртуальной машине) по одному и тому же адресу.
Создаём и настраиваем ВМ
Перейдите на сайт AWS и зарегестрируйтесь. Затем перейдите в консоль управления.
В консоли среди сервисов найдите EC2 и перейдите к нему.
Важно выбрать дата-центр, проще говоря, место, где находятся сервера amazon. Выбирать следует в зависимости от вашего местоположения, ведь скорость общения в сети интернет разная, и выбирать следует дата-центр, с которым общение из вашего города будет максимально быстрым.
Для выбора дата-центра рекомендую воспользоваться сервисом WonderNetwork, измеряющем скорость передачи пакетов с другими городами.
В моём случае (г.Москва) мне подошёл ирландский дата-центр.
Пришло время создать виртуальную машину. Для этого перейдите на вкладку Launch instance
Начнём конфигурирование ВМ.
1) Выберем образ операционной системы. Для поднятия серверов очень удобен linux, мы будем использовать дистрибутив CentOS7
Следует отметить, что графической среды на вашей виртуальной машине не будет, доступ к машине будет осуществляться через консоль. Она предполагает управление ВМ при помощи команд, а не компьютерной мыши. Не бойтесь этого: это не должно остановить вас уже сейчас или отказаться от идеи поднятия своего minecraft-сервера, так как это "слишком сложно". Работать с машиной через консоль несложно — скоро вы сами в этом убедитесь.
2) Теперь определим техническую конфигурацию ВМ. Для бесплатного использования Amazon предлагает конфигурацию t2.micro, маловато для полноценного большого minecraft сервера, но с друзьями поиграть достаточно.
3) Остальные пункты настроек оставляем по умолчанию., но останавливаемся на вкладке Configure Security groups.
Здесь нам необходимо настроить доступ к портам для сервера minecraft.
Если объяснять простым языком — порт — неотрицательное число, указывающее, кому адресованы входящие данные из внешнего мира. На ВМ может находиться множество разных сервисов и серверов, поэтому все входящие пакеты данных хранят в своём заголовке порт (номер) адресата (сервиса, сервера) внутри ВМ.
Для minecraft серверов де-факто стандартом является использование порта 25565. Добавим правило, указывающее, что доступ к вашей ВМ через этот порт допустим.
Переходим к окну завершения создания ВМ, нажав кнопку Review and Launch
Настройка пары ключей SSH для ВМ
Итак, подключение к машине будет осуществляться по протоколу SSH.
Протокол SSH работает следующим образом: генерируется пара ключей (открытый и закрытый), на ВМ хранится открытый ключ, на компьютере человека, осуществляющего подключение к ВМ (клиента) — закрытый. При подключении ВМ проверяет наличие подходящего закрытого ключа у клиента.
Нажмите кнопку Launch. Перед вами появится следующее окно:
Введите название пары ключей (для вашего удобства) и нажмите Download key pair. У вас должен скачаться .pem файл, содержащий в себе ваш закрытый ключ. Нажмите кнопку Launch instances. Только что вы создали виртуальную машину, на которой будет поднят сервер.
Получаем статический IP
Теперь нам нужно получить и привязать статический IP к нашей ВМ. Для этого меню находим вкладку Elastic IPs и переходим по ней. На вкладке нажимаем кнопку Allocate Elastic IP address и получаем статический IP.
Теперь полученный IP-адрес надо привязать к нашей ВМ. Для этого выберем её из списка и в меню Actions выберем Associate IP address
Далее, привяжем ВМ к нашему IP-адресу
Готово!
Заходим на ВМ
Теперь, когда ВМ настроена и IP-адрес привязан, подключимся к ней и установим наш minecraft сервер.
Для подключения к ВМ по SSH воспользуемся программой PuTTY. Сразу установите PuTTYgen с этой же страницы
После установки PuTTY откройте его. Теперь необходимо настроить подключение.
- Во вкладке Session выберете тип подключения SSH, порт 22. Укажите имя для подключения. Имя хоста для подключения по SSH представляет из себя строку типа:
имя_пользователя@публичный_dns
.
Имя пользователя в AWS для CentOS по умолчанию — centos. Ваш публичный DNS можно посмотреть здесь:
У меня получилась строка centos@ec2-54-246-186-12.eu-west-1.compute.amazonaws.com
- Во вкладке SSH -> Auth укажите ваш закрытый SSH-ключ. Он хранится в файле
.pem
, который мы скачивали ранее. Но PuTTY не умеет работать с файлами.pem
, ему нужен формат.ppk
. Для конвертации воспользуемся PuTTYgen. Инструкция по конвертации с сайта PuTTYgen. Полученный файл.ppk
Сохраним и укажем здесь:
- Соединяемся с ВМ, открыв соединение кнопкой Open.
Поздравляю! Только что мы подключились к консоли вашей ВМ. Осталось поднять на неё наш сервер.
Установка и настройка minecraft сервера
Начнём настройку нашего сервера. Для начала, нужно установить несколько пакетов на нашу ВМ.
sudo yum install -y wget mc iptables iptables-services java screen
Разберёмся, для чего нужен каждый из пакетов.
- wget — утилита для загрузки файлов в linux. С помощью неё мы скачаем файлы сервера.
- mc — консольный текстовый редактор. Отличается простотой и удобством в использовании для неподготовленного пользователя.
- iptables — утилита для управления и настройки firewall'a, с помощью неё мы откроем порт для сервера на нашей ВМ.
- java — на java работает minecraft, поэтому она необходима для работы сервера
- screen — оконный менеджер для linux. Он позволит продублировать нашу консоль для поднятия сервера. Дело в том, что сервер должен быть запущен через консоль, если вы отключитесь от своей ВМ, то процесс сервера будет остановлен. Поэтому мы будем запускать его в отдельном окне консоли.
Теперь настроим firewall.
Межсетевой экран (firewall) — программный или программно-аппаратный элемент компьютерной сети, осуществляющий контроль и фильтрацию проходящего через него сетевого трафика в соответствии с заданными правилами. (Wikipedia)
Объясняя простым языком: представьте себе город-крепость. Его всё время атакуют извне, при этом в городе течёт обычная жизнь. Для доступа в город в стене крепости есть ворота, у которых стоят охранники и проверяют по спискам, можно ли пустить этого человека в крепость. Роль стены и ворот в компьютерных сетях выполняет firewall.
sudo mcedit /etc/sysconfig/iptables
Только что мы создали и файл конфигурации firewall'a. Заполним его стандартными данными конфигурации, включив туда правило для порта 25565, являющегося стандартным портом для сервера minecraft.
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 25565 -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT
-A INPUT -j REJECT --reject-with icmp-host-prohibited
-A FORWARD -j REJECT --reject-with icmp-host-prohibited
COMMIT
Закроем файл нажатием F10, сохранив изменения.
Теперь запустим firewall и включим его в автозагрузку:
sudo systemctl enable iptables
sudo systemctl restart iptables
Файлы сервера будем хранить в отдельной папке, создадим её, перейдём в неё и скачаем файлы сервера. Для этого следует использовать wget
mkdir minecraft
cd minecraft
wget <ссылка_на_jar>
Необходимо найти прямую ссылку на скачивание .jar
файла сервера. Для примера, ссылка на файл сервера версии 1.15.2:
wget https://launcher.mojang.com/v1/objects/bb2b6b1aefcd70dfd1892149ac3a215f6c636b07/server.jar
Просмотрите содержимое папки при помощи команды ls
, убедитесь, что файлы скачаны.
Запустим файл сервера. Сейчас сервер не будет работать: он создаст все необходимые для работы файлы, и поругается на то, что вы не согласились с условиями лицензии EULA. Примем условия, открыв файл eula.txt
sudo mcedit eula.txt
Подтвердите свое согласие, изменив запись на:
eula=true
Откройте файл server.properties
: это файл конфигурации вашего сервера. Подробнее о настройках сервера
В него обязательно нужно внести следующее изменение:
online-mode=false
Остальные настройки — на ваше усмотрение.
Запуск сервера
Пришло время запускать сервер. Как я уже сказал, сервер запускается прямо из консоли, но если мы закроем основную консоль — процесс сервера будет остановлен. Поэтому создадим ещё одну консоль:
screen
В этой консоли запустим сервер:
sudo java -Xms512M -Xmx1024M -jar <название_файла_сервера>.jar --nogui
Сервер запускается около 45 секунд, не прерывайте процесс. Когда сервер будет инициализирован и запущен, вы увидите что-то вроде:
Поздравляю! Только что вы подняли и запустили свой minecraft сервер. Теперь важно правильно выйти из второй консоли, чтобы она продолжила работу с запущенным сервером. Для этого нажмите Ctrl+A
, затем D
. Вы должны оказаться в основной консоли и увидеть сообщение типа [detached from 1551.pts-0.ip-172-31-37-146]
. Если вам потребуется вернуться в консоль, в которой запущен сервер, используйте screen -r
Теперь вы можете отключаться от своей ВМ. Ваш сервер будет доступен по статическому IP-адресу, который мы получали ранее, на порту 25565.
Получается, адрес для входа на сервер будет <ваш_статический_IP>:25565
.
Заключение
По этой инструкции вы сможете поднять бесплатный minecraft сервер с выделенным IP без труда. Статья была написана максимально простым языком и рассчитана на неспециалистов. В связи с этим, интересно услышать комментарии захабренных, ведь при упрощении материала можно допустить фактические ошибки в терминологии.