【Ubuntu】Java Edition Minecraftマルチサーバインストール

minecraft

「Ubuntu Server 20.04」にJava Editionのマルチ用Minecraftサーバをインストールする方法です。

作業工程

Minecraftサーバのインストールは以下の手順で行っていきます。

  • OpenJDK(java)インストール
  • Minecraft用ポート(25565/tcp)開放
  • minecraft動作用ユーザ作成
  • minecraftサーバインストール
  • 起動・停止・バックアップスクリプト作成
  • 自動起動設定

インストール環境

今回は下記の内容でインストールをしています。

  • OS Ubuntu Server 20.04 LTS
  • Minecraftサーバのバージョン 1.17.1
  • minecraft動作用ユーザ mcadmin
  • インストールディレクトリ /opt/minecraft
  • 仮想端末tmux上で動作

minecraft動作用のユーザやインストールするために作成するディレクトリ、は好きなもの変更可能です。

変更した場合はこれから説明する手順を適宜読み替えてください。

OpenJDK(java)インストール

Minecraftのバージョン1.17からはJava16で開発されているので、openjdk-16をインストールします。

$ sudo apt update
$ sudo apt install openjdk-16-jdk-headless 

Minecraft用ポート(25565/tcp)開放

ufwコマンドを使用してMinecraftサーバで使用する25565ポートを開放します。

$ sudo ufw allow 25565/tcp
$ sudo ufw reload

Minecraft動作用ユーザ作成

Minecraftサーバを動作させるためのユーザを作成します。

$ sudo adduser mcadmin
Adding user `mcadmin' ...
Adding new group `mcadmin' (1001) ...
Adding new user `mcadmin' (1001) with group `mcadmin' ...
Creating home directory `/home/mcadmin' ...
Copying files from `/etc/skel' ...
New password:       # パスワードを設定
Retype new password:  # パスワードを再入力
passwd: password updated successfully
Changing the user information for mcadmin
Enter the new value, or press ENTER for the default
        Full Name []:   #「Enter」キーを押下
        Room Number []:  #「Enter」キーを押下
        Work Phone []:   #「Enter」キーを押下
        Home Phone []:    #「Enter」キーを押下
        Other []:         #「Enter」キーを押下
Is the information correct? [Y/n] y   #「y」を入力

minecraftサーバインストール

minecraftサーバをインストールするためのディレクトリを作成し、そこにjarファイルのダウンロードを行っていきます。

インストール用ディレクトリの作成

インストールするためのディレクトリを作成し、ディレクトリの所有者をMinecraftサーバ動作用に作成したユーザに設定します。

$ sudo mkdir /opt/minecraft
$ sudo chown mcadmin:mcadmin /opt/minecraft

server.jarダウンロード

ここからの作業はMinecraft用のユーザで行っていきます

$ su - mcadmin

minecraftサーバのjarファイルをダウンロードします。

ダウンロード用のURLは下記ページで確認できます。
https://www.minecraft.net/ja-jp/download/server/

webブラウザがchromeの場合は、赤枠部分を右クリックして「リンクのアドレスをコピー」でEdgeの場合は「リンクのコピー」でURLをコピーすることが出来ます。

インストール用のディレクトリに移動し、curlコマンドでダウンロードを行います。

$ cd /opt/minecraft
$ curl -L -O https://launcher.mojang.com/v1/objects/a16d67e5807f57fc4e550299cf20226194497dc2/server.jar

server.jarのダウンロードURLはバージョンによって異なりますので注意してください。

server.jarファイルの名前変更

ダウンロードしてきたserver.jarファイルの名前を、どのバージョンの物なのかわかるように名前を変更しておきます。

$ mv server.jar server_1.17.1.jar

こんな感じにファイル名にバージョンをつけておけば、どのバージョンのjarファイルなのかが一目でわかりますね。

EULA(使用許諾契約)同意

ダウンロードしたばかりのserver.jarを実行すると、eula.txtが無いためエラーが発生します。

