Как стать автором
Обновить

Как я на Колабе в Minecraft играл

Создание Minecraft-сервера на Google Colab



Google Colab – это бесплатный облачный сервис, позволяющий запускать Jupiter Notebook. Обычно его используют для машинного обучения, но в этой статье я буду запускать на нём сервер Minecraft.

Итак, приступим


В первую очередь хотелось бы отметить, что Colab, как и Jupiter Notebook, позволяет исполнять команды Linux, если поставить перед ней восклицательный знак(!).

Первым делом я решил узнать версию Linux:


lsb_release -a

Вывод был таким:


No LSB modules are available.
Distributor ID:	Ubuntu
Description:	Ubuntu 18.04.3 LTS
Release:	18.04
Codename:	bionic

Следующим шагом устанавливаем Java:


!apt-get update && apt-get upgrade
!apt-get install default-jdk

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


Хочу сказать что если Вам нужно использовать команду cd, то необходимо использовать оператор && для последовательного выполнения команд.

Скачивание BuildTools и сборка ядра:


!mkdir build && cd build && wget https://hub.spigotmc.org/jenkins/job/BuildTools/lastSuccessfulBuild/artifact/target/BuildTools.jar && java -jar BuildTools.jar

Output:


...
Success! Everything completed successfully. Copying final .jar files now.
Copying spigot-1.15.2-R0.1-SNAPSHOT.jar to /content/build/./spigot-1.15.2.jar
  - Saved as ./spigot-1.15.2.jar

Копируем ядро в отдельную папку:

!mkdir server && cp build/spigot-1.15.2.jar server/spigot.jar

Запускаем сервер:

!cd server && java -jar spigot.jar

После первого запуска сервер остановится и попросит согласиться с EULA в файле eula.txt, меняем строчку eula=false на eula=true

!cd server/ && sed -i 's/.*eula=false.*/eula=true/' eula.txt

Чтобы на наш сервер можно было зайти, заходим в файл server.properties и меняем в нём строчку online-mode=true на online-mode=false.

!cd server/ && sed -i 's/.*online-mode=true.*/online-mode=false/' server.properties

Получение доступа к серверу из сети:


К сожалению, наша «виртуальная машина» имеет серый IP, в этом мы можем убедиться выполнив команды:

!apt-get install net-tools

!ifconfig

Для решения этой проблемы я решил использовать ngrok


Заходим сюда и регистрируемся dashboard.ngrok.com/status

Скачиваем и распаковываем клиент:

!wget -q -c -nc https://bin.equinox.io/c/4VmDzA7iaHb/ngrok-stable-linux-amd64.zip && unzip -qq -n ngrok-stable-linux-amd64.zip

Переходим в панель управления dashboard.ngrok.com/status и копируем токен

После этого открываем тоннель:

print("Token from https://dashboard.ngrok.com/auth")
import getpass
authtoken = getpass.getpass()
get_ipython().system_raw('./ngrok authtoken $authtoken && ./ngrok tcp 25565 &')

Вводим токен и получаем IP адрес:

!curl -s http://localhost:4040/api/tunnels | python3 -c \
    "import sys, json; print(json.load(sys.stdin)['tunnels'][0]['public_url'])"

Запускаем сервер:

!cd server && java -jar spigot.jar

Ждём, пока сервер не выдаст что запуск сервера завершён:

[12:00:00] [Server thread/INFO]: Done (63.279s)! For help, type "help"

Вводим в клиент Minecraft адрес(без tcp://) и заходим на сервер.

Тестирование


Я тестировал сервер взрывами TNT, что позволило сильно нагрузить сервер.

Сервер начинает лагать при взрыве более 10000 блоков динамита, TPS падает до 10 и ниже, что неудовлетворительно.

Однако для игры с друзьями мощностей Колаба хватит.

P.S.
Хотелось бы отметить, что наши данные исчезнут через 12 часов, поэтому лучше сохранить их заранее или держать данные сервера на примонтированом Google Drive.
Теги:
Хабы:
Данная статья не подлежит комментированию, поскольку её автор ещё не является полноправным участником сообщества. Вы сможете связаться с автором только после того, как он получит приглашение от кого-либо из участников сообщества. До этого момента его username будет скрыт псевдонимом.