のんびり生きる

モノづくり大好きマンがのんびり書こうとしてるブログ

マイクラサーバをGCPにデプロイした備忘録

友達とマイクラをするためにサーバを Google Cloud Platform(GCP)にデプロイ + Discordでbotをつくってサーバ管理をするプログラミングをしたときの流れだけをメモった備忘録です。

いまさらネタなので詳細を書いてないですスイマセン(  o^) 興味が湧いたらググればいっぱい出てきます。

余談

qiita.com

以前、AWSでwebアプリを公開してたのですが 個人的にはGCPのUIのほうがわかりやすくて好きでした

やったことダイジェスト

イクラサーバのデプロイまで

GCP登録

https://cloud.google.com/?hl=ja

こちらから登録 -> プロジェクトを作成してください。

はじめての人は1年$300程度の無料枠があります (私は以前も使ったことがあるので、対象外でした) cloud.google.com

Compute Engineでインスタンス作成

プロジェクトのトップページ -> Compute Engineを選択 -> VMインスタンス で、「インスタンスを作成」を実行

f:id:tyabata:20200122220933p:plain

  • イクラサーバは割とデフォルトのまま運用
  • 自動化スクリプトは後で設定できるので、一旦空白

作成ボタンのちょい上にある↓を押してエクスパンド

f:id:tyabata:20200122221815p:plain

  • ネットワーク -> 静的外部IPを設定(このipでマイクラからアクセス)
  • 管理 -> 可用性ポリシーでプリエンプティブを選択

お金かけたくない という目的で、どうせ毎日ずっとやってるわけではないので プリエンプティブで「起動したら24時間でオフになる」状態にする。 これだけでも、右に表示される予測費用がだいぶ減ります。 (もちろん使えば使うだけ、この設定でも費用はかかります)

VPCネットワークでファイアウォール作成

VPCネットワーク -> ファイアウォール ルールで下記を設定

  • イクラアクセス用のtcp / portを許可
  • sshのデフォルトport 22を拒否 (玄関を隠しましょう)
  • sshのカスタムportを許可 (他のプロトコルが使っていないportであれば)

自衛はしっかりやりましょう

上でファイアウォールをつくるときに設定したターゲット名を、Compute Engineで先程作ったインスタンスの編集画面の ネットワーク タグ に設定しましょう。 これで有効になります。

確認はインスタンス一覧の右の SSH のプルダウンで

  • ブラウザウィンドウで開く -> 開けない
  • ブラウザウィンドウでカスタムポートを開く -> 開ける

ができればOK

イクラのインストール

java8とマイクラのサーバjarファイルをインスタンスに入れる

apt-get install default-jdk
wget https://launcher.mojang.com/v1/objects/4d1826eebac84847c71a77f9349cc22afd0cf0a1/server.jar

apt-get install screen

www.minecraft.net

ブラウザウィンドウでコンソールを開いているとき、歯車ボタン -> ファイルをアップロードでjarファイルをあげることもできます

f:id:tyabata:20200122223414p:plain

導入後にカスタムメタデータで下記を設定( 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まわりは初心者なので色々参考に。

qiita.com

Discordのボット作成

つくったのはこちら GitHub - tyabata/bot-discord-mcmanager: (開発中) マイクラマルチサーバを管理するdiscord用のbot

Discordでやりとりをするワークスペース(サーバ)を作成して botトークンを取得する

discordpy.readthedocs.io トークン取得は、ここらへん参考にしました!

  • discord.py を導入
  • gcpsdkを導入
  • chat botの処理を書く

作った機能は、自分以外でもマイクラサーバを起動/終了できるためのbotちゃんです。

f:id:tyabata:20200122225457p:plain

遊んでいる最中にサーバを終了できちゃう という残念状態ですが、ここらへんは後々改善する方向です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とかもあるので、頑張るかどうかはその時のモチベーションでいいと思います!(身も蓋もない

やりたいこと

  • イクラサーバにアクセスしている人数を取得したい
  • botのstart /stopをもうちょい丁寧に(stopの制限とか)
  • dynmapをいれて、webで見れるようにする