さくらのVPS(AlmaLinux9)にjava版のMinecraftサーバ1.20.4をインストールしました。
その時の手順を元にMinecraftサーバのインストール方法を解説していきます。
VPSでMinecraftサーバを運用することについてのメリット・デメリット
今回はさくらのVPS 2G
私が実際に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でお好みの設定を行ってください。
コメント