マイクラサーバーをGoogle Colab上で動かす
Google ColabはPythonしか動かせないものだと思っていましたが、Ubuntuが採用されているらしくUbuntuがそのまま動くらしいです。
そこで「もしかしてマイクラのサーバーうごくんじゃね。」と思っていろいろしたら普通に動きました。
最初に言っておくこと
Google Colabは完全無料で動きますが、12時間以上動かし続けることができません。
そして正直、Colabでサーバーを起動してもチャンクの読み込みがそんな早くないです。
工夫すれば軽くなるのかもしれませんが実用性はそんなないです。
スーパーフラットだと軽いのでそちらをメインとして使うんだったら良いかもしれません。
必要なもの
- Google アカウント
- パソコン
- マイクラサーバーを構築できる環境
- マイクラjava版
準備する
マイクラサーバー
事前にマイクラサーバーを構築する
Colab上でマイクラサーバーを構築するのは正直面倒なので事前に構築済みのマイクラサーバーを用意し、それをColab上で動かします。
サーバーの構築は前にしたのでそちらを見てください。
上の記事はChiyogamiサーバーを構築していますが、マイクラサーバーだったらなんでも動きます。(一部除いて)
わかりやすくするためにサーバー本体やserver.propertiesが入っているディレクトリの名前をserverとしておきます。
Google Driveにマイクラサーバーをぶち込む
Google Driveのルート直下にさきほど作ったマイクラサーバーのディレクトリをぶち込んでください。
PC版Google Driveを入れるとファイルの移動がWindowsのエクスプローラーから簡単にできるのでお勧めです。
ngrok
通常、マイクラサーバーを全世界に公開するにはファイアーウォールの設定やポート開放が必要ですが、Colabではそんなことできません。
なので、ngrokというローカルサーバーを全世界に公開できるめちゃ便利なツールがあるのでこれを使います。
他にもCloudflare tunnelという類似サービスもあるようですが、使い方がよく分からなかったので今回はおとなしくngrokを使います。
ログインとトークンのメモ
ngrokの公式サイトに行くと、真ん中に大きくsign up for freeとあるのでそれをクリックします。
アカウントがない人はアカウントを作りましょう。Googleアカウントでもサインアップできます。
ログインするとこんな画面になります。
ページの真ん中にあるトークンをメモしましょう。(ngrok config add-authtokenより後の部分がトークンです)
この部分は人それぞれ違います。人に教えないようにしましょう。
Colab
Colabを起動するといろいろ出てくるので右下らへんにあるノートブックを新規作成をクリックしてください。
そこにコードを打ち込んでいきます。
Google Driveとのリンク
Colabは最初からGoogle Driveにアクセスできるわけではなく、リンクさせるコードをかかなければなりません。難しそうに聞こえますが2行コピペするだけです。
from google.colab import drive
drive.mount('/content/drive')
これを入力して実行するとGoogleのログイン画面が出てくるのでログインします。
そうするとColab上でGoogle Driveにアクセスできるようになります。
OpenJDKのインストール
マイクラサーバーを実行するにはバージョン17以上のJDKが必要です。
ColabにもJDKはインストールされていますが、インストールされているOpenJDKのバージョンが11と古いので新しくインストールします。
!sudo apt-get install openjdk-17-jdk
これを入力して実行するとOpenJDK 17がインストールできます。
ngrokの導入
ngrokを導入するには以下のコマンドを入力します。
これを入力するとngrokがzipファイルとしてダウンロードされ、ダウンロードしたzipファイルが展開されます。
!wget -q -c -nc https://bin.equinox.io/c/4VmDzA7iaHb/ngrok-stable-linux-amd64.zip
!unzip -qq -n ngrok-stable-linux-amd64.zip
次にさっき取得したトークンを登録します。
!./ngrok authtoken さっきコピーしたトークン
実行してみて
Authtoken saved to configuration file: /root/.ngrok2/ngrok.yml
とログに表示されれば成功です。
起動する
マイクラサーバーを起動する前にngrokを起動する必要があります。
!pkill -f ngrok
get_ipython().system_raw('./ngrok tcp 25565 --region jp &')
!sleep 2
import urllib.request, json
with urllib.request.urlopen('http://localhost:4040/api/tunnels') as response:
data = json.loads(response.read().decode())
(host, port) = data['tunnels'][0]['public_url'][6:].split(':')
print(f"""サーバーアドレス
{host}:{port}
""")
これを入力するとログに0.tcp.jp.ngrok.io:XXXXXと表示されます。
これをマイクラに入力するサーバーアドレスです。
まだサーバーが起動できていないので接続はできません。
最後にマイクラのサーバーを起動します。