WSL2にMinecraftサーバーを導入してみる
概要
先日導入したWSL2にMinecraftサーバーを導入してLAN上で共有できるワールドを利用できるようにする。
Dockerに有志?が開発しているMinecraftイメージが存在するので、それを利用してお手軽に導入出来ることを確認する。
また特に別のコンテナと共存する予定はないのだが、docker-composeを利用している。
今回はJavaEditionのサーバーを構築している。
前提となる環境
- OSがWindows
- Minecraftのゲーム本体を導入済みであること
- ルーターの設定などで自分のマシンのプライベートIPアドレスを固定できること
- WSL2を導入済みであること 参考:WSL2導入
- WSL2を利用したDockerを導入済みであること 参考:WindowsでDockerを使いたい
導入手順
WSL2のCLIを起動
コマンドプロンプトやPowerShellでwslコマンドを利用してもいいし、WSLのディストリビューションについてるターミナルを使ってもよい。
私はインストールしたUbuntuに付属していたターミナルを利用した。
docker-compose.ymlの作成
docker-compose.yml に諸々の設定を書いていく。
とりあえず今回の作業用ディレクトリを切る
$ # ~/minecraft で作業を管理することにした。 $ cd $ mkdir minecraft $ cd minecraft
次に、docker-compose.ymlを作成する。
$ pwd $ # /home/(user_name)/minecraft $ vim docker-compose.yml
version: '3' services: minecraft-server: container_name: minecraft image: itzg/minecraft-server ports: - "25565:25565" tty: true stdin_open: true restart: always volumes: - ./mods:/data/mods/ - ./data:/data/ environment: EULA: "TRUE"
こんな感じにしてみた。
構築してから気づいたのだが、デフォルトでサバイバルモード、難易度はイージーでサーバーが起動する。
docker-compose.ymlを用いて環境変数の設定を追加することで、サーバーが初めて起動した時の難易度などの設定を変えられるようだ。リビルドした場合も適用されるのだろうか?
起動中のサーバー設定を変えるには、コンテナ内のdata/server.propertiesを書き換えて再起動すればいいとのこと。
また嬉しいことに新しいバージョンのMinecraftサーバーがあった場合、サーバーをリビルドするだけでバージョンアップしてくれるようだ。もちろんバージョンを指定することも出来る。
さらにJEだけではなく統合版用のサーバーも作れるらしい。
docker-compose 起動
以下のコマンドでdocker-composeの起動
$ pwd $ # /home/(user_name)/minecraft $ docker-compose up -d
Minecraftでサーバーに接続してみる
WSL2が起動しているマシン上でMinecraftを起動し、マルチプレイのサーバー追加をする。
サーバーアドレスは"localhost"指定にする。
ワールドに入ることが出来れば完了!
LAN上で共有してみる
ここからは若干のネットワーク知識を有する。
分からない、という場合は各自調べてみて欲しい。
IPアドレスの固定
家庭のルーターに接続されているマシンの場合、何も設定していなければ大抵接続のたびに割り当てられるプライベートIPアドレスが変わる。
PCの再起動のたびにアドレスが変わり、他の利用者から「接続出来ません!」と声が上がることだろう。
これを防ぐべくプライベートIPアドレスを固定する。
固定のやり方なのだが、ルーターによって違うため詳細は自分のルーターの説明書を確認して欲しい。
Windowsの設定でIPアドレスを手動設定にすることも出来るのだが、ルーターの設定次第で良からぬ事故が起こる可能性があるのでオススメしない。
私の利用しているASUSのルーターの場合、ルーター設定用Webページ上でLAN設定のDHCPサーバーの項目、DHCP固定割当IPアドレスを設定することでIPアドレスを固定することが出来た。
今割り当てられているIPアドレスを確認したければ、コマンドプロンプトのipconfigコマンドなどを利用すればよい。このあたりは各自調べてみて欲しい。
ファイアウォールの設定
そのままではIPアドレスが正しくてもファイアウォールに阻まれて他のマシンからアクセスできないので、ファイアウォールに受信規則を追加する。
WSL2上のdocker指定でファイアウォールの受信規則を設定できればよかったのだが、方法が不明だったためポート指定で受信規則設定をした。
Windowsのコントロールパネルから"システムとセキュリティ" -> "Windows Defender ファイアウォール"を選択し、詳細設定を選択する。
開いた設定画面で"受信の規則"を選択し"新しい規則"をクリック、以下の設定で規制を追加する。
- 規制の種類
- ポート
- プロトコルおよびポート
- TCP
- 指定のローカルポート
- 先程docker-compose.ymlで指定したポート番号(今回は25565)
- 操作
- 接続を許可する
- プロファイル
- プライベートのみ
- 名前
- 今回は"Minecraft_server"とした
受信の規則で表示されるリストの中に設定したものが追加されていれば完了。
LAN上の他のマシンから接続してみる
同じLANに接続されているマシンのMinecraft(JavaEdition)を起動し、先程と同様にマルチプレイのサーバー追加をする。
今回サーバーアドレスを「IPアドレスの固定」で指定したIPアドレスに設定する。
ワールドに接続できれば完了!
感想
Minecraft自体の機能でLANに公開してもMinecraft起動中しか接続できないが、こちらの方法の場合サーバーを入れたマシンが起動中であればいつでも接続できるので家族用のサーバーを作ったりするときは大変便利。
またVPSなどの公開サーバーにも同じようにDockerで簡単に導入できるのも素晴らしい。
皆さん快適なマイクラライフを!
参考
docker-minecraft-serverイメージのGitHubページ
https://github.com/itzg/docker-minecraft-server/blob/master/README.md