Google Colab – это бесплатный облачный сервис, позволяющий запускать Jupiter Notebook. Обычно его используют для машинного обучения, но в этой статье я буду запускать на нём сервер Minecraft.
- Как создать сервер Minecraft на Google Colab
- Первым делом я решил узнать версию Linux:
- Вывод был таким:
- Следующим шагом устанавливаем Java:
- После этого мы можем приступить к установке ядра сервера, я выбрал Spigot:
- Скачивание BuildTools и сборка ядра:
- Получение доступа к серверу из сети:
- Для решения этой проблемы я решил использовать ngrok
- Тестирование
Как создать сервер Minecraft на Google Colab
В первую очередь хотелось бы отметить, что Colab, как и Jupiter Notebook, позволяет исполнять команды Linux, если поставить перед ней восклицательный знак(!).
Первым делом я решил узнать версию Linux:
1 |
lsb_release -a |
Вывод был таким:
1 2 3 4 5 |
No LSB modules are available. Distributor ID: Ubuntu Description: Ubuntu 18.04.3 LTS Release: 18.04 Codename: bionic |
Следующим шагом устанавливаем Java:
1 2 3 |
!apt-get update && apt-get upgrade !apt-get install default-jdk |
После этого мы можем приступить к установке ядра сервера, я выбрал Spigot:
Хочу сказать что если Вам нужно использовать команду cd, то необходимо использовать оператор && для последовательного выполнения команд.
Скачивание BuildTools и сборка ядра:
1 |
!mkdir build && cd build && wget https://hub.spigotmc.org/jenkins/job/BuildTools/lastSuccessfulBuild/artifact/target/BuildTools.jar && java -jar BuildTools.jar |
Output:
1 2 3 4 |
... 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 |
Копируем ядро в отдельную папку:
1 |
!mkdir server && cp build/spigot-1.15.2.jar server/spigot.jar |
Запускаем сервер:
1 |
!cd server && java -jar spigot.jar |
После первого запуска сервер остановится и попросит согласиться с EULA в файле eula.txt, меняем строчку eula=false на eula=true
1 |
!cd server/ && sed -i 's/.*eula=false.*/eula=true/' eula.txt |
Чтобы на наш сервер можно было зайти, заходим в файл server.properties и меняем в нём строчку online-mode=true на online-mode=false.
1 |
!cd server/ && sed -i 's/.*online-mode=true.*/online-mode=false/' server.properties |
Получение доступа к серверу из сети:
К сожалению, наша «виртуальная машина» имеет серый IP, в этом мы можем убедиться выполнив команды:
1 2 3 |
!apt-get install net-tools !ifconfig |
Для решения этой проблемы я решил использовать ngrok
Заходим сюда и регистрируемся dashboard.ngrok.com/status
Скачиваем и распаковываем клиент:
1 |
!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 и копируем токен
После этого открываем тоннель:
1 2 3 4 |
print("Token from https://dashboard.ngrok.com/auth") import getpass authtoken = getpass.getpass() get_ipython().system_raw('./ngrok authtoken $authtoken && ./ngrok tcp 25565 &') |
Вводим токен и получаем IP адрес:
1 2 |
!curl -s http://localhost:4040/api/tunnels | python3 -c \ "import sys, json; print(json.load(sys.stdin)['tunnels'][0]['public_url'])" |
Запускаем сервер:
1 |
!cd server && java -jar spigot.jar |
Ждём, пока сервер не выдаст что запуск сервера завершён:
1 |
[12:00:00] [Server thread/INFO]: Done (63.279s)! For help, type "help" |
Вводим в клиент Minecraft адрес(без tcp://) и заходим на сервер.
Тестирование
Я тестировал сервер взрывами TNT, что позволило сильно нагрузить сервер.
Сервер начинает лагать при взрыве более 10000 блоков динамита, TPS падает до 10 и ниже, что неудовлетворительно.
Однако для игры с друзьями мощностей Колаба хватит.
Хотелось бы отметить, что наши данные исчезнут через 12 часов, поэтому лучше сохранить их заранее или держать данные сервера на примонтированом Google Drive.