Skip to content

Repository files navigation

Minecraft Education Edition Dedicated Server - Docker

1台のサーバーで、複数グループ分のMinecraft Educationワールドを同時運用するためのDocker構成です。

前提: 公式ドキュメントに記載のサーバー構築手順(デバイスコード認証・管理ツールによる有効化など)を理解していることを前提としています。


セットアップ

1. 環境設定

cp .env.example .env

.env を編集して最低限以下を設定します。

SERVER_PUBLIC_IP_LAN=192.168.1.100   # LAN 内からの接続先IP(必須)
# SERVER_PUBLIC_IP_WAN=example.com   # LAN 外から接続させる場合のみ設定

LAN 内用と LAN 外用のアドレスを両方定義しておき、ワールドごとに SERVER_NETWORK_WORLD_N=wan のように指定すれば、どちらの接続先を広告するかをワールド単位で切り替えられます(未指定なら SERVER_NETWORK_COMMON、それも無ければ lan)。

その他の設定は _COMMON 項目で全ワールドのデフォルト値を一括設定できます。個別ワールドで上書きしたい場合は _WORLD_1 のように指定します。

優先順位: 個別設定(_WORLD_N)> 共通設定(_COMMON)> デフォルト値

2. ワールドを追加

make add PORT=19132   # ワールド1
make add PORT=19134   # ワールド2(複数運用する場合)

ワールド番号は自動採番されます。ポート番号は .env にも自動追記されます。

ポート番号の注意:

  • 公式はセキュリティ上、既定ポート(19132)を避けることを推奨しています。
  • 同一ホスト上のワールドには必ず別々のポートを割り当ててください。同じポートで2つ起動すると、参加者側に「無効なテナントID(Invalid Tenant ID)」エラーが出ます。

3. 起動

make up

サーバーバイナリは起動時に自動でダウンロードされます。server/bedrock_server_edu に手動配置するとダウンロードをスキップします。

4. デバイスコード認証

初回起動時にログ(logs/world{N}/)にデバイスコードとURLが出力されます。ブラウザでそのURLを開き、テナントのグローバル管理者アカウントでサインインしてください。

テナント設定で「Allow Teachers to Manage Servers」が有効な場合は、教員(Faculty)アカウントでもサーバーの作成・認証ができます。ただしテナント側の Dedicated Server 有効化そのものは、グローバル管理者しか行えません。

サインイン後に sessions/world{N}/edu_server_session.json が生成され、以降は自動更新されます。

5. サーバーを有効化

Dedicated Server Admin Portal でサーバーの Enabled をオンにしてください(オフのままでは誰も参加できません)。

Broadcast は任意です。

  • オン: テナント内の全ユーザーのサーバー一覧に自動表示されます(ユーザー側から一覧を削除することはできません)。
  • オフ: ユーザーがクライアントの「サーバーを追加」から、12桁の英数字(大文字小文字の区別なし)のサーバーIDを手入力して参加します。

Makefile コマンド一覧

Windows の場合: Docker Desktop は WSL2 上で動作するため、WSL2 のターミナル(Ubuntu 等)で実行してください。

permission denied / make: command not found になる場合(NAS 等): Docker デーモンへの接続に root 権限が必要で、かつ make が sudo の PATH に含まれていない環境では、以下のように現在の PATH を引き継いで実行してください。

sudo env "PATH=$PATH" make up
# 本番運用
make up NOTIFY=true BACKUP=true    # 全ワールド + 通知 + 自動バックアップ

# 起動オプション
make up                            # 全ワールドのみ起動
make up WORLDS="1 2"              # 指定ワールドのみ起動
make up NOTIFY=true               # 通知スタックも一緒に起動
make up BACKUP=true               # バックアップサービスも一緒に起動

# その他
make build                        # イメージを再ビルド
make down                         # 全ワールドを停止
make restart                      # 全ワールドを再起動
make logs N=1                     # ワールド1 のログを表示
make ps                           # 全コンテナの状態を表示
make backup                       # 今すぐ手動バックアップ
make add PORT=19134               # 新しいワールドを追加

設定ファイルを更新したときは再ビルドが必要: property-definitions.json / entrypoint.sh / Dockerfile はビルド時にイメージへ COPY されるため、これらの変更(新バージョン対応の取り込みなど)を反映するにはイメージの再ビルドが必要です。

make build   # イメージを再ビルド
make down
make up

なお Minecraft サーバーバイナリ自体は起動時に自動更新されるため、バイナリのバージョンアップだけであれば再ビルドは不要です(再ビルドが必要なのは上記リポジトリ側ファイルを変更した場合)。


ディレクトリ構成

プロジェクト構成(Git 管理対象)

Makefile                              # ワールドの起動・追加コマンド
docker-compose.world{N}.yml.example   # ワールド定義テンプレート(make add が使用)
docker-compose.notify.yml             # 通知スタック(Vector + Apprise)
docker-compose.backup.yml             # 自動バックアップ(make up BACKUP=true)
Dockerfile / entrypoint.sh            # コンテナ定義
property-definitions.json             # 環境変数 → server.properties のマッピング定義
.env.example                          # 環境変数テンプレート
vector/vector.toml.example            # Vector 設定テンプレート
apprise/minecraft.yml.example         # 通知先設定テンプレート

実行時データ(Git 管理外)

docker-compose.world1.yml             # make add で生成
docker-compose.world2.yml             # make add で生成
.env                                  # .env.example からコピー

worlds/world{N}/                      # ワールドデータ
├── worlds/{LEVEL_NAME}/              # ゲームワールドデータ
├── behavior_packs/                   # ビヘイビアパック
├── resource_packs/                   # リソースパック
├── allowlist.json
├── permissions.json
└── packetlimitconfig.json

sessions/world{N}/                    # Entra 認証セッション(自動更新。失効時は再度デバイスコード認証)
logs/world{N}/                        # サーバーログ
chat_logs/world{N}/                   # チャットログ(CHAT_LOGGING_ENABLED=true のとき出力)
server/                               # サーバーバイナリ手動配置用(省略可)

通知(Vector + Apprise)

プレイヤーの参加/退出・チャット・サーバーイベントを ntfy や LINE 等に通知できます。

cp vector/vector.toml.example vector/vector.toml
# vector.toml を編集して ntfy トピック等を設定

cp apprise/minecraft.yml.example apprise/minecraft.yml
# minecraft.yml を編集して通知先 URL を設定(LINE 等)

make up NOTIFY=true

ChatLog ファイル(chat_logs/world{N}/)を監視し、[日時] - で始まる行をすべて通知します。

前提: ChatLog ファイルはサーバー本体の機能(chat-logging-enabled、1.21.133 以降)で出力されます。.envCHAT_LOGGING_ENABLED_COMMON=true(既定値)が必要です。この設定はあとから変更できますが、反映にはサーバーの再起動が必要です。


参考資料


ライセンス

リポジトリのコード: PolyForm Noncommercial 1.0.0(非商用利用のみ許可)

Minecraft Education Edition サーバーバイナリの利用は Microsoft の利用規約に従います。

About

Minecraft Education Edition専用サーバー - Docker

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages