マイクラサーバをGCPにデプロイした備忘録
友達とマイクラをするためにサーバを Google Cloud Platform(GCP)にデプロイ + Discordでbotをつくってサーバ管理をするプログラミングをしたときの流れだけをメモった備忘録です。
自動回収畑に村人を閉じ込めた…ただの奴隷感あるな pic.twitter.com/KNomqM5aup
— とむお (@_tybt) 2020年1月21日
いまさらネタなので詳細を書いてないですスイマセン( o^) 興味が湧いたらググればいっぱい出てきます。
余談
以前、AWSでwebアプリを公開してたのですが 個人的にはGCPのUIのほうがわかりやすくて好きでした
やったことダイジェスト
- GCP登録
- Compute Engineでインスタンス作成
- VPCネットワークでファイアウォール作成して、インスタンス紐付け
- java8とマイクラのインストール
- pyenvでPython導入
- Discordのボット作成
- GCP無料枠のインスタンスで稼働
マイクラサーバのデプロイまで
GCP登録
https://cloud.google.com/?hl=ja
こちらから登録 -> プロジェクトを作成してください。
はじめての人は1年$300程度の無料枠があります (私は以前も使ったことがあるので、対象外でした) cloud.google.com
Compute Engineでインスタンス作成
プロジェクトのトップページ -> Compute Engineを選択 -> VMインスタンス で、「インスタンスを作成」を実行
作成ボタンのちょい上にある↓を押してエクスパンド
- ネットワーク -> 静的外部IPを設定(このipでマイクラからアクセス)
- 管理 -> 可用性ポリシーでプリエンプティブを選択
お金かけたくない という目的で、どうせ毎日ずっとやってるわけではないので プリエンプティブで「起動したら24時間でオフになる」状態にする。 これだけでも、右に表示される予測費用がだいぶ減ります。 (もちろん使えば使うだけ、この設定でも費用はかかります)
VPCネットワークでファイアウォール作成
VPCネットワーク -> ファイアウォール ルールで下記を設定
自衛はしっかりやりましょう
上でファイアウォールをつくるときに設定したターゲット名を、Compute Engineで先程作ったインスタンスの編集画面の ネットワーク タグ に設定しましょう。 これで有効になります。
- ブラウザウィンドウで開く -> 開けない
- ブラウザウィンドウでカスタムポートを開く -> 開ける
ができればOK
マイクラのインストール
java8とマイクラのサーバjarファイルをインスタンスに入れる
apt-get install default-jdk wget https://launcher.mojang.com/v1/objects/4d1826eebac84847c71a77f9349cc22afd0cf0a1/server.jar apt-get install screen
ブラウザウィンドウでコンソールを開いているとき、歯車ボタン -> ファイルをアップロードでjarファイルをあげることもできます
導入後にカスタムメタデータで下記を設定( optionは適宜変更) screenコマンドでインスタンス起動時にマイクラサーバを立ち上げるだけのscriptです
startup-script
cd /home/<自分のid>/minecraft screen -d -m -S xxxx java -Xms752m -Xmx1G -d64 -jar server.jar nogui
shutdown-script
screen -r -X stuff '/stop\n'
Discord用のbotデプロイ
pyenvでpythonの導入
ローカル開発前提 (後々version切り替えて使うこともあるかもしれないので)で、pyenvをつかってpythonの導入。 (直接python突っ込むかは適宜ご検討ください)
pythonまわりは初心者なので色々参考に。
Discordのボット作成
つくったのはこちら GitHub - tyabata/bot-discord-mcmanager: (開発中) マイクラマルチサーバを管理するdiscord用のbot
Discordでやりとりをするワークスペース(サーバ)を作成して botのトークンを取得する
discordpy.readthedocs.io トークン取得は、ここらへん参考にしました!
作った機能は、自分以外でもマイクラサーバを起動/終了できるためのbotちゃんです。
遊んでいる最中にサーバを終了できちゃう という残念状態ですが、ここらへんは後々改善する方向ですw
余談ですが、ワイのpythonは2で知識が止まっていたのですが、3.5からasync / awaitとか追加されてたりするんですね あとはfをつけてテンプレートリテラルちっくな記述とか
仕事で使う機会ないですが、暇を見つけて色々pythonで遊んでみたくなった今日このごろ
インスタンスを作成
上記のインスタンスを作成する方法と同じ。
- 無料枠で運用したいので マシンタイプは
f1-micro
で設定 - プリエンプティブにはしない(当たり前ですが
あとは起動時にbotが動くように startup-script にこんな感じで設定
cd /home/<自分のid>/bot-discord-mcmanager export DISCORD_CHANNEL_ID=xxxx export DISCORD_TOKEN=xxxxx export PROJECT_ID=xxxxx export INSTANCE_ZONE=xxxx export INSTANCE_NAME=xxxx /home/<自分のid>/.pyenv/shims/python bot.py
設定値は上記gitのREADMEを御覧ください
さいごに
GCPを使う機会をつくるためにマイクラサーバを立ててみましたが、Realmsとかでかんたんにサーバを用意できたりConohaとかもあるので、頑張るかどうかはその時のモチベーションでいいと思います!(身も蓋もない