Edited at

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のサーバ側になっている為、実用的にするにはこちらも対策が必要