cloudfoundry
minecraft
buildpack
Bluemix

Cloud Foundry v2上でminecraftを動かしてアクセスする方法を調査(番外編)

More than 3 years have passed since last update.

Cloud Foundry v2上でminecraftを動かしてアクセスする方法を調査(番外編)

Cloud Foundry v2上でminecraftを動かしてアクセスする方法を調査の番外編として

以前Qiitaに投稿した『Cloudn PaaS v2(CloudFoundry)の Service(PostgreSQL & MySQL)に接続』のchiselを応用すれば
ひとまずS3の永続化の課題は残るもののコンテナ上で動くminecraftへのproxyは実現可能なのでは?と推測し実験してみました。

アクセスするまでの手順(minecraftサーバ+proxy側)

Cloud Foundry上のコンテナ内で動かすminecraftアクセスする為に用意したcf-minecraft-chiselをclone

$ git clone https://github.com/morikat/cf-minecraft-chisel
$ cd cf-minecraft-chisel

. サーバ起動に必要なeula.txtを追加する

$ echo 'eula=true' > eula.txt

アプリをcloudfoundryにpushする

$ cf push minecraft-app

chisel clientを起動する

$ ./chisel-bin/chisel_linux_amd64 client -v --keepalive 3s http://hogehoge.mybluemix.net 25565:127.0.0.1:25565

上記の場合
http://hogeohge.bluemix.net 部分は
pushしたアプリのURL

25565:127.0.0.1:25565部分は
chisel clientを動かすマシン上の25565:Cloud Foundry上のアプリからみたminecraft serverのIP:minecraft serverのポート

macやwindows上でchisel clientを動かす場合は

chisel-bin配下にそれぞれのバイナリを格納しているのでそちらを利用する

$ ls chisel-bin/
chisel_darwin_amd64  chisel_linux_amd64  chisel_windows_386.exe

アクセスするまでの手順(minecraftクライアント側)

chisel経由でcloudfoundry上のminecraftへアクセス

マルチプレイを選択

image

サーバ追加

image

サーバ追加画面

image

サーバ名は分かりやすい名前に設定し、サーバアドレスはchisel clientを起動させたマシンとポートを指定して完了をクリック

追加したサーバへ接続

image
サーバに接続をクリックしてサーバに接続を行う

ワールド画面

image

動作原理解説

cf-minecraft-chisel(アプリ自体)

eula.txt(手動で追加するファイル)

minecraftのサーバはeula.txtにeula=trueという値を入れると
EULAに同意したことになる
※それぞれが同意する必要があるので手動で格納という形にしている)

chisel-bin配下

proxy経由でcloud foundryのコンテナ内のアプリにアクセスする為のバイナリが格納されている

manifest.yml

内部で使うminecraft用buildpackのブランチを指定
メモリは512M指定をデフォルト指定で必要に応じて変更を行う

minecraft_download_url.txt

minecraft用のbuildpack側でこの中のURLの値を使ってサーバのjarファイルをダウンロードする

start_minecraft.sh

cloudfoundry上でminecraftサーバを起動する際のコマンド
manifest.ymlのmemoryの値に応じてこちらも変更を行う

heroku-buildpack-oracle-java(buildpack側)

minecraftブランチをminecraft用に変更している
fork元オリジナルのbuidpackはこちら

bin配下

detect

eula.txtがあるかどうかでminecraftのbuildpackを適用するか判断

compile

  1. JDKをインストール
  2. minecraft_donwload_url.txtの値を使ってminecraftのjarファイルを取得
  3. proxy用のchiselをダウンロード

lib配下

utils

compile部分で呼ぶfunction定義などが格納

残課題

s3などに対応させて永続化

heroku-buildpack-minecraftのように
s3cmdを使って60秒間隔でwhileを使ってs3とsyncさせる等の工夫が必要

Cloud Foundry側のコンテナ内で動くminecraft serverのプロセスが死んだ場合のリカバリ

通常Cloud Foundryのアプリケーションであればプロセスが死んだ場合は、自動でインスタンスを起動させる仕組みが存在している

現状のcf-minecraft-chiselの対応だとプロセスの監視対象がchiselのサーバ側になっている為、実用的にするにはこちらも対策が必要