はじめに
2023年5月にマイクラサーバーを立ててみたので、その覚え書きです。手順内のプラグインはDynmapをチョイスしました。「みんな入れたい」「でも手順が少し複雑」というので題材として丁度良いのではないかと思いました。
本記事はプラグインサーバーを作成する手順なのでJava版からアクセスされるサーバーを想定していますが、GeyserMCとFloodgateを利用することで、後から統合版とのクロスプレイに対応したサーバーにすることもできます。ただし、この記事ではその手順は記載していません。
読者の想定レベル
- ssh でサーバーに入ったことがある
- vi でファイルが編集できる
手順
ConoHaVPSを借りてサーバーを立てる
ConoHa for GAMEというサービスを利用します。借りるのは結局VPSです。
minecraft Java版を選択し、自分の用途に合ったプランを選択します。
rootパスワードを入力して忘れずにおき、ネームタグ(サーバー名のようなもの)を入力します。
「オプションを見る」を開き、SSH Keyを設定します。
キーを新規作成から自動作成、minecraft-key
という名前の秘密鍵を生成します。「+追加」のボタンを押したタイミングでファイルが生成されるため、ダウンロードのモーダルが出てくるまで少し待つ必要があります。ダウンロードボタンが出てきたら、クリックして「minecraft-key.pem」という秘密鍵のファイルをダウンロードします。後で何度も使う大事なファイルなので無くさないようにしてください。
ダウンロードができたら、「次へ」をクリックし、支払い方法などを入力して決済を行います。
サーバーリストの画面に飛んだら、先程作ったサーバーがあるのでネームタグをクリックして詳細画面に飛びます。
サーバーが起動してたら一度停止し、サーバー再構築をクリックします。
プラグインを入れたいサーバーのバージョンを選択して、rootパスワードを再設定し、SSH Keyには先程登録したキーを割り当てます。そしてサーバー再構築を行います。再構築には時間がかかるので、しばらく待ちます。
サーバーが出来上がったら、サーバーのIPアドレスをメモしておきます。
sshでサーバー内に入る
sshやsftpでサーバー内にアクセスしたいのですが、その前にやらなければいけないことがあります。
22番ポートをセキュリティグループで追加しなくてはいけません。最初から選択可能なセキュリティグループにIPv4v6-SSHがあるのでこれを追加します。
追加できたらあとは~/.ssh/config
を書き、コンソールからsshでアクセスできるようにします。
筆者はWSLのUbuntuからsshを使ってアクセスしていますが、TeraTermでもMacのターミナルからでも何でも構いません。
~/.ssh
の直下に、ダウンロードしてきた秘密鍵のminecraft-key.pemを配置して、chmodします。
chmod 400 ~/.ssh/minecraft-key.pem
~/.ssh/configに追記します。ファイルが無ければファイルを作成します。
Host minecraft
Hostname [IPアドレスをここに書く]
User root
IdentityFile ~/.ssh/minecraft-key.pem
ServerAliveInterval 30
ServerAliveCountMax 20
そうすれば以下のようなコマンドでVPSのサーバーに入ることができるようになります。
ssh minecraft
無事にサーバーに入れたらOKです。2023年05月時点だとOSはUbuntu 20.04
のようでした。
/opt/minecraft_server/
にマイクラサーバーの中身があります。
既存のサーバープロセスの確認と停止
ps aux | grep minecraft
でマイクラのプロセスが起動していることを確認しましょう。
ps aux | grep minecraft
minecra+ 804 0.0 0.0 2608 536 ? Ss 18:38 0:00 /bin/sh -c /usr/bin/screen -DmS minecraft /usr/bin/java -server -Xms512M -Xmx2048M -XX:+UseG1GC -XX:ParallelGCThreads=2 -XX:MinHeapFreeRatio=5 -XX:MaxHeapFreeRatio=10 -Dlog4j2.formatMsgNoLookups=true -jar /opt/minecraft_server/minecraft_server.1.19.4.jar nogui
minecra+ 861 0.0 0.0 6952 3380 ? Ss 18:38 0:00 /usr/bin/SCREEN -DmS minecraft /usr/bin/java -server -Xms512M -Xmx2048M -XX:+UseG1GC -XX:ParallelGCThreads=2 -XX:MinHeapFreeRatio=5 -XX:MaxHeapFreeRatio=10 -Dlog4j2.formatMsgNoLookups=true -jar /opt/minecraft_server/minecraft_server.1.19.4.jar nogui
minecra+ 890 28.3 30.1 9243564 2454268 pts/0 Ssl+ 18:38 9:39 /usr/bin/java -server -Xms512M -Xmx2048M -XX:+UseG1GC -XX:ParallelGCThreads=2 -XX:MinHeapFreeRatio=5 -XX:MaxHeapFreeRatio=10 -Dlog4j2.formatMsgNoLookups=true -jar /opt/minecraft_server/minecraft_server.1.19.4.jar nogui
マイクラサーバーっぽいものが起動しているのがわかります。/usr/bin/java -server -Xms512M -Xmx2048M -XX:+UseG1GC -XX:ParallelGCThreads=2 -XX:MinHeapFreeRatio=5 -XX:MaxHeapFreeRatio=10 -Dlog4j2.formatMsgNoLookups=true -jar /opt/minecraft_server/minecraft_server.1.19.4.jar nogui
の部分がサーバーを動かすメインのコマンドで、それをscreenコマンドを使用してバックグラウンドで実行している構造になっています。
このプロセスはsystemdで適切に管理されているので、minecraft-server.service
ファイルに書かれた通りに起動しています。
# 中身を確認する
vi /etc/systemd/system/minecraft-server.service
今回立てたいのはプラグインサーバーなので、このプロセスを停止させて、起動に使っているファイルminecraft_server.1.19.4.jar
を別のものに差し替えたいです。なのでプロセスを停止します。
systemctl stop minecraft-server
これでマイクラサーバーが止まりました。
プラグインサーバーのインストールと起動
/opt/minecraft_server/minecraft_server.1.19.4.jar
をプラグインサーバーのものに差し替えましょう。
今回の例ではPaperMCからpaper-1.19.4-524.jar
をダウンロードして使用します。
PCからサーバーにファイルを転送するのには、WindowsからだとSFTPが使えるソフトが便利なのでCyberduckというソフトウェアを使用します。もちろん代替のものでも良いです。
以下はCyberduckの画面です。新規接続からSFTPを設定し、サーバーのIPアドレスとユーザー名rootと、minecraft-key.pem
のファイルへのパスを入力します。
上部の/root
となっているところを/
に変更して、/opt/minecraft_server
を開けば、マイクラサーバーを構成するファイルたちを見ることができます。
ここにあるもともとの起動ファイルminecraft_server.1.19.4.jar
をminecraft_server.1.19.4.jar.org
にrenameして使えなくしてしまい、代わりにダウンロードしたpaper-1.19.4-524.jar
を突っ込みます。
さて、それではこのファイルを使ってマイクラサーバーを起動しましょう。
ssh でさっき見たファイルの、サービスの起動情報を編集します。
# 中身を編集する
vi /etc/systemd/system/minecraft-server.service
このファイル内で/opt/minecraft_server/minecraft_server.1.19.4.jar
となっている箇所を/opt/minecraft_server/paper-1.19.4-524.jar
に変更してやれば良いです。また、メモリをもっと使いたいという場合は使用メモリの情報も書き換えて良いです。例えば以下のような感じです。
[Unit]
Description=Minecraft Server
After=network.target
[Service]
WorkingDirectory=/opt/minecraft_server/
User=minecraft
Group=minecraft
ProtectSystem=full
ProtectHome=true
ExecStart=/bin/sh -c '/usr/bin/screen -DmS minecraft /usr/bin/java -server -Xms1024M -Xmx4096M -XX:+UseG1GC -XX:ParallelGCThreads=2 -XX:MinHeapFreeRatio=5 -XX:MaxHeapFreeRatio=10 -Dlog4j2.formatMsgNoLookups=true -jar /opt/minecraft_server/paper-1.19.4-524.jar nogui'
ExecReload=/usr/bin/screen -p 0 -S minecraft -X eval 'stuff "reload"\\015'
ExecStop=/usr/bin/screen -p 0 -S minecraft -X eval 'stuff "save-all"\\015'
ExecStop=/usr/bin/screen -p 0 -S minecraft -X eval 'stuff "stop"\\015'
Restart=on-failure
RestartSec=10s
[Install]
WantedBy=multi-user.target
ExecReload
などに書いてある通り、bash側からマイクラのコマンドを送ることができます。例えば、/say from console
というコマンドをbashからマイクラに送りたいときには以下のようなコマンドで実行できます。
sudo -u minecraft screen -p 0 -S minecraft -X eval 'stuff "say from console"\\015'
これを利用すれば、crontab -e
でマイクラのコマンドを定期実行することもできます。
以下は、CoreProtectの20日より前の古いデータを朝5時に削除する例です。
0 5 * * * sudo -u minecraft screen -p 0 -S minecraft -X eval 'stuff "co purge t:20d"\\015'
.serviceファイルの変更をしたので、daemon-reload
を行う必要があります。
systemctl daemon-reload
準備が整ったのでプラグインサーバーを起動しましょう。
systemctl start minecraft-server
ps aux | grep minecraft
を行って、正しいjarファイルを使用してマイクラサーバーが起動していることを確認できたら成功です。
プラグインサーバーはこれで起動したので、Java版のゲームからはもうアクセスすることができます。IPアドレスをゲームに入力してアクセスしてみましょう!
minecraft-serverはマシン起動時にプロセスが起動するようにsystemdで設定されています。マシンが起動したらマイクラサーバーも起動するということです。
systemctl is-enabled minecraft-server
> enabled
定期再起動
安定稼働のためには夜間にプロセスを再起動させると良いでしょう。
rootユーザーでcronを設定して朝4時に再起動させます。
crontab -e
設定に以下のように記載
0 4 * * * systemctl restart minecraft-server
OP権限の付与
screenでマイクラ側のコンソールにアクセスし、最初のオペレータを生み出しましょう。
screenの詳細な使い方は別の記事を参照してください。
マイクラのscreenセッションはroot
ユーザーではなくminecraft
というユーザーで起動しているので、minecraft
ユーザーにスイッチします。
su - minecraft
そしてscreenの中に入ります。minecraft-server.service
からも分かる通り、起動screenのセッションにはminecraft
という名前がついているので、minecraft
をアタッチします。
screen -r minecraft
これを一行で書くこともできます。
sudo -u minecraft screen -r minecraft
するとマイクラのコンソールが出てきます。ここから自分をマイクラ内の最初のオペレータに変更しましょう。仮にマイクラ内の自分のIDがexample_crafter
だとすると、以下のように入力すれば良いです。
op example_crafter
もしオペレータ権限を外したい時は、deopで解除できます。
deop example_crafter
screenから抜け出したい時は、[Ctrl + a] + d
で抜けることができます。
プラグインの導入
それでは実際にプラグインを入れてみましょう。
最初のプラグイン導入
もしあなたがマイクラサーバーを初めて作ったのならば、最初に入れて動作確認をするのは、導入がシンプルなプラグインの方が良いでしょう。
おすすめはGSitです。階段を右クリックしたら座ることができるというシンプルなプラグインで、インストールも簡単です。スクショを撮る時に座ってるとかわいいので事実上必須のプラグインですね。
/opt/minecraft_server/plugins
にGSit-1.4.4.jar
のような、サーバーのバージョンに合ったjarファイルをダウンロードしてきて突っ込み、サーバーを停止/起動するだけです。簡単ですね。
systemctl stop minecraft-server
systemctl start minecraft-server
動作確認は階段ブロックを作って右クリックしてみて、座れたらOKです。マイクラはF5で視点切り替えができるので確認してみましょう。
Dynmap導入
Dynmapは言わずとしれたマップのプラグインで、ブラウザからワールドを一望できます。
Dynmapの導入で気を付けなければならないことは2つあります。
- 追加でポートを開けないといけない
- デフォルトの設定だとストレージを沢山消費するので場合によっては軽量化する必要がある
プラグインファイルの移動
上の手順でGSitを入れたように、/opt/minecraft_server/plugins
にdynmapのjarファイルを突っ込んでsystemctlでプロセスを再起動すれば良いです。ただし、これだけではブラウザからDynmapにアクセスすることができません。理由はもちろんポートが開いておらず通信がブロックされているためです。
ポートを開ける
dynmapはデフォルトでTCPの8123ポートを使用します。minecraftのJava版はTCPの25565番を使用していて、統合版はUDPの19132番を使用しているので、いずれとも違います。
手順通りに作成したサーバーが今どうなっているかというと、TCPの25565番とUDPの19132番がセキュリティグループ上では開放されていて、Ubuntu上ではTCPの25565番が空いていてUDPの19132番は空いていないという状態になっています(2023/05/07現在の状態なので変更されている可能性もある)。おそらくJava版用で作成したためこうなっています。
TCP/25565(Java版) | UDP/19132(統合版) | TCP/8123(Dynmap) | |
---|---|---|---|
セキュリティグループ(ConoHa) | 開放 | 開放 | ✕ |
ファイアウォール(Ubuntu) | 開放 | ✕ | ✕ |
もしGeyserMCなどを使用して統合版からもアクセスさせたいということであれば後からUDPの19132番をUbuntu上で開けないといけないので注意が必要です。今回はGeyserMCは関係ないのでスキップします。
dynmapはあくまでデフォルトで8123番になっているだけなので、80番に変更しようと思えば変更することもできます。今回はそのまま8123で行くことにします。
最初にセキュリティグループで8123を許可します。
8123を開放しているセキュリティグループはデフォルトでは存在しないので、自分で新しいセキュリティグループを作る必要があります。セキュリティ > セキュリティグループから新しいセキュリティグループを画像のように作成しましょう。セキュリティグループ名と説明はわかり易ければ何でもOKです。
そしてマイクラのサーバーに、作成したセキュリティグループをアタッチします。
セキュリティグループの設定が終わったら、今度はrootユーザーからUbuntuのファイアウォールの開放をする必要があります。筆者はiptablesには詳しくないので以下のコマンドが最適かはあまり自信がありません。詳しい人がいたら教えてください。
apt install iptables-persistent
ufw allow 8123
iptables -I INPUT 6 -m state --state NEW -p tcp --dport 8123 -j ACCEPT
netfilter-persistent save
ポートが適切に開いたのであれば、http://[IPアドレス]:8123/
でブラウザからマップにアクセスができるはずです。
軽量化
dynmapはそのまま使うには負荷が高くストレージも消費するので、場合によっては以下の記事などを参考に軽量化を行う必要があります。
もし、マップを出力するのが不要なワールドがあるのであれば、そのマップ自体を消してしまいましょう。
/dynmap pause all
/dmap mapdelete [ワールド名]:[マップタイプ]
# 例
/dmap mapdelete lobby:flat
おわりに
プラグインは公開サーバーを作る上で必要不可欠です。楽しいマルチプレイライフを!
参考