こんにちは。

先日Docker Compose を使ってBungeeCordとMinecraftサーバー(Paper)を構築することがあったのでその手順を書きました。

この記事を見ている人はBungeeCord, Paper, Docker については知っていると思うので説明は割愛します。

この記事のまとめ

DockerでBungeeCordを構築する際は、serverの登録に少しだけ注意が必要です。

通常であれば、BungeeCordのserverの設定は以下のようにやるかと思います。

1
2
3
4
5
6
# BungeeCord/config.yml
# 途中省略
servers:
  main:
    address: 192.168.10.100:25567 # サーバーのマシンのIPとポートを指定
    restricted: false

しかし、同一のdocker-compose.ymlで起動した場合は以下のように記述します。

address部分をコンテナ外部のポートは利用せず、docker-compose.yml で定義したMinecraftサーバーのサービス名とそのコンテナ内部のポートをそのまま指定します。

1
2
3
4
5
6
# BungeeCord/config.yml
# 途中省略
servers:
  main:
    address: server:25565 # サービス名とコンテナの内部ポートを指定する
    restricted: false

ディレクトリ構成

パス 内容
./data Minecraftサーバーのデータをバインド
./backups サーバーデータのバックアップを格納
./proxy BungeeCord のデータをバインド

docker-compose.yml を書く

早速docker-compose.ymlを書きます。

各種サーバーの細かい設定は省きました。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
# docker-compose.yml
version: '3'

services:
  # BungeeCord
  proxy:
    image: itzg/bungeecord
    ports:
      - 54621:25577/tcp
    tty: true
    stdin_open: true
    restart: always
    # データ永続化
    volumes:
      - ./proxy:/server
    environment:
      TYPE: "BUNGEECORD"
      MEMORY: "512M"

  # Paper
  server:
    image: itzg/minecraft-server
    ports:
      - 22233:25565/tcp
    environment:
      EULA: "TRUE"
      TYPE: "PAPER"
      VERSION: 1.19.2
      TZ: Asia/Tokyo
      MEMORY: 6G # メモリ設定は各自変更
      ONLINE_MODE: "false" # BungeeCordを使うのでfalseにしています
      MAX_TICK_TIME: -1
    tty: true
    stdin_open: true
    # データの永続化
    volumes:
      - type: bind
        source: ./data
        target: /data
    restart: always

  # バックアップ
  backup:
    image: itzg/mc-backup
    environment:
      - TZ=Asia/Tokyo
      - INITIAL_DELAY=2m
      - BACKUP_INTERVAL=4h
      - PRUNE_BACKUPS_DAYS=3
    volumes:
      - type: bind
        source: ./backups/
        target: /backups
      - type: bind
        source: ./data
        target: /data
        read_only: true
    network_mode: "service:server"

Paper の設定をする

BungeeCordの管理下におくサーバーは、特別な設定が必要です。

今回はMinecraftサーバーのデータは./dataに格納しているため、そこにあるspigot.ymlを編集します。

spigot.ymlにあるbungeecordという項目をfalseからtrueに変更してください。

1
2
3
4
# ./data/spigot.yml
settings:
  # 途中省略
  bungeecord: true # falseからtrueへ

BungeeCord の設定をする

Minecraftサーバーを適切に動作させるためにはBungeeCord側も設定が必要です。

今回はBungeeCordデータを./proxyにバインドしているため、./proxy/config.ymlを編集します。

この二か所の変更は絶対に行ってください

1
2
3
4
# ./proxy/config.yml
# 途中省略
ip_forward: true
online_mode: true

BungeeCord にサーバーを登録する

MinecraftサーバーをBungeeCordの管理下に置くためにはBungeeCordのconfig.ymlにサーバーを登録する必要があります。

同一のdocker-compose.ymlから起動したサーバーを登録する場合は、すこしだけ工夫が必要になります。

通常のようにIPアドレスとポートを指定せず、docker-compose.ymlで登録したサービス名とそのコンテナの内部ポートをそのまま指定します。

今回使用したdocker-compose.ymlではMinecraftサーバーをserverというサービス名で登録しており、コンテナ内部ポートは25565です。

このサーバーを登録する場合は以下のように記述します。

1
2
3
4
5
6
# ./proxy/config.yml
# 途中省略
servers:
  main:
    address: server:25565 # サービス名:内部ポート
    restricted: false

実際に検証してみる

サーバーに接続するときは通常と同じようにマシンのIPアドレスとポートを指定して接続します。

おわりに

最初は順調に起動できたのですが、サーバーの登録に少し手間がかかったので同じように困っている人の参考になれば幸いです。

参考文献

今回の環境構築においてとても参考になりました。

ありがとうございました。