「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サーバが起動することを確認できましたら作業は完了となります。
コメント