profile picture

Minecraft Java Edition のサーバーを構築する

January 03, 2023 - game minecraft java edition

概要

Minecraft Server on Docker (Java Edition) を使用して Minecraft Java Edition のサーバーを構築します。

前提条件

サーバーの構築

Minecraft Java Edition のサーバーを構築します。

  1. サーバーに必要なフォルダを作成します。フォルダ構成の詳細は 公式ドキュメント を参照してください。

    フォルダ名備考
    volumeワールドデータ用のフォルダ
    configサーバー設定用のフォルダ
    modsmod を入れるフォルダ
    plugingspluging を入れるフォルダ
    backupsワールドデータのバックアップ用のフォルダ
  2. 公式ドキュメント を参考に docker-compose.yaml を作成します。

    • services > mc > environment でシード値、ゲームモードなどを設定することができます。詳細は 公式ドキュメント を参照してください。
    • バックアップが不要の場合は services > backups を削除してください。
    version: "3.7"
    
    services:
      # https://docker-minecraft-server.readthedocs.io/en/latest/#using-docker-compose
      mc:
        image: itzg/minecraft-server
        tty: true
        stdin_open: true
        ports:
          - 25565:25565
        # https://docker-minecraft-server.readthedocs.io/en/latest/variables/#server
        environment:
          EULA: "TRUE"
          MODE: "survival"
          DIFFICULTY: "normal"
          GUI: "FALSE"
        volumes:
          - /mc-je/volume:/data
          - /mc-je/config:/data/config
          - /mc-je/mods:/data/mods
          - /mc-je/plugings:/data/plugings
    
      # https://github.com/itzg/docker-mc-backup
      backups:
        image: itzg/mc-backup
        environment:
          BACKUP_INTERVAL: "24h"
          PAUSE_IF_NO_PLAYERS: "true"
          PRUNE_BACKUPS_DAYS: 7
          # instead of network_mode below, could declare RCON_HOST
          # RCON_HOST: mc
        volumes:
          # mount the same volume used by server, but read-only
          - /mc-je/volume:/data:ro
          # use a host attached directory so that it in turn can be backed up
          # to external/cloud storage
          - /mc-je/backups:/backups
        # share network namespace with server to simplify rcon access
        network_mode: "service:mc"
    

ホワイトリストの設定

許可したプレイヤーだけがログインできるようにホワイトリストを設定します。詳細は 公式ドキュメント を参照してください。

  1. whitelist.json を作成します。

    プレイヤーの uuid、name を json 形式で記述します。

    [
      {
        "uuid": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
        "name": "xxxxxx"
      }
    ]
    
  2. docker-compose.yaml を修正してホワイトリストを有効にします。

    • services > mc > environment
      • ENABLE_WHITELIST: "TRUE"
    • services > mc > volumes
      • - /mc-je/whitelist.json:/data/whitelist.json

    修正後の docker-compose.yaml

    mc:
      image: itzg/minecraft-server
    tty: true
    stdin_open: true
    ports:
      - 25565:25565
    environment:
    EULA: "TRUE"
    MODE: "survival"
    DIFFICULTY: "normal"
    GUI: "FALSE"
    ENABLE_WHITELIST: "TRUE"
    volumes:
      - /mc-je/volume:/data
      - /mc-je/config:/data/config
      - /mc-je/mods:/data/mods
      - /mc-je/plugings:/data/plugings
      - /mc-je/whitelist.json:/data/whitelist.json
    

サーバーの起動/停止

サーバーの公開

Tunnel を構築して自宅サーバーを公開する方法 を参考にしてください。
次のように nginx を Minecraft Java Edition に読み替えてください。

# server.toml
[server]
bind_addr = "0.0.0.0:2333"

[server.services.mc-je]
token = "mc-je-token"
type = "tcp"
bind_addr = "0.0.0.0:25565"
# client.toml
[client]
remote_addr = "myserver:2333"

[client.services.mc-je]
token = "mc-je-token"
type = "tcp"
local_addr = "mc:25565"
# docker-compose.yaml > services > tunnel
tunnel:
  depends_on:
    - mc
  image: rapiz1/rathole
  restart: unless-stopped
  command: ["--client", "/app/client.toml"]
  tty: true
  volumes:
    - /mc-je/client.toml:/app/client.toml