forgeサーバー(ほぼバニラ)を立てたので、忘れないうちに方法を残しておく。
環境
マルチプレイ人数1〜4人を想定
- レンタルサーバー (KAGOYA CLOUD VPS)
- OS: Ubuntu (20.04 LTS)
- CPU: 4コア
- メモリ: 4GB
- SSD: 30GB
- Minecraft forge (1.18.1) 導入MOD
インスタンスを作成
カゴヤのサーバー研究室を参考にインスタンスを作成する。
この時認証キーのファイル(xxx.key)がローカルにダウンロードされるので、とっておく。
サーバー構築
SSH接続とパッケージアップグレード
ダウンロードした認証キーのファイルパスを指定して、サーバーのルートユーザーにSSH接続する。
ssh -i 認証キーへのパス/XXXXXX.key root@xxx.xxx.xxx.xxx
接続できたら、パッケージをアップグレードする。
sudo apt-update
sudo apt -y upgrade
Javaのインストール
遊びたいMinecraftのバージョンに合わせたJavaをインストールする。
JavaのバージョンはMinecraft Wiki 更新の必要性を確認する。
sudo apt install openjdk-17-jdk
ユーザーログイン
カゴヤのサーバー研究室にならって、サーバー管理用ユーザーを作成し、スーパーユーザーでログインする。
以降の作業は全てこのユーザーで行う。
sudo adduser minecraft
su - minecraft
forgeのインストール
Minecraftのバージョンや管理したいMOD構成毎にディレクトリを作成する。
mkdir forge_1.18.1
cd forge_1.18.1
forgeインストーラーをダウンロードする。
- forgeのDownloadサイトにアクセスし、ダウンロードしたいインストーラーをクリックする。
- 数秒待機すると、右上に"skip"というボタンが表示されるので、そのボタンを右クリックしてURLをコピーする。
-
wget コピーしたURL
でjarファイルをダウンロード
インストーラーを実行する。
最後の--installServer
オプションを必ずつけること。
java -jar forge-xxx.xxxxxx-installer.jar --installServer
生成されているファイルのうち、user_jvm_args.txtをサーバーのメモリに合わせて編集する。
今回は念の為メモリ上限を3800MBに設定した。
vi user_jvm_args.txt
# Xmx and Xms set the maximum and minimum RAM usage, respectively.
# They can take any number, followed by an M or a G.
# M means Megabyte, G means Gigabyte.
# For example, to set the maximum to 3GB: -Xmx3G
# To set the minimum to 2.5GB: -Xms2500M
-Xms1G
# A good default for a modded server is 4GB.
# Uncomment the next line to set it.
-Xmx3800M
初回起動
インストーラー実行によって生成されたrun.shを実行する。
./run.sh
すると利用規約の同意を求められるので、eula.txtのfalse
をtrue
に書き換える。
#By changing the setting below to TRUE you are indicating your agreement to our EULA (https://account.mojang.com/documents/minecraft_eula).
eula=true
再度run.shを実行し、Succsessの表示が出ればサーバー起動成功。
ポート開放
最後にポートを開放する。
iptables -A INPUT -p tcp --dport 25565 -j ACCEPT
iptables -A INPUT -p tcp --sport 25565 -j ACCEPT
MOD導入
ダウンロードしたMODファイルをscpコマンドでサーバーにアップロードする。
ワイルドカードを使用する場合は、送信元ディレクトリに他のjarファイルがないことを確認する。
scp *.jar minecraft@xxx.xxx.xxx.xxx:/forge_1.18.1/mods
modsディレクトリ下にjarファイルがコピーされていることを確認したら、run.shを実行してサーバーを起動する。
ワールドデータ移行
他の起動構成からワールドデータを移行する時は、作業ディレクトリ(forge_1.18.1など)の下に直接worldディレクトリをコピーすれば良い。
サーバーを常時起動
このままでは、SSH接続が切れたりユーザーがログアウトするとサーバーが停止してしまう。そのためscreenを使用してデーモン化する。
run24.shによってサーバーを起動する。
シャットダウンは、こちらの停止用スクリプトを使用した。
apt install screen
SCREEN_SERVER='minecraft'
screen -mdS $SCREEN_SERVER ./run.sh
サーバー起動、シャットダウン時にLINEに通知を送信
せっかくなので、サーバーの起動やシャットダウン、ユーザーのログインなどのログをLINEに送信するスクリプトを組んだ(ほぼこちらのコピペ)。
これにはLINE Notifyでトークンを取得する必要がある。
LINE_ACCESS_TOKEN=取得したトークン
tail -n0 -F logs/latest.log | grep --line-buffered -e joined -e left -e Successfully -e Stopping | xargs -I @ curl -X POST -H "Authorization: Bearer ${LINE_ACCESS_TOKEN}" -F "message=@" https://notify-api.line.me/api/notify
これを組み込むために、スクリプトを編集する。
SCREEN_SERVER='minecraft'
SCREEN_NOTIFY='line_notify'
screen -mdS $SCREEN_SERVER ./run.sh
nohup ./line_notify.sh > /dev/null 2>&1 &
SCREEN_SERVER='minecraft'
if [ -n "$(screen -list | grep -o "${SCREEN_SERVER}")" ]; then
screen -S $SCREEN_SERVER -X stuff 'say 30秒後にサーバーを停止します\015'
sleep 30s
screen -S $SCREEN_SERVER -X stuff 'save-all\015'
sleep 5s
screen -S $SCREEN_SERVER -X stuff 'stop\015'
sleep 30s
else
echo [date '+%F %T'] 'server is not runnning'
fi
pkill -f "tail -n0 -F logs/latest.log"
pkill -f "grep --line-buffered -e joined -e left -e Successfully -e Stopping"
pkill -f "xargs -I @ curl -X POST -H Authorization: Bearer LINENotifyのトークン -F message=@ https://notify-api.line.me/api/notify"
サーバー起動中にコマンド入力したい
screenにアタッチしてからコマンドを入力する。
screen -r minecraft #screenにアタッチ
Ctrl+a ,d #screenからデタッチ
参考