MinecraftマルチサーバーをGCPに上でケチケチ運用する
この記事は Minecraft Advent Calendar 2017 - 10日目の記事です。
Minecraftのmoddingやプラグイン作成・・とはあまり関係ないですが、 マルチサーバー環境を構築に関する記事です。
MinecraftマルチサーバーをGCP上に立ててサーバーup, downをslack commandから実行できる環境を整える
GCPにマイクラマルチサーバーを立てる
以前に書いた自分のブログ記事。 日付を見る限り1年以上前だったことに驚愕・・
GCP公式に載っているマイクラマルチサーバーの立て方をなぞった程度のもの
この続きを書く。
以下の前提 : インスタンスにminecraftサーバーが起動するところまで終わっていること。
サーバー代をケチるために気軽に up
down
させたい
このインスタンス、社内メンバー向けのマイクラサーバーなので別に常時起動させておく必要もない。。
そして全員同じslack上にいるので、好きに up, downさせる状態にしておけばサーバー代が節約できるのでは・・と思い以下の目標を立てる。
目指すこと
- slack commandで
/minecraft up
したらGAE instanceが起動- instance起動時にマイクラサーバーの java も起動
- slack commandで
/minecraft down
したらマルチサーバーが停止 - 停止→起動するとIPが変わってしまうので、
/minecraft /status
したらサーバーのIPアドレスを返す
構成図
STEP 1 : instance起動時にマイクラサーバーの java も起動
disk mount (必要に応じて)
セットアップ時に別ディスクにインストールしたりとかしたので、マウントする
特に分けてなければ不要。
mountしたいディスクを調べる
gcloudにsshログイン後
> ls -al /dev/disk/by-id/
ディスク名が以下のような感じを例に
/dev/disk/by-id/scsi-0Google_PersistentDisk_persistent-disk-1
server 起動時にディスクをマウント
mount -o discard,defaults {disc_name} {mount_destination}
マウントするコマンドを /etc/rc.local
に記述
記載例 :
mount -o discard,defaults /dev/disk/by-id/scsi-0Google_PersistentDisk_persistent-disk-1 /mnt/disks/minecraft
server起動後にマイクラサーバーも起動できるようにする
minecraft serverをスクリプト起動できるようにしておく
java -Xms1024M -Xmx1024M -d64 -jar minecraft_server.jar nogui
shell起動で chmod +x
実行できるようにしておく
server起動後に crontab
で shellを実行
> crontab -e
cron設定をeditor編集
起動時にログを記載できるように以下のような感じにしておくと Good
@reboot /path/to/script/start_minecraft.sh >> /tmp/start_mc_server.log 2>> /tmp/start_mc_server_error.log
ここまで出来たら、google cloud consoleから、instance 停止・起動してみて、無事サーバー起動していることを確認する。
STEP 2 : slack commandに応答するスクリプトをGAEに置く
google cloud consoleにログインできなくても、slackからgce instanceが起動できるようにする。 slack commandから叩けるapiを準備する。 GAE(Google App Engine)でGoの組み合わせがおすすめ。(無料枠でいけるので)
基本手順はこちらが良い感じ
実際のGoスクリプトはこんな感じ
以下は自分の環境に合わせて適時修正
※ YOUR_SLACK_TOKEN は次のステップで登録する slack slash command のもの
ディレクトリ構成
+ app.yaml + minecraft/ `-- ip.go
gcp instance up, down, check status by GAE
(なぜかgistのインデントスペースがズレる・・)
deploy
SDKの設定など諸々 gcloud 関連のコマンドを作業マシンで使えるようにしておく
Deploying a Go App | App Engine standard environment for Go | Google Cloud Platform
$ gcloud app deploy
デプロイ出来たら以下でアクセス、レスポンスが返ってくることを確認する
gcloud app browse
GETリクエストを受けた時に
{ "message": "OK" }
のようにjsonを返すようになっているので、ブラウザが立ち上がって、 message が表示されたらデプロイはOK。
この時のブラウザURLに次の slack slash command からPOSTリクエストを送る
STEP 3 : Slack slash commandの登録
STEP 4 : Let's multi play :)
コマンド呼び出してみる
ここまで書いておいてアレですが、結局遊び終わってすぐに down
させてることは稀で、ほぼ常時起動に近い状態なんですよね・・
というのも、夏休みに会社メンバーの家族たち(小学生)が遊びに来たりしていたので、いちいち父・母・叔父・叔母に「マイクラやらせて〜」だの、 再起動でIP変わって「なんかマイクラできないんだけど?」などをくるのも面倒だしな・・というわけで、結局常時起動。。
ただ、時々javaのプロセスだけ落ちてたりするので、繋がらないな〜となった時に手軽にサーバーを up, down できるのはかなり便利♪
私の個人アカに立てるサーバーなのでみんなで投げ銭してサーバー代をカンパしようかとか言ってたのですが、 みんなで使ってるならいいよと会社から補助が出るようになったので、そんなに気にせず起動しっぱなしになっているともいう。。
最後に弊社マイクラ村の様子をチラリと・・
第一期村
マイクラプレイスキルヘボヘボの私が建て・・てる途中で割れ窓が放置されているキャビン (綺麗に写真撮ってくれた人がいたので、ちょっとかっこよく見える)
なんでもすぐに自動化する・建築もできる匠の建てたホテル
一人でマイクラをプレイした時には何が何やら・・?で途方にくれたと言ってた人が建てた城(写真は建築中の時。最終的には屋根までしっかり完成した)
マルチだといろいろみんなが教えてくれるので捗るらしい(にしてもデカイ・・)
石の一級建築士が建てた数々の建造物の写真が見当たらなかったのが残念・・
第二期村
私の都合で第一期村のデータを脇によけ(理由忘れたけどインスタンス新しく作り直した)まっさらにした土地にも更に開拓の手が。。
自動化の匠の真骨頂・自動さとうきび回収タワー 村人は一生さとうきびには困らない・・・
弊社マイクラサーバーにて、初めてマイクラと出会ったはずのデザイナさんの建築した家
最近マイクラデビューしたとはとても信じられない・・
やはりデザイナ職とマイクラは非常に相性が良いのだな。。
第二期村のマップ(最近マイクラデビューしたはずのデザイナさん作) きっちりした性格が出ている。。
最後に軽く宣伝
弊社では 一緒にマイクラを遊んでくれる じゃなかった・・一緒に開発に取り組む仲間を募集しています!
全員がリモートワークの会社です。
ゲーム好きが多いので、こんな感じでoffを楽しんだりもしています〜
もちろんゲーム特に興味ないよ?って人もいます。
多様な生き方・価値観を尊重する文化を大切にする集団です。
デザイナ募集
エンジニア募集