🦍
Minecraft Proxy Server を Docker で構築する(Velocity + Geyser)
コンテナ型仮想環境で、Java版マインクラフト用プロキシサーバー『Velocity』を構築し、統合版とのクロスプレイを実現するための拡張プラグイン群を導入する方法について説明します。
🛠️ 事前準備
デバイスやソフトウェアは以下を用いる。
- 💻 サーバ機(Ubuntu Server、Docker)
- 🌐 Docker Hub
- 💿 itzg/minecraft-server … Minecraft Server on Docker (Java Edition)
- 🌐 Git Hub
- 🔌 Geyser … 統合版クライアントとJava版サーバーの通信を中継する
- 🔌 Flooggate … 統合版プレイヤーの認証からJava版の接続を許可する
- 🔌 ViaVersion … 上位バージョンのクライアントからの接続を許可する
- 🔌 ViaBackwards … 下位バージョンのクライアントからの接続を許可する
1. Docker のインストール
以下の記事より Docker のインストールを済ませておく。
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:latest
tty: true
stdin_open: true
environment:
TYPE: VELOCITY
VELOCITY_VERSION: latest
MEMORY: 256m
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
ports:
- "25577:25577/tcp"
- "25577:25577/udp"
volumes:
- ./velocity:/server
restart: unless-stopped
command: >
/bin/sh -c '
mkdir -p /server/plugins &&
echo "[+] Downloading ViaVersion..." &&
wget -q -O /server/plugins/ViaVersion.jar "$(
curl -s https://api.modrinth.com/v2/project/viaversion/version |
grep -oE https://cdn\\.modrinth\\.com[^\"'\''[:space:]]*ViaVersion[^\"'\''[:space:]]*\\.jar |
head -n 1
)" &&
echo "[+] Downloading ViaBackwards..." &&
wget -q -O /server/plugins/ViaBackwards.jar "$(
curl -s https://api.modrinth.com/v2/project/viabackwards/version |
grep -oE https://cdn\\.modrinth\\.com[^\"'\''[:space:]]*ViaBackwards[^\"'\''[:space:]]*\\.jar |
head -n 1
)" &&
echo "[+] Starting Velocity..." &&
exec /usr/bin/run-bungeecord.sh
'
✍️ 最新バージョンのプラグインを GitHub API から取得する場合
📄 compose.yaml
command: >
/bin/sh -c '
mkdir -p /server/plugins &&
echo "[+] Downloading ViaVersion..." &&
wget -O /server/plugins/ViaVersion.jar $(
curl -s https://api.github.com/repos/ViaVersion/ViaVersion/releases/latest |
grep "browser_download_url" |
grep "ViaVersion-[0-9.]*\.jar" |
head -n 1 |
awk -F "\"" "{print \$4}"
) &&
echo "[+] Downloading ViaBackwards..." &&
wget -O /server/plugins/ViaBackwards.jar $(
curl -s https://api.github.com/repos/ViaVersion/ViaBackwards/releases/latest |
grep "browser_download_url" |
grep "ViaBackwards-[0-9.]*\.jar" |
head -n 1 |
awk -F "\"" "{print \$4}"
) &&
echo "[+] Starting Velocity..." &&
exec /usr/bin/run-bungeecord.sh
'
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
⛳️ 動作確認
1. Minecraft Server の動作確認
リンク先の記事 ⛳️ 動作確認 を参考にして、中継サーバーから接続できることを確認する。
サーバー名 | サーバーアドレス(host:port) |
---|---|
任意の名前 | ホスト名またはIPアドレス:25577 |
Discussion
参考にさせてもらいました。
あと、compose.yamlの中身のgithubのリンクがリンク切れでした これに置き換えたらいけました。
あと自分の環境だとfloodgateもエラーを吐いてプラグインが読み込めなかったのでfloodgate-velocity.jarをfloodgate.jarにすることで解決しました