LoginSignup
6
2

More than 1 year has passed since last update.

Hacobuneでマイクラサーバを(無理矢理)起動してみた

Last updated at Posted at 2021-08-19

Hacobuneで遊んでみましたのでメモを残しておきます。

この記事の概要

  • Hacobuneはインターネット経由でのアプリケーションへのアクセスにはhttpsのみ対応
  • マイクラみたいなサービスはそのままだと接続できない
  • httpsはOKなので、WebSocketでトンネルすればいけるかな? -> 出来た

おことわり

この記事はいわゆる「試してみた」系です。認証など適当に扱ってますのであくまで参考程度と思っていただければ。

マインクラフトサーバを起動してみる(ダメなパターン)

まずはマイクラサーバを起動してみます。
後述しますがこの手順だけだとクライアントから接続できません。

Dockerイメージはitzg/minecraft-serverを利用します。

ということで早速Hacobuneの操作をしてみます。

コントロールパネル

適当にプロジェクトを作り、アプリケーションの新規作成をしてみます。

イメージ

イメージには先程のitzg/minecraft-serverを指定し、ポートはマイクラサーバのデフォルト25565を指定します。

image.png

環境変数

環境変数にはEULA=TRUEを指定します。

image.png

起動引数と設定ファイルの欄は空でいいです。

外部公開

外部公開を有効にし、適当なドメインを設定します。

image.png

ちゃんと調べていませんが全ユーザー通じて一意じゃないといけないっぽい..??
↑の画像みたいに枠が赤くなってたらダメっぽいですね。

永続化

itzg/minecraft-server/dataにデータを格納するようなのでボリュームを割り当てておきます。
まずボリュームを新規作成します。
image.png

その後/dataにマウントします。

image.png

あとは保存を押して起動を待つだけです。

しばらく待つとURLが表示されるはずです。
スクリーンショット 2021-08-19 16.07.40.png

このURLを控えてクライアントから接続してみます。
ここではminecraft.c1.hacobuneapp.comですね。

クライアントからつなぐ(ダメなパターン)

マインクラフトを起動し、「マルチプレイ」を選択、サーバに接続してみます。
(後で気づきましたがクライアントのバージョンが古いですね。。。)

先程控えた*.c1.hacobuneapp.comにポート番号443をつけてみます。

image.png

さてこれでつながるはず、、、

が、こんなエラーです。

image.png

Hacobuneアプリケーションへのインターネットからの接続はHTTPSのみ対応

あれ?Hacobuneの外部接続ってどうつながるんだっけ?と思いマニュアルを確認したらちゃんとhttpsのみ対応と書いてありました…

スクリーンショット 2021-08-19 16.17.41.png

マイクラみたいに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

image.png

起動引数で指定している--mapは、どのパスにリクエストが来たらどこにトンネルするというマッピング情報です。
これは以下のように作成します。

image.png

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にします。

これで繋がりますね!!!

image.png

軽く遊んでみましたが十分遊べそうな感じでした。

終わりに

多分にカッとなってやった感ありますが、無理矢理マイクラサーバを起動し遊ぶことができました。

Hacobuneは

オープンβ版提供期間中は無料でご利用いただけます

とのことなのでもうちょっと遊んでみようかと思ってます。

以上です。

6
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
2