$ java -Xms1024M -Xmx1024M -jar server_1.17.1.jar nogui
[02:03:27] [main/ERROR]: Failed to load properties from file: server.properties
[02:03:27] [main/WARN]: Failed to load eula.txt
[02:03:27] [main/INFO]: You need to agree to the EULA in order to run the server. Go to eula.txt for more info.

一度server.jarを起動するとeula.txtファイルが作成されるので、編集してEULA(使用許諾契約)に同意します。

$ vi eula.txt

eula=falseの部分をteula=trueに変更します。

変更前 eula=false
変更後 eula=true

動作確認

再度server.jarを起動して正常に起動できるか確認を行います。

$ java -Xms1024M -Xmx1024M -jar server_1.17.1.jar nogui

#####  書略  #####

[02:06:51] [Worker-Main-2/INFO]: Preparing spawn area: 78%
[02:06:52] [Worker-Main-2/INFO]: Preparing spawn area: 79%
[02:06:52] [Worker-Main-2/INFO]: Preparing spawn area: 83%
[02:06:53] [Worker-Main-2/INFO]: Preparing spawn area: 92%
[02:06:53] [Worker-Main-2/INFO]: Preparing spawn area: 92%
[02:06:53] [Server thread/INFO]: Time elapsed: 31223 ms
[02:06:53] [Server thread/INFO]: Done (38.831s)! For help, type "help"

初回起動時はワールドが作成されるので起動完了まで少し時間が掛かります。

無事起動するとDoneと表示されます。

クライアントからの接続確認

サーバ側の起動が確認できたら、Minecraftのクライアントから接続できるか確認してみてください。

サーバ側とクライアント側のバージョンをあわせることも忘れずに。

minecraftサーバの停止

クライアントからの接続確認が終わったらstopコマンド実行しminecraftサーバを一旦停止させます。

stop

起動・停止・バックアップスクリプト作成

Minecraftサーバの起動・停止・バックアップを行えるスクリプトを作成します。

$ vi mc_script.sh

作成するスクリプトで設定する変数についての説明です。

変数 説明
USERNAME Minecraftサーバ動作用ユーザ
SESSION_NAME tmuxで作成するセッション名
MC_PATH Minecraftサーバインストールディレクトリ
SERVICE 実行するserver.jarファイル
XMX 最大メモリ使用量
XMS 初期メモリ使用量(XMXを超えない値)
BK_DIR バックアップデータ保存ディレクトリ
BK_TIME バックアップ取得日時
FULL_BK_NAME 完全バックアップデータ名
SIMPLE_BK_NAME 簡易バックアップデータ名
BK_FILE 簡易バックアップ対象データ
BK_GEN バックアップデータ保存する日数

実際に作成するスクリプトは下記の内容となります。

#!/bin/bash
#
# mincraft_server start/stop/backup/status script
#

# mincraft_server.jar 実行ユーザ
USERNAME='mcadmin'

# session名
SESSION_NAME='minecraft'

# minecraft_serverディレクトリ
MC_PATH='/opt/minecraft'

# 実行するminecraft_server.jar
SERVICE='server_1.17.1.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_full_backup_${BK_TIME}.tar.gz"

# 簡易パックアップデータ名
SIMPLE_BK_NAME="$BK_DIR/mc_simple_backup_${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

# Minecraft 開始処理
start() {
  if pgrep -u $USERNAME -f $SERVICE > /dev/null; then
    echo "$SERVICE is already running!"
  else
    echo "Starting $SERVICE..."
    tmux new-session -d -s $SESSION_NAME
    tmux send-keys -t $SESSION_NAME:0 "java -Xmx$XMX -Xms$XMS -jar $SERVICE nogui" C-m
  fi
}

