4
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

minecraftのプラグインサーバーをConoHaVPSで作る。Dynmapも使う。

Last updated at Posted at 2023-05-07

はじめに

2023年5月にマイクラサーバーを立ててみたので、その覚え書きです。手順内のプラグインはDynmapをチョイスしました。「みんな入れたい」「でも手順が少し複雑」というので題材として丁度良いのではないかと思いました。

本記事はプラグインサーバーを作成する手順なのでJava版からアクセスされるサーバーを想定していますが、GeyserMCとFloodgateを利用することで、後から統合版とのクロスプレイに対応したサーバーにすることもできます。ただし、この記事ではその手順は記載していません。

読者の想定レベル

  • ssh でサーバーに入ったことがある
  • vi でファイルが編集できる

手順

ConoHaVPSを借りてサーバーを立てる

ConoHa for GAMEというサービスを利用します。借りるのは結局VPSです。
minecraft Java版を選択し、自分の用途に合ったプランを選択します。

conoha1.png

rootパスワードを入力して忘れずにおき、ネームタグ(サーバー名のようなもの)を入力します。
「オプションを見る」を開き、SSH Keyを設定します。

conoha2.png

キーを新規作成から自動作成、minecraft-keyという名前の秘密鍵を生成します。「+追加」のボタンを押したタイミングでファイルが生成されるため、ダウンロードのモーダルが出てくるまで少し待つ必要があります。ダウンロードボタンが出てきたら、クリックして「minecraft-key.pem」という秘密鍵のファイルをダウンロードします。後で何度も使う大事なファイルなので無くさないようにしてください。

conoha3.png

ダウンロードができたら、「次へ」をクリックし、支払い方法などを入力して決済を行います。

サーバーリストの画面に飛んだら、先程作ったサーバーがあるのでネームタグをクリックして詳細画面に飛びます。

conoha4.png

サーバーが起動してたら一度停止し、サーバー再構築をクリックします。

conoha5.png

プラグインを入れたいサーバーのバージョンを選択して、rootパスワードを再設定し、SSH Keyには先程登録したキーを割り当てます。そしてサーバー再構築を行います。再構築には時間がかかるので、しばらく待ちます。

conoha6.png

サーバーが出来上がったら、サーバーのIPアドレスをメモしておきます。

sshでサーバー内に入る

sshやsftpでサーバー内にアクセスしたいのですが、その前にやらなければいけないことがあります。
22番ポートをセキュリティグループで追加しなくてはいけません。最初から選択可能なセキュリティグループにIPv4v6-SSHがあるのでこれを追加します。

conoha7.png

追加できたらあとは~/.ssh/configを書き、コンソールからsshでアクセスできるようにします。
筆者はWSLのUbuntuからsshを使ってアクセスしていますが、TeraTermでもMacのターミナルからでも何でも構いません。

~/.sshの直下に、ダウンロードしてきた秘密鍵のminecraft-key.pemを配置して、chmodします。

chmod 400 ~/.ssh/minecraft-key.pem

~/.ssh/configに追記します。ファイルが無ければファイルを作成します。

~/.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のファイルへのパスを入力します。

cyber1.png

上部の/rootとなっているところを/に変更して、/opt/minecraft_serverを開けば、マイクラサーバーを構成するファイルたちを見ることができます。
ここにあるもともとの起動ファイルminecraft_server.1.19.4.jarminecraft_server.1.19.4.jar.orgにrenameして使えなくしてしまい、代わりにダウンロードしたpaper-1.19.4-524.jarを突っ込みます。

cyber2.png

さて、それではこのファイルを使ってマイクラサーバーを起動しましょう。

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に変更してやれば良いです。また、メモリをもっと使いたいという場合は使用メモリの情報も書き換えて良いです。例えば以下のような感じです。

/etc/systemd/system/minecraft-server.service の例
[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時に削除する例です。

crontab -e
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/pluginsGSit-1.4.4.jarのような、サーバーのバージョンに合ったjarファイルをダウンロードしてきて突っ込み、サーバーを停止/起動するだけです。簡単ですね。

systemctl stop minecraft-server
systemctl start minecraft-server

動作確認は階段ブロックを作って右クリックしてみて、座れたらOKです。マイクラはF5で視点切り替えができるので確認してみましょう。

Dynmap導入

Dynmapは言わずとしれたマップのプラグインで、ブラウザからワールドを一望できます。
Dynmapの導入で気を付けなければならないことは2つあります。

  1. 追加でポートを開けないといけない
  2. デフォルトの設定だとストレージを沢山消費するので場合によっては軽量化する必要がある

プラグインファイルの移動

上の手順でGSitを入れたように、/opt/minecraft_server/pluginsdynmapの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です。

conoha8.png

そしてマイクラのサーバーに、作成したセキュリティグループをアタッチします。

conoha9.png

セキュリティグループの設定が終わったら、今度は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

おわりに

プラグインは公開サーバーを作る上で必要不可欠です。楽しいマルチプレイライフを!

参考

4
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?