1
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

UbuntuでMinecraftサーバーを構築してみた

Posted at

UbuntuでMinecraftサーバーを構築してみた

TL;DR

  • minecraftを実行できるようにする
  • minecraftを自動再起動ーバックアップを作る
  • プラグインを導入してみる

対象

  • こんなページを見に来るような人
  • 筆者当時高校2年生と同程度の知識の人
  • Windowsに飽きた人
  • 身内でminecraftをやりたい人

セットアップ

筆者環境を以下に示します。

  • CPU: Intel(R) Core(TM) i5-10400 CPU @ 2.90GHz, 2900 MHz
  • LAN-board: Gigabyte Onboard Ethernet
  • HDD: WDC WD10EZRZ-22H
  • RAM: CORSAIR 4GB 2

Javaのインストール

Minecraftはそのバージョンによって要求されるJavaのバージョンが異なります。例えば、1.18以降ではJava17以降が必須とされ、それ以前ではJava-8から16であれば動く、などです。せっかくなので複数バージョンのJavaをインストールして共存させてみましょう。

javaインストール
sudo apt search jre #現存するjreの検索
sudo apt install openjdk-8-jdk openjdk-11-jdk openjdk-13-jdk openjdk-16-jdk openjdk-17-jre # 今回は全部入れましたが、必要なものを選択してください。
sudo update-alternatives --config java # Javaのバージョンを切り替える。
echo export JAVA_HOME=$(readlink -f /usr/bin/javac | sed "s:/bin/javac::") >> ~/.zshrc #JAVA_HOMEの設定
echo export PATH=$PATH:$JAVA_HOME/bin >> ~/.zshrc # JAVA_HOMEのPATHへの追加
echo source ~/.bashrc >> ~/.zshrc 

Screenのインストール

ScreenはTmuxの亜種みたいなものです。Tmuxの方がメジャーで、多少操作が簡単なようなのですが、Screenはキャプションが付けられたり便利(と私は思っています)です。 比較は以下を参照してください。
tmuxとscreenのそれぞれの優れてる点
インストール自体はとても簡単で、

screenインストール
sudo apt install screen

これだけです。なぜScreenのインストールをわざわざ1項目作ったかというと、Screenがデフォで使いにく過ぎるためです。
ということで、~/.screenrcを設定していきます。

~/.screenrc
#コマンド履歴をスクロールして確認できるようにする
info linux ti@:te@
info xterm ti@:te@
info xterm-color ti@:te@
defscrollback 8192 #履歴の表示行数

# logの保存 logfileに保存されます。
logfile '/var/log/screen/%H.%Y%m%d-%02c:%s-%n.%t.log'
deflog flush secs
deflog on
verbose on
logtstamp on
logtstamp string "\n-- SCREEN [%Y/%m/%d %02c:%s] %n:%t --\n"

# 終了時にkで削除、rで再実行できるようにする
zombie kr # k:destroy window r:resurrect window

# ハードコピーの保存ディレクトリ
hardcopydir 'screen/hardcopy'
hardcopy_append on
# ハードコピーのバッファーファイル
bufferfile 'screen/screen-exchange'
# ビープ音を鳴らせるようにする
vbell on

# 他のWindowへのフォーカスの切り替え(Vim式キーバインド)
bind ^J eval 'focus down' 'command -c cfocus'
bind ^K eval 'focus up'   'command -c cfocus'
bind -c cfocus ^J eval 'focus down'   'command -c cfocus'
bind -c cfocus ^K eval 'focus up'     'command -c cfocus'
bind -c cfocus ^T eval 'focus top'    'command -c cfocus'
bind -c cfocus ^B eval 'focus bottom' 'command -c cfocus'


# 背景色の削除設定を有効にする
defbce on

# 太字には明るい色を使う。
attrcolor b '.I'

# TERM変数に`xterm'を設定することで、様々な環境に対応できます
term xterm