# Minecraft 停止処理
stop() {
  if pgrep -u $USERNAME -f $SERVICE > /dev/null; then
    echo "Stopping $SERVICE"
    tmux send-keys -t $SESSION_NAME:0 "say SERVER SHUTTING DOWN IN 10 SECONDS. Saving map..." C-m
    tmux send-keys -t $SESSION_NAME:0 "save-all" C-m
     sleep 10
    tmux send-keys -t $SESSION_NAME:0 "stop" C-m
    sleep 10
    echo "Stopped minecraftserver"
  else
    echo "$SERVICE is not running!"
    exit
  fi

  while :
   do
     if
      pgrep -u $USERNAME -f $SERVICE > /dev/null; then
      echo "Stopping $SERVICE"
      sleep 10
    else
      tmux kill-session -t $SESSION_NAME
      echo "Stoped $SERVICE"
      break
    fi
  done
}

# Minecraft 簡易バックアップ処理
s_backup() {
  if pgrep -u $USERNAME -f $SERVICE > /dev/null; then
    echo "Backup start minecraft data..."
    tmux send-keys -t $SESSION_NAME:0 "save-all" C-m
    sleep 10
    tmux send-keys -t $SESSION_NAME:0 "save-off" C-m
    tar cfv $SIMPLE_BK_NAME $BK_FILE
    sleep 10
    tmux send-keys -t $SESSION_NAME:0 "save-on" C-m
    echo "minecraft_server backup compleate!"
    gzip -f $SIMPLE_BK_NAME
    find $BK_DIR -name "mc_simple_backup_*.tar.gz" -type f -mtime +$BK_GEN -exec rm {} \;
  else
    echo "Backup start ..."
    gzip -f $HOUR_BK_NAME
    find $BK_DIR -name "mc_simple_backup_*.tar.gz" -type f -mtime +$BK_GEN -exec rm {} \;
  fi
}

# Minecraft 完全バックアップ処理
f_backup() {
  if pgrep -u $USERNAME -f $SERVICE > /dev/null; then
    echo "Full backup start minecraft data..."
    tmux send-keys -t $SESSION_NAME:0 "say SERVER SHUTTING DOWN IN 10 SECONDS. Saving map..." C-m
    sleep 10
    tmux send-keys -t $SESSION_NAME:0 "save-all" C-m
    tmux send-keys -t $SESSION_NAME:0 "stop" C-m
    while :
      do
        if
          pgrep -u $USERNAME -f $SERVICE > /dev/null; then
          echo "Stopping $SERVICE"
           sleep 10
        else
          echo "Stopped minecraft_server"
          echo "Full Backup start ..."
          tar cfvz $FULL_BK_NAME $MC_PATH
          echo "Full Backup compleate!"
          find $BK_DIR -name "mc_full_backup_*.tar.gz" -type f -mtime +$BK_GEN -exec rm {} \;
          break
        fi
      done
    echo "Starting $SERVICE..."
    tmux send-keys -t $SESSION_NAME:0 "java -Xmx$XMX -Xms$XMS -jar $SERVICE nogui" C-m
  else
    echo "Full Backup start ..."
    tar cfvz $FULL_BK_NAME $MC_PATH
    echo "Full Backup compleate!"
    find $BK_DIR -name "mc_full_backup_*.tar.gz" -type f -mtime +$BK_GEN -exec rm {} \;
  fi
}

# Minecraft 起動状態確認処理
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
    ;;
  s_backup)
    s_backup
    ;;
  f_backup)
    f_backup
    ;;
  status)
    status
    ;;
  *)
    echo  $"Usage: $0 {start|stop|s_backup|f_backup|status}"
esac

実行権限の付与

作成したスクリプトに実行権限を与えてください。

$ chmod 744 mc_script.sh

スクリプト使用方法

スクリプトの実行はMinecraftサーバ用ユーザ(mcadmin)で行う必要があります。

  • 起動 /opt/minecraft/mc_script.sh start
  • 停止 /opt/minecraft/mc_script.sh stop
  • 簡易バックアップ /opt/minecraft/mc_script.sh s_backup
  • 完全バックアップ /opt/minecraft/mc_script.sh f_backup
  • 起動状態確認 /opt/minecraft/mc_script.sh status

