【AlmaLinux9】Java版Minecraftサーバのインストール方法

minecraftマルチサーバ(バニラ)
記事内に広告が含まれています。

さくらのVPS(AlmaLinux9)にjava版のMinecraftサーバ1.20.4をインストールしました。

その時の手順を元にMinecraftサーバのインストール方法を解説していきます。

VPSでMinecraftサーバを運用することについてのメリット・デメリット

今回はさくらのVPS 2G(AlmaLinux9)にJava版のMinecraftマルチサーバをインストールしています。(メモリが2Gのプランでは、おすすめのプレイ人数は1〜4人となっていました)

私が実際にVPS環境でMinecraftサーバを運用した際に感じた、メリットとデメリットについて解説しておきます。

VPSでMinecraftサーバを運用してみたいと考えている方に少しでも役立てば幸いです。

メリット

固定IPが貰える

自宅サーバでMinecraftサーバを運用する場合は、プロバイダから割り振られるIPアドレスが変更されてしまうのでIPが変更されるたびにユーザに連絡する必要がありますが、VPSの場合はIPアドレスが固定で割り当てられるので基本的にはIPアドレスが変更されることはありません。

また固定のIPアドレスがあると、ドメインを取得して独自ドメインでの運用も簡単に行うことが出来ます。

インターネットが繋がっていればどこからでもメンテナンスができる

サーバがフリーズしたり電源が落ちてしまった場合、自宅サーバの場合は家に居ない場合等で物理的にサーバにアクセスできない場合どうすることも出来ませんが、VPSはインターネットがつながる環境であれば簡単にサーバの再起動を行うことが出来ます。

デメリット

VPSを借りる費用が必要

当然ですがVPSを借りるためには料金が掛かりますので、自宅サーバの場合は必要ない運用コストが毎月発生します。

ただし、高性能のゲーミングPC等は思ったよりも電気料金が掛ってしまう場合もあるので、1月に掛かる電気料金を確認してみると良いですよ。

メモリが多く必要な場合は料金が高くなる

大人数で遊ぶことを想定する場合には、サーバで必要になるメモリのサイズも大きくなります。

それにともない、VPSの料金もどんどん高額になってしまうので、個人での大規模運用はあまり現実的では無いかもしれません。

作業内容

本手順で説明するインストール作業は下記の流れで行っていきます。

  • Minecraftサーバ用ポート(25565)の通信許可
  • tmuxインストール
  • OpenJDKインストール
  • minecraftサーバ動作用ユーザ作成
  • minecraftサーバインストール
  • 起動・停止スクリプト作成
  • 自動起動設定

インストール環境

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

  • OS: Almalinux: 9.3
  • Minecraftサーバ: 1.20.4
  • Java: OpenJDK 21
  • インストールディレクトリ: /home/mcadmin/minecraft/
  • minecraftサーバ動作用ユーザ: mcadmin

インストールディレクトリやminecraftサーバ動作用ユーザについては、どちらも特に決まりがあるわけではないので自由に変更してもらって構いませんが、その際は以後の手順の内容を適宜読み替えてください。

Minecraft用ポート(25565)の通信許可

Minecraftサーバで使用する25565番ポートの通信許可設定を行います。

$ sudo su -
# firewall-cmd --permanent --add-port=25565/tcp
success
# firewall-cmd --reload
success

tmuxインストール

今回はtmuxという端末多重化ソフトウェアを使い、作成されたセッション上でMinecraftサーバを動作させて行きます。

このツールを使うことで、ユーザーがログインしていない状態でもMinecraftサーバーをバックグラウンドで起動し続けることができるようになります。

# dnf -y install tmux

OpenJDKインストール

Minecraftサーバを動作させるために必要なJava(OpenJDK 21)をインストールします。

# dnf -y install java-21-openjdk

インストールされたjavaのバージョンを確認します。

# java -version
openjdk version "21.0.2" 2024-01-16 LTS
OpenJDK Runtime Environment (Red_Hat-21.0.2.0.13-1) (build 21.0.2+13-LTS)
OpenJDK 64-Bit Server VM (Red_Hat-21.0.2.0.13-1) (build 21.0.2+13-LTS, mixed mode, sharing)

Minecraftサーバ動作用ユーザ作成

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

今回は「mcadmin」というユーザを作成していきます。

# adduser mcadmin
# passwd mcadmin

Minecraftサーバインストール

Minecraftサーバのインストールを以下の流れで行っていきます。

  • インストール用ディレクトリ作成
  • Minecraftサーバダウンロード
  • EULAへの同意

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

インストール用ディレクトリとして、「/home/mcadmin/minecraft」ディレクトリを作成します。

# su - mcadmin
$ mkdir minecraft

Minecraftサーバのダウンロード

Minecraftサーバのダウンロードはminecraftサーバ動作用のユーザで、インストール用に作成したディレクトリに行います。

$ cd minecraft

ダウンロードURLのコピー

Minecraftサーバのダウンロードページで、jarファイルをダウンロードするためのURLをコピーします。

ダウンロードサイトURL: https://www.minecraft.net/ja-jp/download/server