# 256色を有効にする
termcapinfo xterm 'Co#256:AB=\E[48;5;%dm:AF=\E[38;5;%dm'

# 再装着時に端子幅をリサイズさせない
termcapinfo xterm 'is=\E[r\E[m\E[2J\E[H\E[?7h\E[?1;4;6l'

# caption/hardstatusに合わせてwindowlistの形式を変更する
windowlist title  '%{u .g}Num Flags Title%=[0-9] select the number [movement] j,C-n:Down k,C-p:Up (C-)f:PageDown (C-)b:PageUp'
windowlist string '%{.g}%3n %{.y}%f%09=%{dg} %t %='

caption always '%?%F%{= gW}%:%{= Kk}%?%2n%f%07=%t%='
hardstatus alwayslastline '%m/%d %02c:%s %{= .g}%H%{-} %L=%-w%45L>%{=u g.}%n %t%{-}%+w %-17<%=%{= .y}(%l)'

minecraft serverのインストール(本題)

本体のインストール

インストール
sudo groupadd mc_admin
sudo usermod -G mc_admin [操作ユーザー]

SERVER='[サーバーの配置パス]'
SERVER_NAME='[サーバー名]'

mkdir ${SERVER}
sudo chgrp -R mc_admin ${SERVER}
sudo chmod -R 770 ${SERVER}
cd ${SERVER}

mkdir ${SERVER}/${SERVER_NAME}
sudo chgrp -R mc_admin ${SERVER}/${SERVER_NAME}
sudo chmod -R 770 ${SERVER}/${SERVER_NAME}
cd ${SERVER}/${SERVER_NAME}



curl -O https://hub.spigotmc.org/jenkins/job/BuildTools/lastSuccessfulBuild/artifact/target/BuildTools.jar
sudo ufw allow 25565/tcp
java -jar BuildTools --rev [バージョン]
# 1.18をインストールする場合のみjavaは17が指定されています。
# 最新バージョンをインストールしたい場合はlatestを指定してください。
java -jar spigot.[バージョン].jar
vim ./eula.txt # eula=trueにしてください

実行環境の整備

Start.shなどは、Minecraftサーバをscreenとcronでプラグインを使わずに自動再起動する | 純規の暇人趣味ブログをコピペしていただけると確実です。せっかくLinux-basedでやるので、全部autoにしちゃいましょう。
参考までに私のstart.shとrestart.shを配置しておきます。

start.sh
#!/bin/bash -x
DIR=`dirname $0`
JRE='/usr/lib/jvm/java-17-openjdk-amd64/bin/java'
JAR=spigot-1.18.1.jar
RAM=2G
THREAD=4

SCREEN_NAME='lobby'
cd ${DIR}
screen -UAmdS ${SCREEN_NAME} ${JRE} -Xms${RAM} -Xmx${RAM} -jar ${DIR}/${JAR} -nogui
restart.sh
#!/bin/bash -x
DIR=`dirname $0`
JRE=`which java`
RUNNER=start.sh
Wait=30
SCREEN_NAME='lobby'
BK_DIR=${DIR}/../backup/${SCREEN_NAME}/`date "+%Y%m%d%H"`

cd ${DIR}
screen -p 0 -S ${SCREEN_NAME} -X eval 'stuff "say '${Wait}'秒後にサーバーを定時 再起動をはじめます\015"'
screen -p 0 -S ${SCREEN_NAME} -X eval 'stuff "say 現在の作業を一時停止できる状態にしてください\015"'

sleep ${Wait}
screen -p 0 -S ${SCREEN_NAME} -X eval 'stuff "stop\015"'

mkdir ${BK_DIR}
mkdir ${BK_DIR}/world
mkdir ${BK_DIR}/world_nether/
mkdir ${BK_DIR}/world_the_end/

cp -r ${DIR}/world/ ${BK_DIR}/
cp -r ${DIR}/world_nether/ ${BK_DIR}/
cp -r ${DIR}/world_the_end/ ${BK_DIR}/

