🧊

[はじめてのサーバ構築]自宅にJava・統合の疑似クロスプレイ可・新旧バージョン可なマイクラサーバを構築した話

に公開

1. サーバをたてるまで

1-1. 使用するデバイス

サーバをたてる以前に、サーバ用のPCを購入する必要がありました。スペック的にも価格的にも良かった(セールが行われていた)、GMKtec nucbox M5 Plus (Amazonへリンク) という機種をAmazonにて購入!

  • あと有線USBキーボードも合わせて購入しました。
  • マウスはUSB無線(コネクタ付)のものがあったので使用。

1-2. Ubuntuをインストール

  • メインのWindowsPCでRufusを用いて、Ubuntu24.04LTSのインストールメディアを作成。
  • USBキーボードをサーバ用PCに接続し、UEFIからBootさせてインストール。(この辺は調べればわかりやすい情報がいっぱい出てきます)

最初はWindowsを消さずに、空き領域にインストールしようとしていたのだが、なぜかインストールが完了したにも関わらずうまく立ち上がらなかったため断念...。仕方なくWindowsを消してUbuntuをクリーンインストールした。(結果的には良かったのかもしれない)

1-3. Minecraftサーバソフトウェアを導入

Minecraft公式ページからJava版のvanillaサーバソフトウェアをダウンロードして任意のサーバ用ディレクトリ(例: /home/ユーザ名/minecraft/minecraftsv/)に配置。
初回実行で表れる同意確認ファイル(eula.txt)を書き替え、再度実行。無事立ち上げが完了。

cd minecraft/minecraftsv
java -Xms8G -Xmx8G -jar server.jar nogui
vi eula.txt

※この辺の作業やポート開放などの作業は、先駆者の方々の分かりやすい記事が多々存在しているので、私の分かりづらい説明よりそちらを推奨します笑

※ちなみにその後私はPaperMCへ移行しました


2. ワールドデータの自動バックアップを実装する

2-1. 自動バックアップスクリプトを作成(苦戦しまくった)

こちらの記事を参考にしてスクリプトを作成した。
手動実行すると適切に動作したのだが、cronで自動実行し始めて数日、バックアップが適切に作成されていない。
原因を調べるのに数日かかったが、ファイルの読み書き権限が適切でなかった。server.jarを実行した際に自動作成されるファイルの権限がrootになっていた。
ファイル権限を更新し、ようやくバックアップの自動化に成功。

chmod +x ファイル名

cron設定例(6時間毎に実行)

0 */6 * * * /home/ユーザ名/backup.sh >> /home/ユーザ名/backup.log 2>&1

3. プラグインを導入して統合版対応・新旧バージョン対応

3-1. VanillaからPaperへ

サーバを数日ソロプレイをしながら運用していたのだが、統合版(スマホ等)しかプレイできない知人がいるとのことでプラグインを導入しようと考えた。
バニラサーバはプラグインが使用できないので、有名なPaperMCを用いることにした。
(実は当初PaperMCでサーバを立てていたのだが、動作が重すぎて変えていた(なおこれはクライアント側の問題だった...))

PaperMCのサイトからサーバソフトウェアをダウンロードしserver.jarを配置または置き換える。同時にワールドデータ等も置き換えて再度サーバ起動。
eula.txtも忘れずに書き替え、コマンドを実行するとPaperMCのサーバが立ち上がる。

  • ※server.jar及びpaper.jarを置き換えるときは必ずサーバをstopコマンドで停止する

  • PaperMCのjarファイルはpaper.jarとリネームすると区別しやすいかも

cd minecraft/minecraftsv
java -Xms8G -Xmx8G -jar paper.jar nogui

3-2. クロスプレイプラグインの導入

こちらの記事を参考に、統合版との疑似クロスプレイや統合版アカウントでのプレイを可能とすることを目的に作業を行った。
GayserMC、Floodgateを導入。
サーバ再起動を終え、さてPC統合版からサーバ接続を...とここで問題が発生。

統合版からサーバへの接続が失敗するのだ。
だが、気づいた。ポート開放だ!
Java版サーバとしてスタートしたため、Java版へのポート変換対応は行っていたのだが、統合版に対しては対応を失念していた。
サーバPCのポート19132を開放し、ルータのポート変換も設定した。
ここで注意点がある。統合版はTCPではなくUDPなのだ。そこを間違えないようにルータにポート変換を設定する必要がある。

これで解決したかのように思われたが、なんとLocalIP(LAN内)とGlobalIP(ドメイン等インターネット側からの接続)で接続の可否が違う!なんとポートが違う!
実はDDNSでドメインを取得し、ポート番号を1つに決めて作業していた。そこでルータにおいて指定のポート番号のTCPをJava版のポートに、UDPを統合版のポートにポート変換していた。だが、サーバはデフォルトポート番号で運用していたため、GlobalIPで接続する場合は指定のポート暗号、LocalIPの場合はデフォルトのポート番号を指定する必要があった!

"直接"つながるか"インターネットを経由するか"が変わるため、ローカルはポート変換された後とみなしてデフォルトの19132を設定しなければ接続できないということに気づくまで数時間...。

まあ時間はかかったものの、なんとか自力で解決できたのでよかった。

3-3. バージョン差接続を可能にするプラグインの導入

統合版は常に最新版に更新されてしまうかつ、Geyserは最新版でないと動かない等に対応するため、別途ViaVersionViaBackwardsを導入してバージョンを問わず接続できるようにした。

結果的にJava版ユーザが無理に最新版を使用する必要がなくなり、可用性が増したのかも...?


4. まとめと今後の運用

お断りしておくが、これは個人的な忘備録としてメモ程度に書いたものである。詳細な部分は誤りがあるかもしれない。そしてサーバとして適切な構成ではないかもしれない。わかりやすい解説かといえば否。その辺はご容赦いただきたい。

実装してみて感じたことは、先駆者の方々は偉大であるということだ。そしてプラグイン開発者の方々、本当に感謝です。

今後はDDNSの自動更新やシステム再起動時にサーバも自動起動する仕組み、サーバ状態を簡単に確認できるページなどを実装できればいいなと思っている。

以上、はじめてのマイクラサーバ構築でした。

Discussion