はじめに
minecraftサーバーを長らく運用しているものの、いろいろなことを常に覚えているわけではないので、備忘録がてら書いていこうと思います。
まずは基本的な構築について記して、なにかあれば追記したいと思います。
環境
検証環境も含めて色々な環境で運用していましたが、2021年8月現在運用中の環境の2台のみを記載します。
サーバー1
- Web ARENA Indigo 8GB 6vCPU 160GBインスタンス
- CentOS Linux release 7.9.2009.
- spigot 1.16.2
- 導入Plugin
プラグイン名 | 簡単な説明 |
---|---|
Vault | 前提プラグイン |
InvSort | チェストやインベントリをソートしてくれる |
EnchantableBlocks | かまどにエンチャントできる |
SetHomes | ホームを設定してテレポートできる |
dynmap | ブラウザでマップ表示する |
WorldEdit | ブロック設置、消去、コピーなどのエディット機能 |
DiscordSRV | サーバーの状態などをディスコードBOTに通知させる |
WorldGuard | ブロックを保護する |
CoreProtect | ログ記録プラグイン |
サーバー2(検証用)
- 自作PC
- Windows Server 2019 Standerd(使用版) or Ubuntu(必要なときに検証したいOSを入れて検証しています。)
- Spigot 1.17.1
- 導入Plugin
プラグイン名 | 説明 |
---|---|
GoTo | テレポートするプラグイン |
floodgate | 統合版(BE版)のアカウントでログインできるようにする |
Vault | 前提プラグイン |
ChestSort | チェストをソートしてくれる |
EnchantableBlocks | かまどにエンチャントできる |
dynmap | ブラウザでマップ表示する |
WorldEdit | ブロック設置、消去、コピーなどのエディット機能 |
Geyser-Spigot | 統合版(BE版)クライアントからJava版サーバーに通信をさせる |
WorldGuard | ブロックを保護する |
CoreProtect | ログ記録プラグイン |
その他検証用の仮想環境もありますが、しょっちゅう消したり作ったりするので割愛します。
構築について
- 基本的にLinux(Ubuntu)での構築を考えます。
1.17よりJava16が必要になったのでインストールします。
sudo apt install openjdk-16-jdk
- 以下のコマンドでバージョンを確認できます。
java -version
Spigotをビルドします。
- ビルドをするためgitをインストールします。
sudo apt install git
BuildToolsをダウンロードして実行させます。
上記URLよりダウンロードします。wgetでとってくれば良いと思います。
- BuildTools.jsをダウンロードしたら以下のコマンドで実行します。
java -jar BuildTools.jar --rev latest
時間がかかりますが終了すると「spigot-1.17.1.jar」が生成されるので、マイクラサーバーを展開したいディレクトリに移動します。
Spigotの起動
マイクラサーバーのディレクトリに移動し、基本的に以下のコマンドで実行できます。
java -jar spigot-1.17.1.jar
初回実行時にエラーになりますが、eula.txtが生成されるので、eula=Falseをeula=trueにして保存します。
その後再度実行させます。
基本的には以上でSpigotの起動はできます。
バックグラウンドで実行させる
このままだと起動はするのですが、フォアグラウンドのためめっちゃ使いづらいです。
順当にバックグラウンドにしてしまうとサーバーから直接コマンドでの操作ができません。
そのため、私はscreenを使用しています。
バックグラウンドでシステム起動と同時に実行させ、必要なときにサーバー画面に移れるようにしています。
以下のコマンドでインストールします。
sudo apt install screen
インストールさたか念の為確認します。
screen --version
Screen version 4.01.00devel (GNU) 2-May-06
軽いシェルスクリプトを書きます。
screen -AmdS mc java -Xms5120M -Xmx5120M -server -jar spigot-x.xx.x.jar
crontabに起動時にシェルスクリプトを読み込むように書きます。
@reboot sh /home/minecraft/server/spigot-x.xx.x/start.sh
もしも手動で停止させた場合、起動するときはstart.shを実行するようにしています。
Screenの簡単な使い方
スクリーンを表示させる
Screen -r <スクリーン名>
切り替えたスクリーンから前のスクリーンに戻る
"Ctrl+A" を押したあと "D" で直前のスクリーンに戻る
バックアップについて
前は自動でバックアップをするプラグインがあったのですが、1.16以降をサポートしなくなって動作しなくなりました。
いまは不定期に手動でバックアップをかけています。その手順を書いておきます。
スクリプトを作ります。
私はこちらのページを参考にスクリプトを修正しました。
# !/bin/bash
SERVICE='spigot-x.xx.x.jar'
OPTION='-p 25565'
USERNAME='minecraft'
SCNAME='mc'
MC_PATH='/home/minecraft/minecraft'
MC_DIRECTORY='spigot'
BK_PATH='/home/minecraft/minecraft/backup'
BK_TIME=`date +%Y%m%d-%H%M%S`
BK_NAME="$BK_PATH/mc_backup_full_${BK_TIME}.tar.bz2"
BK_GEN="3"
XMX="5120M"
XMS="5120M"
cd $MC_PATH
ME=`whoami`
if [ $ME == $USERNAME ] ; then
if pgrep -u $USERNAME -f $SERVICE > /dev/null
then
echo "Full backup start minecraft data..."
screen -p 0 -S $SCNAME -X eval 'stuff "say まもなくサーバーのバックアップを開始します。1分後にサーバーが停止します。"\015'
sleep 30
screen -p 0 -S $SCNAME -X eval 'stuff "say まもなくサーバーのバックアップを開始します。30秒後にサーバーが停止します。"\015'
sleep 20
screen -p 0 -S $SCNAME -X eval 'stuff "say まもなくサーバーのバックアップを開始します。10秒後にサーバーが停止します。"\015'
sleep 10
screen -p 0 -S $SCNAME -X eval 'stuff "save-all"\015'
screen -p 0 -S $SCNAME -X eval 'stuff "stop"\015'
sleep 40
echo "Stopped minecraft_server"
echo "Full Backup start ..."
tar -jcvf $BK_NAME $MC_DIRECTORY
sleep 10
echo "Full Backup compleate!"
# 三日以前のファイルは削除する
#find $BK_PATH -name "mc_backup_full*.tar.bz2" -type f -mtime +$BK_GEN -exec rm {} \;
echo "Starting $SERVICE..."
#screen -AmdS $SCNAME java -Xmx$XMX -Xms$XMS -jar $SERVICE nogui
screen -AmdS $SCNAME java -Xms$XMX -Xmx$XMS -XX:+UseG1GC -XX:MaxGCPauseMillis=50 -server -jar $SERVICE $OPTION
else
echo "$SERVICE was not runnning."
echo "Full Backup start ..."
tar -jcvf $BK_NAME $MC_DIRECTORY
sleep 10
echo "Full Backup compleate!"
# 三日以前のファイルは削除する
#find $BK_PATH -name "mc_backup_full*.tar.bz2" -type f -mtime +$BK_GEN -exec rm {} \;
echo "Starting $SERVICE..."
#screen -AmdS $SCNAME java -Xmx$XMX -Xms$XMS -jar $SERVICE nogui
screen -AmdS $SCNAME java -Xms$XMX -Xmx$XMS -XX:+UseG1GC -XX:MaxGCPauseMillis=50 -server -jar $SERVICE $OPTION
fi
else
echo "Please run the $USERNAME user."
fi
bzip2でフルバックアップしています。おおよそ10GBぐらいになります。
SpigotのJava起動パラメーター(-XX:+UseG1GCなど)は意味がわかっていません。正直なくても動くので"-Xms$XMX -Xmx$XMS"だけ指定してあげればいいのかな・・?とは思っています。
- コミュニティなどがあればそこにメンテの旨を書き込みます。
- 用意したスクリプトを実行します。
- 自動で終了してバックアップされ、立ち上がります。(超長い)
- 手動で外部のレンタルサーバーへsftpでアップロードします。
古いバックアップは手動で削除します。サーバー内5つぐらい保持していて、それ以上は消しています。
リソースパックについて
Server.propatiesに記載するリソースパックURLとSHA1について
resource-pack=(ここにリソースパックのURLを入れる)
resource-pack-sha1=(SHA1のハッシュ値を入れる)
ハッシュ値とは?
ファイルの同一性を確認するための値です。
Windowsの場合コマンドプロンプトで計算可能
certutil -hashfile (リソースパック)