ブラウザがChromeの場合は、minecraft_server.jarをダウンロードするリンクを右クリックして「リンクのアドレスをコピー」を選択することで、ダウンロードURLをコピーすることが出来ます。

Edgeの場合は「リンクのコピー」という名前になります。

ダウンロード

curlコマンドでjarファイルをダウンロードを行った後に、ダウンロードしてきたファイルの名前をどのバージョンのMinecraftサーバなのかを分かるように変更しておきます。

$ curl -LO ダウンロード用URLをペースト
$ mv server.jar minecraft_server.バージョン.jar

下記は1.20.4.jarファイルをダウンロードした際の作業ログになります。

$ curl -LO https://piston-data.mojang.com/v1/objects/8dd1a28015f51b1803213892b50b7b4fc76e594d/server.jar
$ mv server.jar minecraft_server.1.20.4.jar

※-LOの「O」はアルファベットの大文字「O」で、数字ではありませんので注意してください。

EULA(End-User License Agreement)への同意

Minecraftサーバを動作させるにはeula.txtにてEULA(使用許諾契約)に同意する必要がありますが、初回起動時には「eula.txt」存在しないため下記の様に起動が失敗してしまいます。

$ java -Xmx1024M -Xms1024M -jar minecraft_server.1.20.4.jar nogui
Unpacking 1.20.4/server-1.20.4.jar (versions:1.20.4) to versions/1.20.4/server-1.20.4.jar
Unpacking com/github/oshi/oshi-core/6.4.5/oshi-core-6.4.5.jar (libraries:com.github.oshi:oshi-core:6.4.5) to libraries/com/github/oshi/oshi-core/6.4.5/oshi-core-6.4.5.jar

#####  中略  #####

[22:41:51] [ServerMain/WARN]: Failed to load eula.txt
[22:41:51] [ServerMain/INFO]: You need to agree to the EULA in order to run the server. Go to eula.txt for more info.

一度起動させると「eula.txt」自動的にが作成されますので確認してください。

$ ls -l
total 48020
-rw-r--r-- 1 mcadmin mcadmin      158 Mar  1 22:41 eula.txt
drwxr-xr-x 8 mcadmin mcadmin     4096 Mar  1 22:41 libraries
drwxr-xr-x 2 mcadmin mcadmin     4096 Mar  1 22:41 logs
-rw-r--r-- 1 mcadmin mcadmin 49150256 Mar  1 22:41 minecraft_server.1.20.4.jar
-rw-r--r-- 1 mcadmin mcadmin     1303 Mar  1 22:41 server.properties
drwxr-xr-x 3 mcadmin mcadmin     4096 Mar  1 22:41 versions

作成された「eula.txt」の「eula=false」を「eula=true」に変更してEULAに同意します。

$ vi eula.txt

編集内容は下記のとおりです。

eula=false   #変更前 
   ↓
eula=true    #変更後 「eula=true」に変更  

動作確認

再度minecraftサーバを起動させてください。

$ java -Xmx1024M -Xms1024M -jar minecraft_server.1.20.4.jar nogui
Starting net.minecraft.server.Main

###  省略  ###

[22:44:51] [Worker-Main-3/INFO]: Preparing spawn area: 90%
[22:44:51] [Worker-Main-2/INFO]: Preparing spawn area: 90%
[22:44:52] [Worker-Main-3/INFO]: Preparing spawn area: 91%
[22:44:52] [Server thread/INFO]: Time elapsed: 37398 ms
[22:44:52] [Server thread/INFO]: Done (45.568s)! For help, type "help"

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

Minecraftのクライアントからサーバに接続できるかの確認を行ってください。

注意する点としては、接続するクライアントとサーバのバージョンを一致させるようにしてください。

サーバとクライアントのバージョンが一致していることを確認して、マルチプレイのボタンを押下します。

「マルチプレイで遊ぶ」画面が表示されるので、「サーバを追加」ボタンを押下します。

「サーバー情報の編集」画面が表示されるので、「サーバー名」に接続するサーバがすぐに分かるような名前を設定し、「サーバーアドレス」にはサーバのIPアドレスを入力し、「完了」ボタンを押下します。

追加したサーバが表示されるので、サーバを選択した後に「サーバに接続」ボタンを押下します。

サーバに接続してMinecraftが動作することを確認してください。

問題なく接続できるようでしたら、stopコマンドを実行しMinecraftサーバを停止させます。