while [ -n "$(screen -list | grep -o "${SCREEN_NAME}")" ]
do
  screen -p 0 -S ${SCREEN_NAME} -X 'stuff"k"'
  sleep 1
done

${DIR}/${RUNNER}

Floodgate&GeyserMCの導入

流れとしてはGeyserMCを用いてBE勢力のパケットを変換し、Floodgateを用いてBE勢力を認証します。

server/plugins
wget https://ci.opencollab.dev/job/GeyserMC/job/Geyser/job/master/lastSuccessfulBuild/artifact/bootstrap/spigot/target/Geyser-Spigot.jar
wget https://ci.opencollab.dev/job/GeyserMC/job/Floodgate/job/master/lastSuccessfulBuild/artifact/spigot/target/floodgate-spigot.jar
screen -UAmdS GFInstall java -jar ./../spigot-[バージョン].jar
screen -p 0 -S GFInstall -X eval 'stuff "stop\015"'
while [ -n "$(screen -list | grep -o "GFInstall")" ]
do
  screen -p 0 -S GFInstall -X 'stuff"k"'
  sleep 1
done

vim floodgate/config.yml # auth-type=floodgateにしてください。
sudo ufw allow 19132/udp

BungeeCordの導入

BungeeCordというプロキシサーバーを導入することで、サーバー間での接続が可能となります。一般には必要とされていないが、サバイバルサーバー、クリエサーバーなどで分ける場合などで便利です。ある程度のネットワーク知識を要求します。また、BungeeCordを導入する場合はGeyserMCはSpigotから外してください。

BungeeCord用のディレクトリで作業してね
wget https://ci.md-5.net/job/BungeeCord/lastSuccessfulBuild/artifact/bootstrap/target/BungeeCord.jar
mkdir plugins
cd plugins https://ci.opencollab.dev/job/GeyserMC/job/Floodgate/job/master/lastSuccessfulBuild/artifact/bungee/target/floodgate-bungee.jar
cd ../
screen -UAmdS BCSetup java -jar bungeecord.jar
screen -p 0 -S BCSetup -X eval 'stuff "stop\015"'
while [ -n "$(screen -list | grep -o "BCSetup")" ]
do
  screen -p 0 -S BCSetup -X 'stuff"k"'
  sleep 1
done
BungeeCord/config.yml
listeners:
- query_port: 25565
  motd: |-
  [概要]
  tab_list: GLOBAL_PING
  query_enabled: false
  proxy_protocol: false
  forced_hosts:
    pvp.md-5.net: pvp
  ping_passthrough: false
  priorities:
  - lobby
  - server1
  ...
  [サーバーにフォールバックする順番で列挙してください]
  bind_local_address: true
  host: 0.0.0.0:25565
  max_players: 100
  tab_size: 60
  force_default_server: false
remote_ping_cache: -1
network_compression_threshold: 256
permissions:
  default:
  - bungeecord.command.server
  - bungeecord.command.list
  - bungeejapanizemessenger.dictionary
  admin:
  - bungeecord.command.alert
  - bungeecord.command.end
  - bungeecord.command.ip
  - bungeecord.command.reload
log_pings: false
connection_throttle_limit: 3
server_connect_timeout: 5000
timeout: 30000
stats: [もともと埋められていた数値を使用してください]
player_limit: -1
ip_forward: true
groups:
  replica_doll: null
remote_ping_timeout: 5000
connection_throttle: 4000
log_commands: false
prevent_proxy_connections: false
online_mode: true
forge_support: false
disabled_commands:
- disabledcommandhere
servers:
  lobby:
    motd: |-
      [概要に貼るやつ]
    address: localhost:[サーバーのポート]
    restricted: false
  [以下同様にサーバーを列挙していく]:
server/server.properties
server-port=[25565以外で、サーバーのポート]

あとBungeeCordサーバーにあるplugins/floodgate/key.pemをSpigot上のplugins/floodgate/key.pemに上書きするとよいと思います。

参考文献

1
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?