alpine linuxではじめる軽量なマイクラ鯖の立て方
TL; DR
#ツール等のインストール
doas apk add openjdk21-jre-headless curl
mkdir minecraftserver && cd minecraftserver
curl <ファイルのリンク> -o server.jar
# サーバ起動
screen -S minecraft java -jar -Xmx3G -Xmn2G -Xms1G server.jar
# eula.txtを編集して起動
# eula=false -> eula=true
screen -S minecraft java -jar -Xmx3G -Xmn2G -Xms1G server.jar
はじめに
この記事は私の気まぐれで書かれています。どこか直したほうがいいところあったら書き込んでにゃ。
前提条件
- linuxのコマンド操作ができること
- 動作させるためのマシンがあること(VM等)
鯖づくり(構築)
準備
OSインストール
ISOからのインストールとイメージファイルを使う方法がありますが、今回は既存のcloudimageを使用します。各自で使う方法を選んでくださいな
ここに転がっているイメージをダウンロードしてcloudinitでセットアップします。
ProxmoxVEを利用するときはcloud-initドライブを追加して設定するとネットワークとユーザの設定が一度にできます。おまじない
はじめにアップデートをします
doas sh -c 'apk update && apk upgrade'
環境構築
サーバを動作させるためのランタイムとツールをインストールします
# javaとcurl, screenのインストール
doas apk add openjdk21-jre-headless curl screen
ユーザ作成(任意)
セキュリティを維持するためにサーバを動作させるための非特権ユーザを作成します。
次のコマンドを実行してください。
cat << EOL | doas sh -
useradd minecraft -d /minecraft
mkdir /minecraft
chown minecraft:minecraft -R /minecraft
EOL
Minecraftサーバインストール
ここからの作業はminecraftユーザで行います。
次のコマンドで切り替えてください。
doas su - minecraft
サーバファイルダウンロード
ファイルを公式からドロップするなど自身の使いたいものを選択してください。
今回は公式サーバファイルを落とします。
curl https://piston-data.mojang.com/v1/objects/4707d00eb834b446575d89a61a11b5d548d8c001/server.jar -o server.jar
起動スクリプト作成
スクリプトファイルを編集します
vi start.sh
start.sh
#!/bin/sh
screen -S minecraft java -jar -Xmx3G -Xmn2G -Xms1G server.jar
作成したスクリプトに実行権限を付与
chmod +x start.sh
起動
初回起動時はEULAに同意を求められるので勝手に止まります。
./start.sh
#[16:06:46] [ServerMain/WARN]: Failed to load eula.txt
#[16:06:46] [ServerMain/INFO]: You need to agree to the EULA in order to run the server. Go to eula.txt for more info.
eula.txtのeula=false
となっている部分をtrueに変更します。
# 変更前
eula=false
# 変更後
eula=true
そして起動 ヨシ!
[16:16:58] [Server thread/INFO]: Done (10.696s)! For help, type "help"
サーバに接続してみよう
サーバが動いてるマシンのIPアドレスを確認しよう。 今回はeth0がデフォルトポートなのでinetの部分が接続に使用するアドレスになる。
alpine-dev:~$ ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host proto kernel_lo
valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 52:a7:b7:06:d4:de brd ff:ff:ff:ff:ff:ff
inet 172.16.22.214/16 brd 172.16.255.255 scope global dynamic noprefixroute eth0
valid_lft 527sec preferred_lft 452sec
inet6 fe80::50a7:b7ff:fe06:d4de/64 scope link proto kernel_ll
valid_lft forever preferred_lft forever
マルチプレイサーバを追加する。
接続 ここまでで一連の流れは完了です
鯖コンソールへの接続と切断
今回はscreenを使用しているのでバックグラウンドで動作させることができます。
デタッチ(切断)するときはCtrl+Aののちにdを押すと切断できます。
アタッチ(再接続)するときはscreen -r <セッション名>
でコンソールに入れます。
今回はセッション名がminecraftなのでscreen -r minecraft
で入れます。
screenコマンドのオプション等を調べれば自動再起とかも作れるのでやってみてくださいなー
外部公開
基本的にポート開放(IPマスカレード)の設定をおこなってサーバを外部公開することになるのですが、今回はポート開放ができない環境での公開を例にやってみます。
今回はngrokというサービスを利用してTCPトンネルを張って外から入れるようにしましょう。
特権ユーザで各自で置き換えて実行してください。
#ダウンロード
curl <ダウンロードリンク> -o ngrok-v3-stable-linux-amd64.tgz
#binに展開
doas tar -xvzf ~/Downloads/ngrok-v3-stable-linux-amd64.tgz -C /usr/local/bin
サーバを外部公開してみよう
#tokenを登録
ngrok config add-authtoken <token>
#起動
screen -S ngrok-tunnel ngrok tcp 25565
上のコマンドを実行すると次のようになります。
下記画像の0.tcp.jp.ngrok.io:xxxxx
となっている部分がサーバのアドレスになります。
外部公開に使用したコマンドをstart.sh
に追加すれば同時に外部公開することができます。
この例では起動時にアドレスを確認できるようにminecraftサーバ起動時に-dm
オプションをつけて裏に遷移するようにしました。
変更例
#!/bin/sh
screen -dmS minecraft java -jar -Xmx3G -Xmn2G -Xms1G server.jar
screen -S ngrok-tunnel ngrok tcp 25565
Discussion
地味にTL;DRで書いてあることと本文で違うんだよなあ...
単純に鯖立てるだけだったらディレクトリ作ればいいだけだけど、本文ではすこしセキュリティも意識した作りにしてるから... ね