Hacobuneで遊んでみましたのでメモを残しておきます。
この記事の概要
- Hacobuneはインターネット経由でのアプリケーションへのアクセスにはhttpsのみ対応
- マイクラみたいなサービスはそのままだと接続できない
- httpsはOKなので、WebSocketでトンネルすればいけるかな? -> 出来た
おことわり
この記事はいわゆる「試してみた」系です。認証など適当に扱ってますのであくまで参考程度と思っていただければ。
マインクラフトサーバを起動してみる(ダメなパターン)
まずはマイクラサーバを起動してみます。
後述しますがこの手順だけだとクライアントから接続できません。
Dockerイメージはitzg/minecraft-server
を利用します。
ということで早速Hacobuneの操作をしてみます。
コントロールパネル
適当にプロジェクトを作り、アプリケーションの新規作成をしてみます。
イメージ
イメージには先程のitzg/minecraft-server
を指定し、ポートはマイクラサーバのデフォルト25565
を指定します。
環境変数
環境変数にはEULA=TRUE
を指定します。
起動引数と設定ファイルの欄は空でいいです。
外部公開
外部公開を有効にし、適当なドメインを設定します。
ちゃんと調べていませんが全ユーザー通じて一意じゃないといけないっぽい..??
↑の画像みたいに枠が赤くなってたらダメっぽいですね。
永続化
itzg/minecraft-server
は/data
にデータを格納するようなのでボリュームを割り当てておきます。
まずボリュームを新規作成します。
その後/data
にマウントします。
あとは保存を押して起動を待つだけです。
このURLを控えてクライアントから接続してみます。
ここではminecraft.c1.hacobuneapp.com
ですね。
クライアントからつなぐ(ダメなパターン)
マインクラフトを起動し、「マルチプレイ」を選択、サーバに接続してみます。
(後で気づきましたがクライアントのバージョンが古いですね。。。)
先程控えた*.c1.hacobuneapp.com
にポート番号443
をつけてみます。
さてこれでつながるはず、、、
が、こんなエラーです。
Hacobuneアプリケーションへのインターネットからの接続はHTTPSのみ対応
あれ?Hacobuneの外部接続ってどうつながるんだっけ?と思いマニュアルを確認したらちゃんとhttpsのみ対応と書いてありました…
マイクラみたいにHTTPSじゃないサービスを公開するのはできないってことですね。。。
よろしい、ならばWebSocketだ
HTTPSがつながるってことはWebSocketはOKということですよね、ということでマイクラサーバへの接続をWebSocketでトンネルする方法を試してみることにしました。
マインクラフトサーバを起動してみる(WebSocket版)
TCP接続をWebSocketでトンネルしてくれるようなやつがいればいいですね。
ちょっと探したらこんなのが見つかりました。
これを使って、クライアント側とサーバ側でそれぞれwsgate
を起動してマイクラのTCP接続をトンネルしてあげればよさそうです。
Hacobuneのマニュアルによると、
同じプロジェクト配下に作成されたアプリケーション同士は設定したホスト名で通信することができます
とのことなので、Hacobune上では
- WebSocketサーバ
- マイクラサーバ
の2つのアプリケーションを起動し、WebSocketサーバの方を外部公開してHTTPS経由でアクセスさせるようにします。
クライアント側はマイクラと同じマシンでwsgate
を起動すればよさそうです。
ということでまずはHacobune側を設定します。
マインクラフトサーバの設定変更
先程起動したマインクラフトサーバを編集し、外部公開を無効にします。
後ほどwsgate-serverで必要になるためアプリケーション名は控えておきます。
wsgate-serverの起動
次にwsgate-serverを起動します。
Dockerイメージがなさそうなため、↓のようなDockerfileを用意しました。
FROM ubuntu
MAINTAINER Kazumichi Yamamoto <yamamoto-febc@gmail.com>
RUN apt-get update; \
apt-get install -y ca-certificates curl zip; \
apt-get clean; \
curl -LO https://github.com/kazeburo/wsgate-server/releases/download/v0.4.0/wsgate-server_linux_amd64.zip; \
unzip -j wsgate-server_linux_amd64.zip wsgate-server; \
rm wsgate-server_linux_amd64.zip; \
mv wsgate-server /usr/local/bin/
ENTRYPOINT ["/usr/local/bin/wsgate-server"]
自分でビルドしてDockerHubにpushするなりリポジトリを用意するなりします。
次にHacobune上でアプリケーションを起動します。
設定は以下のような感じです。
- ポート:
8086
- 起動引数:
--map /map.txt --listen 0.0.0.0:8086
- 設定ファイル:
/map.txt
起動引数で指定している--map
は、どのパスにリクエストが来たらどこにトンネルするというマッピング情報です。
これは以下のように作成します。
minecraft
というパスにリクエストが来たらminecraft-server
という名前のアプリケーションの25565ポートへというものですね。
この設定だと最終的にhttps://<Hacobuneが割り当てたURL>/proxy/minecraft
というパスになります。
あとは忘れずに外部公開を有効にしてURLを控えておきます。
クライアントからつなぐ(WebSocket版)
クライアント側ではwssgate-client
を起動しておき、マインクラフトからはそちらにつなぐことでWebSocketでトンネリングしてHacobune上のサーバに接続します。
まずwssgate-clientを起動します。
サーバ側と同じくマッピングファイルが必要なので以下のように作成します。
0.0.0.0:25565,https://<Hacobuneが割り当てたURL>/proxy/minecraft
そして起動します。
$ wsgate-client --map map-client.txt
次にマインクラフト側です。
今度はサーバの接続先をwsgate-client
にするためlocalhost
にします。
これで繋がりますね!!!
軽く遊んでみましたが十分遊べそうな感じでした。
終わりに
多分にカッとなってやった感ありますが、無理矢理マイクラサーバを起動し遊ぶことができました。
Hacobuneは
オープンβ版提供期間中は無料でご利用いただけます
とのことなのでもうちょっと遊んでみようかと思ってます。
以上です。