オンライン合宿企画用のMinecraftサーバを構築する

オンライン合宿企画用のMinecraftサーバを構築する

Tags
Minecraft
合宿
Java
Server
Published
December 4, 2024
Author
DDlia
Description
⚠️
この記事はnoteからの移行記事です.
こんにちは, 音楽技術部技術班のDDliaです.
豊橋は台風の影響で悪天候が続いているようですね.
9月1日から音楽技術部では合宿を予定していましたが, 大学からの活動自粛の要請もあって自粛する運びとなりました.
8月30日の夜, いつも通りXを開いていたら, 音楽技術部同期のm◯ttyくんから1件のDMが届きました.
なんか9月1日にマイクラでエンドラ討伐しないかみたいな話が出てるんだけど、サーバーをその日だけ開けたりしませんか?
合宿オンライン企画としてMinecraft エンドラ討伐RTAが企画されたようです. Minecraftサーバー, サクッと建てちゃいましょう.

要件

🚧
バニラ (余計なプラグインやMODを入れない)
BEとのクロスプレイ
新規にワールド生成
いっぱい入れるようにする
9/1だけ開ける

方針

インフラ

帰省中で自宅サーバの電源を落としてきてしまって使えないので, クラウドを使います. 1日2日くらいなら大した金額にはならないだろうということで.
今回はOracle Cloud Infrastructureを使います.

Minecraftサーバー

MinecraftサーバーといえばPaperが有名だと思いますが, いつの間にかマルチスレッド処理対応のFoliaがリリースされていて面白そうだったので使ってみます. Paperとのプラグインの互換性がなく, ほとんどのプラグインが対応していないようですが, 今回はバニラという要件なので問題ないですね.

プロキシサーバー

BEとのクロスプレイを実現するためには, GeyserやFloodgateといったプラグインをインストールします. 前述の通りFoliaはPaperとのプラグインの互換性がないため, GeyserやFloodgateをプロキシサーバーにインストールして使います. 今回はVelocityを使います.

インスタンスの作成

Oracle Cloud Infrastructureのコンソールにログインして, インスタンスを作成します. 合宿企画ということでそれなりに人が来そうなので, 強めのスペックにしておきます.
🐟
  • リージョン: Japan Central (Osaka)
  • イメージ: Oracle Linux 9
  • シェイプ: AMD VM.Standard.E4.Flex 4コア 16GBメモリ
 
インスタンスを作成します.
notion image
VNICにはパブリックIPv4アドレスとIPv6アドレスを割り当て, SSH公開鍵を設定します. ブートボリュームは今回は初期設定の46.6GBに設定しました.
2日程度なので大丈夫でしょう, しらんけど
notion image

SSHログイン

インスタンスを作成したら, サーバーコンソールにログインします.
手元のPCのターミナルを開いて, ssh opc@<インスタンスのIPアドレス> を実行して接続します.
OK
notion image

アップデート

$ sudo dnf update -y

Javaのインストール

Minecraftサーバーを動かすためにJavaをインストールしましょう.
$ sudo dnf install graalvm-21-jdk
`java --version` を実行して, インストールできているか確認します.
$ java --version java 21.0.4 2024-07-16 LTS Java(TM) SE Runtime Environment Oracle GraalVM 21.0.4+8.1 (build 21.0.4+8-LTS-jvmci-23.1-b41) Java HotSpot(TM) 64-Bit Server VM Oracle GraalVM 21.0.4+8.1 (build 21.0.4+8-LTS-jvmci-23.1-b41, mixed mode, sharing)

Screenのインストール

epelを有効化します
$ vim /etc/yum.repos.d/oracle-epel-ol9.repo
enabled=0 を1に変更します.
Screenをインストール.
$ sudo dnf update $ sudo dnf install screen

Minecraftサーバー

ビルド

以下を参考にさせていただきました.
## Gitをインストール, クローン $ sudo dnf install git $ git clone https://github.com/PaperMC/Folia.git $ cd Folia ## Gitの設定 git config --global user.name "<your-name>" git config --global user.email "<your-email>" ## ビルド $ ./gradlew applyPatches $ ./gradlew createReobfBundlerJar ## 適当なディレクトリを作成して実行ファイルを移動 $ cd .. $ mkdir minecraft $ cd minecraft $ cp ../Folia/build/libs/folia-bundler-1.20.6-R0.1-SNAPSHOT-reobf.jar ./

