【使用しているVPS】さくらのVPS 2G
「CentOS7」環境にminecraftマルチサーバをインストールする手順を解説しています。
上記ページで解説した作業で、CentOS7のインストールとOS関連設定が完了しましたので、いよいよminecraftマルチサーバのインストール作業を行っていきます。
※マルチサーバのインストール手順はこちらのページを参考に作成しています。
事前準備
はじめにminecraftマルチサーバをインストールするために必要なアプリケーションの準備をしていきます。
javaのインストール
minecraftを動作させるために必要な「java」を「yum」コマンドを使用してインストールしていきます。
# yum -y install java
minecraftではjavaのバージョン1.6以上が必要なので、念のためバージョンを確認します。
Minecraftマルチサーバのバージョン1.12からシステム要求が変更となり、javaはバージョン1.8以上が必要となりましたので、yumでインストール後にバージョンの確認を忘れずに行ってください。
# java -version openjdk version "1.8.0_141" OpenJDK Runtime Environment (build 1.8.0_141-b16) OpenJDK 64-Bit Server VM (build 25.141-b16, mixed mode)
【システム要件】 https://help.mojang.com/customer/en/portal/articles/325948-minecraft-system-requirements
screenインストール
今回は「screen」の仮想端末上でminecraftマルチサーバを動作させる為に、「screen」をインストールします。
# yum -y install screen
wgetインストール
minecraft本体をダウンロードする際に必要な「wget」もインストールします。
# yum -y install wget
minecraftマルチサーバインストール
インストールの準備が整いましたので、minecraftマルチサーバのインストールを始めていきます。
minecraftマルチサーバ動作用ユーザの作成
rootユーザでminecraftマルチサーバを動作させてしまうとセキュリティ上問題があるので、専用のユーザを作成します。
今回は「minecraft」というユーザを作成していきますが、特にユーザ名にきまりは無いのでお好きなユーザ名で作成してくいただいて構いません。
# adduser minecraft # passwd minecraft Changing password for user minecraft. New password: Retype new password:
minecraft_serverダウンロード
Minecraftのダウンロードページで、minecraft_server.jarのダウンロードURLを確認「wget」コマンドでダウンロードしてきます。 (2016.06.14 ダウンロード用のURLが変更されていたので、リンク先を変更しました。)
Minecraftのマルチサーバ用ダウンロードページで、「minecraft_server.x.x.jar」ファイルのURLを確認し、「wget」コマンドでダウンロードしてきます。
ディレクトリ作成
好みの問題ですが、私は「/opt」ディレクトリ配下にディレクトリを作成し、そこにminecraftマルチサーバのデータを格納したいので「/opt/minecraft」というディレクトリを作成します。
ディレクトリが作成出来たら、ディレクトリの所有者を先ほど作成したマルチサーバ動作用ユーザに変更しておきます。
# mkdir /opt/minecraft # chown minecraft:minecraft /opt/minecraft/
別のディレクトリを使用する場合は、ディレクトリ名を適宜読み変えて作業を行ってください。
ダウンロード
「wget」コマンドで、先ほど確認したダウンロードURLから「minecraft_server.x.x.x.jar」ファイルをダウンロードしてきます。
# su - minecraft $ cd /opt/minecraft/ $ wget https://s3.amazonaws.com/Minecraft.Download/versions/1.12.1/minecraft_server.1.12.1.jar
minecraft_serverのコピー
ダウンロードしてきたファイルの名前を、「minecraft_server.jar」という名前でコピーをし、ダウンロードしてきたファイルはバックアップとして保存しておきます。
$ cp -p minecraft_server.1.12.1.jar minecraft_server.jar
EULA(使用許諾契約)同意
マイクラのマルチサーバを動作させるためには「EULA」(使用許諾契約)への同意が必要となります。
「eula.txt」作成
「EULA」(使用許諾契約)への同意は「eula.txt」といるファイルを編集して行うのですが、初期状態ではこのファイルは存在していませんが、「minecraft_server.jar」を実行することで、「eula.txt」というファイルが作成されます。
「minecraft_server.jar」は下記の要領で実行します。
java -Xms1024M -Xmx1024M -jar minecraft_server.jar nogui
「eula.txt」が無い状態で「minecraft_server.jar」を起動すると、「Stopping server」と表示され「minecraft_server.jar」は自動的に停止しますが問題はありません。
$ java -Xms1024M -Xmx1024M -jar minecraft_server.jar nogui [21:05:32] [Server thread/INFO]: Starting minecraft server version 1.12.1 [21:05:32] [Server thread/INFO]: Loading properties [21:05:32] [Server thread/WARN]: server.properties does not exist [21:05:32] [Server thread/INFO]: Generating new properties file [21:05:32] [Server thread/WARN]: Failed to load eula.txt [21:05:32] [Server thread/INFO]: You need to agree to the EULA in order to run the server. Go to eula.txt for more info. [21:05:32] [Server thread/INFO]: Stopping server
「minecraft_server.jar」が停止したあとに、「ls」コマンドで確認してみると「eula.txt」と「server.properties」というファイルと「logs」というディレクトリが作成されているはずです。
$ ls eula.txt logs minecraft_server.1.12.1.jar minecraft_server.jar server.properties
それぞれの役割は以下の通りとなります。
- eula.txt (EULAについてのファイル)
- server.properties (minecraft_serverの設定ファイル)
- logs (ログ格納ディレクトリ)
EULAの確認
「eula.txt」ファイルを「cat」コマンド等で確認してみると、EULAについての説明が書いてあることが分かりますので、記述されているURLの内容に目を通してみてください。
#By changing the setting below to TRUE you are indicating your agreement to our EULA (https://account.mojang.com/documents/minecraft_eula). #Fri Aug 11 21:05:32 JST 2017 eula=false
EULAへの同意
「EULA」の内容を確認しましたら、「eula.txt」を編集しEULAに同意します。
$ vi eula.txt
編集内容
「eula=false」を「eula=true」に変更することで、EULAに同意したこととなります。
変更前
eula=false
変更後
eula=true
minecraftマルチサーバへの接続確認
EULAへの同意設定が完了すると、minecraftのマルチサーバを起動することが出来るようになるので、クライアントからの接続確認を行っていきます。
「minecraft_server.jar」実行
下記コマンドで「minecraft_server.jar」を実行します。
java -Xms1024M -Xmx1024M -jar minecraft_server.jar nogui
実際に起動させた際のログが以下となります。
$ java -Xms1024M -Xmx1024M -jar minecraft_server.jar nogui [21:23:22] [Server thread/INFO]: Starting minecraft server version 1.12.1 [21:23:22] [Server thread/INFO]: Loading properties [21:23:22] [Server thread/INFO]: Default game type: SURVIVAL [21:23:22] [Server thread/INFO]: Generating keypair [21:23:22] [Server thread/INFO]: Starting Minecraft server on *:25565 中略 [21:23:32] [Server thread/INFO]: Preparing spawn area: 87% [21:23:33] [Server thread/INFO]: Preparing spawn area: 99% [21:23:33] [Server thread/INFO]: Done (10.905s)! For help, type "help" or "?"
正常に起動が完了すると「Done」と表示され、コマンド入力待ちうけ状態になります。
minecraftマルチサーバへの接続確認
minecraftマルチサーバの起動に成功しましたら、クライアント側から接続できるかの動作確認を行っていきます。
マルチサーバへの接続方法
Minecraftのクライアントを立ち上げて「マルチプレイ」ボタンを押下します。
その際に画面左下のバージョンを確認し、接続するサーバとバージョンがあっているか確認してください。
マルチサーバとクライアントのバージョンが異なると接続できないので注意してください。
マルチプレイで遊ぶ画面が表示されるので、「サーバ追加」ボタンを押下します。
サーバ情報の編集画面が表示されるので、「サーバ名」欄にサーバの名前を入力し、「サーバアドレス」欄にはサーバのIPアドレスまたは、FQDNを入力し「完了」ボタンを押下します。
追加したサーバを選択し「サーバに接続」ボタンを押下し、サーバにログインします。
無事ログイン処理が完了すると、いつもMinecraftの画面が表示されます。
Minecraftマルチサーバの停止
クライアントから正常に接続できることを確認できましたら、「stop」と入力することでMinecraftマルチサーバを停止させます。
stop [21:54:16] [Server thread/INFO]: Stopping the server [21:54:16] [Server thread/INFO]: Stopping server [21:54:16] [Server thread/INFO]: Saving players [21:54:16] [Server thread/INFO]: Saving worlds [21:54:16] [Server thread/INFO]: Saving chunks for level 'world'/overworld [21:54:16] [Server thread/INFO]: Saving chunks for level 'world'/the_nether [21:54:16] [Server thread/INFO]: Saving chunks for level 'world'/the_end [21:54:17] [Server Shutdown Thread/INFO]: Stopping server
Minecraftマルチサーバの自動起動設定
現状は、サーバを再起動するたびに手動で「minecraft_server.jar」を実行しなければいけないという、非常に面倒な状況なので「systemd」で管理しサーバが起動した際に自動起動できるようにするための仕掛けを作成していきます。
メンテナンス用スクリプトの作成
まずは「systemd」に登録するための事前準備として、minecraftマルチサーバの起動や停止を行えるスクリプトを作成していきます。(バックアップ機能も追加しました)
mc_script.shといった名前でメンテナンス用のスクリプトを作っていきます。
$ vi mc_script.sh
※こちらのサイトのスクリプトを参考にしてCentOS7用のスクリプトを作成しました。
変数説明
起動スクリプトで設定が必要な変数の説明です。
変数 | 設定内容 |
---|---|
USERNAME | minecraft_server実行ユーザ設定 |
SCNAME | screenに指定する名前を設定 |
MC_PATH | minecraft_serverがインストールされているディレクトリを設定 |
SERVICE | minecraft_server実行ファイルを設定 |
XMX | minecraft_server最大メモリ使用量を設定 |
XMS | minecraft_server初期メモリ使用量を設定 |
BK_DIR | バックアップしたデータを保管するディレクトリ |
BK_TIME | バックアップを取得した日時 |
FULL_BK_NAME | 完全バックアップで取得したデータにつける名前 |
HOUR_BK_NAME | 簡易バックアップで取得したデータにつける名前 |
BK_FILE | 簡易バックアップ対象データ |
BK_GEN | バックアップしたデータの保管数 |
「XMX」と「XMS」については、「minecraft_server」が使用するメモリの量となりますので、サーバのメモリと相談して設定するのですが、サーバに積んでいるメモリ全部割り当ててしまうと、OS(システム)が使用する分なくなってしまうので、この値を変更する場合は、かならずOSが使用するメモリ分は残るように設定指定ください。
※よくわからない場合は、とりあえず「1024M」のままにしておいて、動作が重いといった場合変更してみてください。
起動・停止スクリプト
変数部分に変更が必要な場合は、適宜変更願います。
[shell]
#!/bin/bash
#
# mincraft_server start/stop/backup script
#
# mincraft_server.jar 実行ユーザ
USERNAME=’minecraft’
# screen名
SCNAME=’minecraft’
# minecraft_serverディレクトリ
MC_PATH=’/opt/minecraft’
# 実行するminecraft_server.jar
SERVICE=’minecraft_server.jar’
# メモリ設定
XMX=’1024M’
XMS=’1024M’
## バックアップ用設定
# バックアップ格納ディレクトリ
BK_DIR="/home/$USERNAME/mc_backup"
# バックアップ取得時間
BK_TIME=`date +%Y%m%d-%H%M%S`
# 完全バックアップデータ名
FULL_BK_NAME="$BK_DIR/mc_backup_full_${BK_TIME}.tar.gz"
# 簡易パックアップデータ名
HOUR_BK_NAME="$BK_DIR/mc_backup_hourly_${BK_TIME}.tar"
# 簡易バックアップ対象データ
BK_FILE="$MC_PATH/world \
$MC_PATH/banned-ips.json \
$MC_PATH/banned-players.json \
$MC_PATH/ops.json \
$MC_PATH/server.properties \
$MC_PATH/usercache.json \
$MC_PATH/whitelist.json"
# バックアップデータ保存数
BK_GEN="3"
cd $MC_PATH
if [ ! -d $BK_DIR ]; then
mkdir $BK_DIR
fi
ME=`whoami`
if [ $ME != $USERNAME ]; then
echo "Please run the $USERNAME user."
exit
fi
start() {
if pgrep -u $USERNAME -f $SERVICE > /dev/null; then
echo "$SERVICE is already running!"
exit
fi
echo "Starting $SERVICE…"
screen -AmdS $SCNAME java -Xmx$XMX -Xms$XMS -jar $SERVICE nogui
}
stop() {
if pgrep -u $USERNAME -f $SERVICE > /dev/null; then
echo "Stopping $SERVICE"
screen -p 0 -S $SCNAME -X eval ‘stuff "say SERVER SHUTTING DOWN IN 10 SECONDS. Saving map…"\015’
screen -p 0 -S $SCNAME -X eval ‘stuff "save-all"\015’
sleep 10
screen -p 0 -S $SCNAME -X eval ‘stuff "stop"\015’
sleep 10
echo "Stopped minecraftserver"
exit
else
echo "$SERVICE is not running!"
exit
fi
screen -p 0 -S $SCNAME -X eval ‘stuff "say SERVER SHUTTING DOWN IN 10 SECONDS. "\015’
sleep 10
screen -p 0 -S $SCNAME -X eval ‘stuff "exit"\015’
}
h_backup() {
if pgrep -u $USERNAME -f $SERVICE > /dev/null; then
echo "Backup start minecraft data…"
screen -p 0 -S $SCNAME -X eval ‘stuff "save-all"\015’
sleep 10
screen -p 0 -S $SCNAME -X eval ‘stuff "save-off"\015’
tar cfv $HOUR_BK_NAME $BK_FILE
sleep 10
screen -p 0 -S $SCNAME -X eval ‘stuff "save-on"\015’
echo "minecraft_server backup compleate!"
gzip -f $HOUR_BK_NAME
find $BK_DIR -name "mc_backup_hourly_*.tar.gz" -type f -mtime +$BK_GEN -exec rm {} \;
else
echo "$SERVICE was not runnning."
fi
}
f_backup() {
if pgrep -u $USERNAME -f $SERVICE > /dev/null; then
echo "Full backup start minecraft data…"
screen -p 0 -S $SCNAME -X eval ‘stuff "say SERVER SHUTTING DOWN IN 10 SECONDS. Saving map…"\015’
sleep 10
screen -p 0 -S $SCNAME -X eval ‘stuff "save-all"\015’
screen -p 0 -S $SCNAME -X eval ‘stuff "stop"\015’
echo "Stopped minecraft_server"
echo "Full Backup start …"
tar cfvz $FULL_BK_NAME $MC_PATH
sleep 10
echo "Full Backup compleate!"
find $BK_DIR -name "mc_backup_full*.tar.gz" -type f -mtime +$BK_GEN -exec rm {} \;
echo "Starting $SERVICE…"
screen -AmdS $SCNAME java -Xmx$XMX -Xms$XMS -jar $SERVICE nogui
else
echo "$SERVICE was not runnning."
fi
}
status() {
if pgrep -u $USERNAME -f $SERVICE > /dev/null; then
echo "$SERVICE is already running!"
exit
else
echo "$SERVICE is not running!"
exit
fi
}
case "$1" in
start)
start
;;
stop)
stop
;;
h_backup)
h_backup
;;
f_backup)
f_backup
;;
status)
status
;;
*)
echo $"Usage: $0 {start|stop|h_backup|f_backup|status}"
esac
[/shell]
使用方法
スクリプトを実行する際に「start」「stop」「h_backup」「f_backup」「status」を引数として指定します。
mc_script.sh 引数
引数 | 動作 | 説明 |
---|---|---|
start | サーバ起動 | minecraftマルチサーバを起動します |
stop | サーバ停止 | minecraftマルチサーバを停止します |
h_backup | 簡易バックアップ | サーバを起動したままバックアップを実行するため、BK_FILEで指定したデータのみのバックアップとなります |
f_backup | フルバックアップ | サーバを停止後、マルチサーバが格納されているディレクトリ丸ごとバックアップをとります |
status | 起動状況確認 | マルチサーバの起動状況を確認します |
変更履歴
- 2015.04.27 minecraftユーザでのみ起動できるように変更
- 2016.03.07 変数追加
- 2017.08.11 起動・停止・バックスクリプトを統合
- 2017.08.17 バックアップ処理の不具合を修正
パーミッションの変更
スクリプトを作成したminecraftユーザのみが実行できるように、作成した起動スクリプトのパーミッションを変更します。
$ chmod 744 mc_script.sh
パーミッションの確認
スクリプトを作成したminecraftユーザのみが、実行できるようになっていることを確認します。
$ ls -la mc_script.sh -rwxr--r-- 1 minecraft minecraft 3867 Aug 11 22:52 mc_script.sh
スクリプトの動作確認
スクリプトの作成が終わったら、次に起動と停止の動作確認を行っていきます。
スクリプトを実行する際に「-x」オプションをつけて実行すると、スクリプトの実行状況が確認できるので、正常に動作しない場合の問題切り分けに役立ててください。
起動確認
スクリプトを実行して、正常にマルチサーバが起動するか確認していきます。
$ sh -x /opt/minecraft/mc_script.sh start
スクリプトを実行すると「screen」からスクリプトの「SCNAME」で設定した名前の仮想端末が起動して、そこでminecraftマルチサーバが起動されます。
screenの仮想端末が起動しているかは「screen -ls」で確認することができます。
$ screen -ls There is a screen on: 16801.minecraft (Detached) 1 Socket in /var/run/screen/S-minecraft.
「16801.minecraft (Detached)」と表示されているので、仮想端末が起動していることが分かります。
仮想端末へ接続(Attach)
「screen -r minecraft」と実行することで仮想端末に接続(Attach)することができるので、正常に起動しているかどうか確認してください。
$ screen -r minecraft [22:58:15] [Server thread/INFO]: Starting minecraft server version 1.12.1 [22:58:15] [Server thread/INFO]: Loading properties [22:58:15] [Server thread/INFO]: Default game type: SURVIVAL [22:58:15] [Server thread/INFO]: Generating keypair [22:58:15] [Server thread/INFO]: Starting Minecraft server on *:25565 [22:58:15] [Server thread/INFO]: Using epoll channel type [22:58:15] [Server thread/INFO]: Preparing level "world" [22:58:16] [Server thread/INFO]: Loaded 488 advancements [22:58:16] [Server thread/INFO]: Preparing start region for level 0 [22:58:17] [Server thread/INFO]: Preparing spawn area: 40% [22:58:17] [Server thread/INFO]: Done (1.853s)! For help, type "help" or "?"
「Done」と表示されて、コマンド入力待ちになっていれば正常に起動されていますので、minecraftのクライアントから接続できるか試してみてください。
仮想端末から抜ける(Detach)
正常に起動していることが確認できましたら、「Ctrl」+「a」を押下した後に「d」を押下して現在接続している「screen」から抜けて(Detach)ください。
停止確認
正常に起動することが確認できましたら、停止機能の動作確認を行っていきます。
$ sh -x ./mc_script.sh stop
正常に停止すると起動時に作成された仮想端末がなくなります。
$ screen -ls No Sockets found in /var/run/screen/S-minecraft.
「No Sockets found」と表示されているので、何も仮想端末が起動していないことが分かります。
systemd用設定ファイル作成
メンテナンス用スクリプトの動作確認が完了しましたら、次にsystemdでminecraftマルチサーバを管理する設定を行って自動起動を出来るように、systemd用の設定ファイルを「/etc/systemd/system」ディレクトリに作成していきます。
今回はファイル名を「minecraft.service」として作成していきます。
$ su - # vi /etc/systemd/system/minecraft.service
設定内容
[Unit] Description=Minecraft Server After=network.target local-fs.target [Service] Type=forking User=minecraft ExecStart=/opt/minecraft/mc_script.sh start ExecStop=/opt/minecraft/mc_script.sh stop [Install] WantedBy=multi-user.target
minecraftマルチサーバの実行ユーザを変更している場合は、「User=minecraft」の部分を適宜変更してください。
自動起動設定
「systemctl」コマンドを使用して、「minecraft.service」の自動起動設定を行います。
# systemctl enable minecraft ln -s '/etc/systemd/system/minecraft.service' '/etc/systemd/system/multi-user.target.wants/minecraft.service'
自動起動動作確認
systemdの設定が終わりましたら、サーバの再起動を行って自動的にminecraftサーバが起動してくることを確認してください。
# reboot
サーバの再起動後、minecraftクライアントから接続して、無事接続できればインストール作業はひとまず完了となります。
minecraftユーザ設定(任意の作業)
こちらの作業は特に必要はありませんが、メンテナンス用のスクリプトを実行する際に、毎回フルパスで入力するのが面倒であれば、以下の作業を行ってパスを通してあげてください。
minecarftユーザの環境設定ファイルである「/home/minecraft/.bash_profile」を編集し、「/opt/minecraft」へのパスを通しておきます。
# su - minecraft $ cd $ cp -p .bash_profile .bash_profile_yyyymmdd $ vi .bash_profile
編集内容
「PATH」の部分に「/opt/minecraft」を追加します。
編集前
PATH=$PATH:$HOME/.local/bin:$HOME/bin
編集後
PATH=$PATH:$HOME/.local/bin:$HOME/bin:/opt/minecraft
コメント
サーバーは立てたのですが、気に入らないワールドでしたのでワールドデータを消して再生成させたいと思うのですがどうすればよいですか?
VPSは初めてなのでどうぞよろしくお願いいたします。
なっとうまき さん
ご質問ありがとうございます。
今あるワールドを削除・再作成する方法は、ワールドデータが保存されているフォルダ(「world」フォルダ)の削除or名前変更の実施となります。
作業手順は下記のとおりとなります。
1.minecraftの停止
現在動作しているminecraftを停止します。
2.ワールドデータの削除
minecraftをインストールしたフォルダ内にworldというフォルダがあるので、「rm」コマンドを使ってworldフォルダを削除するか、「mv」コマンドで名前を変更します。
・フォルダ削除
rm -R world
・フォルダの名前変更
mv world world_yyyymmdd
※「server.properties」で使用するワールドフォルダを変更している場合はそのフォルダを削除するか名前を変更してください。
3.minecraft起動
minecraftを起動します。
以上で、古いワールドは削除されて、新しいワールドが作成されます。
作業で分からない点がありましたら、またご連絡ください。
現在512MBのプランでマインクラフトサーバーを立てて、友人3人でプレイをしているのですが、あまりにもタイムアウトが多いため2GBのプランへの変更を考えています。
そこで今現在使っているワールドデータを移行したいのですがそれは可能でしょうか?
どうぞよろしくお願いいたします。
なっとうまきさん
ご質問ありがとうございます。
>そこで今現在使っているワールドデータを移行したいのですがそれは可能でしょうか?
ワールドデータの移動は可能です。
手順の方を簡単に説明させていただきます。
2Gのサーバででminecraft_serverが動作する環境まで作成できましたら、512Mのサーバからworldフォルダを2Gのサーバにコピーすることで、ワールドデータの移行は行えます。
worldフォルダのコピーは「scp」等を使用すれば簡単に行えます。
【scpコマンド実行例】
下記の条件での「scp」実行例となります。
minecraftのインストールディレクトリが異なる場合は、適宜読み替えてください。
・2Gのサーバ側で実行
・minecraft_serverインストールユーザで実行
・minecraft_serverは停止状態
・minecraftインストールディレクトリは「/opt/minecraft」を想定
■既存のwoldディレクトリの名前を変更
$ mv /opt/minecraft/world /opt/minecraft/world_old
■512Mのサーバからworldディレクトリをコピー
$ scp -r -P SSHポート番号 ユーザ名@512MのサーバIP:/opt/minecraft/world /opt/minecraft
※ユーザ名は「/opt/minecraft」ディレクトリの所有者を指定してください。
※データ移行の前に念のため、512Mサーバworldディレクトリをバックアップしてください。
以上となります。
データを移行する際、ご存知かもしれませんが、現在さくらのVPSには無料お試し期間がありますので、まずは無料お試し期間を利用して動作確認を行ってみてください。
ちなみに、私も2Gのサーバでminecraftを動作させていますが、3名程度であれば特にタイムアウトなどは発生してません。
何かわからない点がありましたら、またご連絡ください。
mc_stop.shの記述は誤りがあるように思えます。
screen -p 0 -S minecraft -X eval ‘stuff “/say SERVER SHUTTING DOWN IN 10 SECONDS. Saving map…”