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へアクセス
マルチプレイを選択
サーバ追加
サーバ追加画面
サーバ名は分かりやすい名前に設定し、サーバアドレスはchisel clientを起動させたマシンとポートを指定して完了をクリック
追加したサーバへ接続
ワールド画面
動作原理解説
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
- JDKをインストール
- minecraft_donwload_url.txtの値を使ってminecraftのjarファイルを取得
- 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のサーバ側になっている為、実用的にするにはこちらも対策が必要