Minecraftサーバの起動

引数としてstartを指定することで、SESSION_NAMEで指定した名前のセッションがtmuxで作成され、その中でMinecraftサーバが実行されます。

$ /opt/minecraft/mc_script.sh start
tmuxセッションへの接続(アタッチ)

tmuxのセッションに接続(アタッチ)する場合は、Minecraftサーバ用のユーザで下記コマンドを実行します。

tmux ls コマンドで起動しているセッションを表示させます。

$ tmux ls
minecraft: 1 windows (created Sat Jul 31 01:51:07 2021)

minecraftサーバ起動しているセッションを指定して接続します。

$ tmux a -t minecraft

Minecraftサーバが動作している仮想端末に接続することが出来ます。

[01:51:45] [Worker-Main-2/INFO]: Preparing spawn area: 80%
[01:51:45] [Worker-Main-2/INFO]: Preparing spawn area: 80%
[01:51:45] [Worker-Main-2/INFO]: Preparing spawn area: 80%
[01:51:46] [Worker-Main-2/INFO]: Preparing spawn area: 83%
[01:51:46] [Server thread/INFO]: Time elapsed: 17151 ms
[01:51:46] [Server thread/INFO]: Done (17.394s)! For help, type "help"
tmuxセッションからの切断(デタッチ)

セッションから抜けたい(デタッチ)場合は「Ctrl」+「b」キーを押下した後に「d」キーを押下します。

セッションから抜けることができたら、コンソールには[detached]と表示されます。

[detached (from session minecraft)]

Minecraftサーバの停止

引数としてstopを指定することで、Mincraftサーバを停止させることができます。

$ /opt/minecraft/mc_script.sh stop

tmuxで作成したセッションも自動的に削除されます。

簡易バックアップ

引数としてs_backupを指定することで、Minecraftサーバを停止させずに、BK_FILEで指定したデータをBK_DIRで指定したディレクトリにバックアップします。

バックアップデータはSIMPLE_BK_NAMEで指定された名前で保存されます。

$ /opt/minecraft/mc_script.sh s_backup

バックアップを行う際はminecraftサーバが起動している必要があります。

完全バックアップ

引数としてf_backupを指定することで、Minecraftサーバを一旦停止させて、インストールディレクトリ丸ごとBK_DIRで指定したディレクトリにバックアップします。

バックアップデータはFULL_BK_NAMEで指定された名前で保存されます。

$ /opt/minecraft/mc_script.sh f_backup

バックアップを行う際はminecraftサーバが起動している必要があります。

起動状態確認

引数としてstatusを指定することで、Minecraftサーバを一旦停止させて、インストールディレクトリ丸ごとバックアップします。

$ /opt/minecraft/mc_script.sh status

スクリプト動作確認

スクリプトの作成が終わったら動作確認をかならず行ってください。

自動起動設定

ここからは、sudoを使えるユーザで作業します。

systemdに登録するための設定ファイルを作成します。

$ su - sudoが出来るユーザ
$ sudo vi /etc/systemd/system/minecraft.service

ファイルの内容は下記の通りとなります。

[Unit]
Description=Minecraft Server
After=network.target local-fs.target

[Service]
Type=forking
User=mcadmin
ExecStart=/opt/minecraft/mc_script.sh start
ExecStop=/opt/minecraft/mc_script.sh stop

[Install]
WantedBy=multi-user.target

systemd登録用ファイルが作成できたら自動起動出来るように登録を行います。

$ sudo systemctl enable minecraft

登録が完了しましたら、サーバを再起動して自動起動されるか確認してください。

$ sudo reboot

サーバの再起動後に自動的にminecraftサーバが起動することを確認できましたら作業は完了となります。

コメント

タイトルとURLをコピーしました