[22:53:39] [Server thread/INFO]: tamohiko joined the game
[22:55:01] [Server thread/INFO]: tamohiko lost connection: Disconnected
[22:55:01] [Server thread/INFO]: tamohiko left the game
stop    ### stopコマンドを入力  
[22:55:10] [Server thread/INFO]: Stopping the server
[22:55:10] [Server thread/INFO]: Stopping server
[22:55:10] [Server thread/INFO]: Saving players
[22:55:10] [Server thread/INFO]: Saving worlds
[22:55:11] [Server thread/INFO]: Saving chunks for level 'ServerLevel[world]'/minecraft:overworld
[22:55:14] [Server thread/INFO]: Saving chunks for level 'ServerLevel[world]'/minecraft:the_nether
[22:55:14] [Server thread/INFO]: Saving chunks for level 'ServerLevel[world]'/minecraft:the_end
[22:55:14] [Server thread/INFO]: ThreadedAnvilChunkStorage (world): All chunks are saved
[22:55:14] [Server thread/INFO]: ThreadedAnvilChunkStorage (DIM-1): All chunks are saved
[22:55:14] [Server thread/INFO]: ThreadedAnvilChunkStorage (DIM1): All chunks are saved
[22:55:14] [Server thread/INFO]: ThreadedAnvilChunkStorage: All dimensions are saved

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

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

$ vi mc_script.sh

作成するスクリプト

作成するスクリプトの内容は以下のとおりです。

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

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

# session名
SESSION_NAME='minecraft'

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

# 実行するminecraft_server.jar
SERVICE="$MC_PATH/minecraft_server.1.20.4.jar"

# メモリ設定
XMX='1024M'
XMS='1024M'

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 起動状態確認処理
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)
        echo "Minecraft Server Start"
        start
        ;;
    stop)
        echo "Minecraft Server Stop"
        stop
        ;;
    status)
        echo "Minecraft Server Check Status"
        status
        ;;
    *)
        echo "Invalid option"
        echo  $"Usage: $0 {start|stop|status}"
esac

変数の説明

スクリプト内で設定している変数の説明です。

必要に応じて設定内容を変更してください。

変数 説明
USERNAME Minecraftサーバ動作用ユーザ
SESSION_NAME tmuxで作成するセッション名
MC_PATH Minecraftサーバインストールディレクトリ
SERVICE 実行するminecraft_server.バージョン.jarファイル
XMX 最大メモリ使用量
XMS 初期メモリ使用量(XMXを超えない値)

パーミッションの設定

作成したスクリプトのパーミッションを744に設定します。

$ chmod 744 mc_script.sh

スクリプト使用方法

作成したスクリプトはMinecraftサーバ起動用のユーザで行う必要があり、下記のように引数を指定して実行します。

  • 起動 /home/mcadmin/minecraft/mc_script.sh start
  • 停止 /home/mcadmin/minecraft/mc_script.sh stop
  • 起動状態確認 /home/mcadmin/minecraft/mc_script.sh status

Minecraftサーバの起動

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

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

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

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

$ tmux ls
minecraft: 1 windows (created Fri Mar  1 23:03:56 2024)

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

$ tmux a -t minecraft

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

[23:02:21] [Worker-Main-2/INFO]: Preparing spawn area: 0%
[23:02:21] [Worker-Main-2/INFO]: Preparing spawn area: 0%
[23:02:21] [Worker-Main-2/INFO]: Preparing spawn area: 9%
[23:02:22] [Worker-Main-1/INFO]: Preparing spawn area: 67%
[23:02:22] [Server thread/INFO]: Time elapsed: 8304 ms
[23:02:22] [Server thread/INFO]: Done (13.471s)! For help, type "help"
tmuxセッションからの切断(デタッチ)

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

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

[detached (from session minecraft)]
$

Minecraftサーバの停止

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

$ /home/mcadmin/minecraft/mc_script.sh stop

これでMinecraftサーバが停止し、tmuxで作成したセッションも自動的に削除されます。

$ tmux ls
no server running on /tmp/tmux-1002/default

起動状態確認

引数としてstatusを指定することで、Minecraftサーバの起動状態を確認することが出来ます。

$ /home/mcadmin/minecraft/mc_script.sh status
Minecraft Server Check Status
/home/mcadmin/minecraft/minecraft_server.1.20.4.jar is already running!

Minecraftサーバが起動していない場合は「not running!」と表示されます。

$ /home/mcadmin/minecraft/mc_script.sh status
Minecraft Server Check Status
/home/mcadmin/minecraft/minecraft_server.1.20.4.jar is not running!

スクリプト動作確認

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

スクリプトが正常に動作しない場合は、sh -xをつけてスクリプトを実行すること実行内容を表示させることが出来るので、どこで失敗しているかの判別に役立つと思います。

$ sh -x /home/mcadmin/minecraft/mc_script.sh start
+ USERNAME=mcadmin
+ SESSION_NAME=minecraft
+ MC_PATH=/home/mcadmin/minecraft
+ SERVICE=/home/mcadmin/minecraft/minecraft_server.1.20.4.jar
#####   以下省略   #####

自動起動設定

スクリプトの動作に問題がなければ、Minecraftサーバを自動起動させるためにsystemd登録用の設定ファイルを作成します。

mcadminユーザからrootユーザに変更して作業を行っていきます。

$ exit
# vi /etc/systemd/system/minecraft.service

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

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

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

[Install]
WantedBy=multi-user.target

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

# systemctl enable minecraft
Created symlink /etc/systemd/system/multi-user.target.wants/minecraft.service → /etc/systemd/system/minecraft.service.

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

# reboot

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

あとは、server.propertiesでお好みの設定を行ってください。

コメント

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