🦍

Minecraft Proxy Server を Docker で構築する(Velocity + Geyser)

2024/06/10に公開

コンテナ型仮想環境で、Java版マインクラフト用プロキシサーバー『Velocity』を構築し、さらに統合版とのクロスプレイを実現する 拡張プラグインを導入する方法について説明します。

🛠️ 事前準備

デバイスやソフトウェアは以下を用いる。

  • 💻 サーバ機(Ubuntu Server、Docker)
  • 🌐 Docker Hub
  • 🌐 Git Hub
    • 🔌 Geyser … 統合版クライアントとJava版サーバーの通信を中継する
    • 🔌 Flooggate … 統合版プレイヤーの認証からJava版の接続を許可する
    • 🔌 ViaVersion … 上位バージョンのクライアントからの接続を許可する
    • 🔌 ViaBackwards … 下位バージョンのクライアントからの接続を許可する

1. Docker のインストール

以下の記事より Docker のインストールを済ませておく。
https://zenn.dev/mesgory/articles/e4a707b0c31c76

2. データ格納用ディレクトリの用意

データを永続的に管理するためのディレクトリを用意する。

🖥️ terminal
# データ格納用ディレクトリの作成(存在しない場合)
mkdir -v /media/shared/minecraft

# カレント・ディレクトリの変更
cd /media/shared/minecraft

🎭 作業手順

1. Docker リポジトリのセットアップ

Compose ファイル を編集する。(詳細は公式ドキュメントを参照)

🖥️ terminal
# Compose ファイルの作成
vi ./compose.yaml
📄 compose.yaml
services:
  velocity:
    container_name: mc_velocity
    image: itzg/bungeecord
    tty: true
    stdin_open: true
    environment:
      TYPE: VELOCITY
      VELOCITY_VERSION: latest
      MEMORY: 512m
      PLUGINS: |
        https://download.geysermc.org/v2/projects/geyser/versions/latest/builds/latest/downloads/velocity
        https://download.geysermc.org/v2/projects/floodgate/versions/latest/builds/latest/downloads/velocity
        https://github.com/ViaVersion/ViaVersion/releases/latest/download/ViaVersion-5.0.2.jar
        https://github.com/ViaVersion/ViaBackwards/releases/latest/download/ViaBackwards-5.0.2.jar
    ports:
      - "25577:25577/tcp"
      - "25577:25577/udp"
    volumes:
      - ./velocity:/server
    restart: always

2. Docker コンテナの初回起動と停止

Compose を使ってアプリケーションを起動し、必要なファイル群が生成されたら一旦停止する。

🖥️ terminal
# コンテナの構築と起動(バックグラウンド実行)
docker compose up -d

# コンテナの停止
docker compose down

3. 設定ファイルの編集

各サービスの設定をサーバー環境に合わせて編集する。

⚙️ Config (velocity.toml)

🖥️ terminal
vi ./velocity/velocity.toml
📄 velocity.toml
# 中継サーバーのアドレス(初期設定のまま)
# 〜 5行目
bind = "0.0.0.0:25577"

# 最大プレイ人数
# 〜 13行目
show-max-players = 5

# プレイヤーの鍵認証を行う(初期設定のまま)
# 〜 19行目
force-key-authentication = true

# フォワーディングモード
# 〜 37行目
player-info-forwarding-mode = "modern"  # Velocity 推奨の転送方式

# 接続先サーバーの設定( サーバーの呼称 = <IPアドレス>:<port番号> )
# Docker で構築した場合は <Dockerサービス名>:<port番号> を設定する
# 〜 75-77行目
lobby = "paper:30066"
factions = "vanilla:25565"
minigames = "fabric:30067"

🔌 Geyser

🖥️ terminal
vi ./velocity/plugins/Geyser-Velocity/config.yml
📄 config.yml
# 統合版プレイヤーの接続先ポートをJAVA版に合わせる
# 〜 23行目
  clone-remote-port: true

# 統合版プレイヤーの場合でもJAVA版の認証を許可する
# 〜 56行目
  auth-type: floodgate

🔌 Floodgate

🖥️ terminal
vi ./velocity/plugins/floodgate/config.yml
📄 config.yml
# Floodgateを介してデータを送信する(統合版アカウントの接続を許可)
# 〜 19行目
send-floodgate-data: true

4. 設定内容の反映

プロセスを再起動して設定内容を反映する。

🖥️ terminal
# コンテナの再構築と起動(バックグラウンド実行)
docker compose up -d --build

⛳️ 動作確認

1. Minecraft Server の動作確認

リンク先の記事 ⛳️ 動作確認 を参考にして、中継サーバーから接続できることを確認する。

https://zenn.dev/mesgory/articles/e3dc962bd38dfd

サーバー名 サーバーアドレス(host:port)
任意の名前 ホスト名またはIPアドレス:25577

Discussion