起動

## サーバー起動 $ java -jar ./folia-bundler-1.20.6-R0.1-SNAPSHOT-reobf.jar --nogui Ctrl + C で停止 ## EULAに同意 (eura=falseをeura=trueに) $ vim eula.txt ## 各種設定 $ vim config/paper-global.yml $ vim config/paper-world-defaults.yml $ vim server.properties
起動用シェルスクリプトを作成します. Aikar's Flagsを使います.
$ vim start.sh
#!/bin/bash java -Xms10G -Xmx10G -XX:+UseG1GC -XX:+ParallelRefProcEnabled -XX:MaxGCPauseMillis=200 -XX:+UnlockExperimentalVMOptions -XX:+DisableExplicitGC -XX:+AlwaysPreTouch -XX:G1NewSizePercent=30 -XX:G1MaxNewSizePercent=40 -XX:G1HeapRegionSize=8M -XX:G1ReservePercent=20 -XX:G1HeapWastePercent=5 -XX:G1MixedGCCountTarget=4 -XX:InitiatingHeapOccupancyPercent=15 -XX:G1MixedGCLiveThresholdPercent=90 -XX:G1RSetUpdatingPauseTimePercent=5 -XX:SurvivorRatio=32 -XX:+PerfDisableSharedMem -XX:MaxTenuringThreshold=1 -Dusing.aikars.flags=https://mcflags.emc.gs -Daikars.new.flags=true -jar paper.jar --nogui
## 実行権限の付与 $ chmod +x start.sh ## Screenで起動 $ screen -S minecraft $ ./start.sh Ctrl + A d
Minecraftサーバの起動完了!server.propertiesで適宜ポート番号等を変えましょう.

プロキシサーバー

適当にディレクトリを作成して実行ファイルを配置します.
## ディレクトリの作成 $ cd .. $ mkdir velocity $ cd velocity ## プロキシサーバーソフトウェアの配置 $ wget https://api.papermc.io/v2/projects/velocity/versions/3.3.0-SNAPSHOT/builds/416/downloads/velocity-3.3.0-SNAPSHOT-416.jar ## 実行 $ java -jar velocity-3.3.0-SNAPSHOT-416.jar Ctrl + C で停止 ## プラグインの配置 $ cd plugins $ scp ... # サーバー設定 $ cd .. $ vim velocity.toml ## Screenで起動 $ screen -S velocity $ java -jar velocity-3.3.0-SNAPSHOT-416.jar Ctrl + A d`
velocity.tomlでFoliaサーバのポート番号やシークレットを設定します.

ポート開放

Minecraftでは, Java版はデフォルトでTCP 25565番ポート, BE版ではUDP 19132番ポートを使用します. サーバーでこれらのポートを受け入れられるように設定します.
$ sudo firewall-cmd --add-port=25565/tcp --permanent $ sudo firewall-cmd --add-port=19132/udp --permanent $ sudo firewall-cmd --reload
また, Oracle Cloud Infrastructureのコンソールにログインして, セキュリティリストのイングレスルールでTCP 25565番, UDP 19132番宛の通信を許可しておきます.

DNS設定

音楽技術部では, Cloudflareでドメイン `technotut.net` を管理しています.
Aレコード, AAAAレコードを追加して, 先ほど作成したOracle CloudのインスタンスのパブリックIPを設定しておきます.

完成!

8/30 23:45から作業開始, 8/31 1:30に構築を完了しました.
音楽技術部員のMinecraftのモチベーションはかなり高く, 構築完了直後に14人がログイン, その後午前6時まで10人前後がテスト環境で遊んでいました.
10人前後がプレイしている中で, 定期的にTPSの状況を確認していましたが, TPSが19を下回ることなく良好なプレイ環境を維持できていたように思います. 本日9/1もトラブルなく快適なプレイ環境を提供できることを祈ります.
notion image
トップへ戻る