Low Tech High Fun

工業大学生が作ったものや学んだことをちょくちょく書いてく

Minecraftマルチサーバーをvpsで建てよう

初めに

友達とMinecraftで遊ぶことになった。以前は自宅の余っていたPCでサーバーを立てていたのだが、ファンの音がうるさく電気代も気になるのでvpsで建てることにした。

詳細

  • ConoHavps。後からRAMやCPUをグレードアップさせることができるらしい。またSSD100GBと読み込みが高速かつ大容量。
    →私は4GBプラン - 3,280円/月(2020/8月現在)にした。人数に合わせて変えていこうと思う。
  • CentOS 7.6
  • Tera Term
  • Minecraft バージョン : 1.7.10 (竹modが最適)
  • forge-1.7.10-10.13.4.1614
  • 導入mod(サーバー&クライアント側) : 竹mod , Flan's mod(WW2,simple parts pack),bibliocraft,worldedit,MineAll,DigAll,CutAll,codechickencore,not enough items,storage box
  • 導入mod(クライアント側) : OptiFine , 影mod(SEUS-v11.0)

初期設定

サーバー側

Forgeを導入

[1]ホームディレクトリにダウンロードしたForgeをSCPでアップロード

f:id:CMos:20200825124009p:plain
SCP - TeraTerm
ファイル - SSH,SCPを選択
Fromにファイルを選択
Toには何も書かない(ホームディレクトリ)

[2]ホームディレクトリに保存した2つをminecraftディレクトリに (この場合だとforge_server)

$ cp -p forge-1.7.10-10.13.4.1614-1.7.10-installer.jar forge_server
$ cp -p forge-1.7.10-10.13.4.1614-1.7.10-universal.jar forge_server

[3] ダウンロードしたインストーラーを実行

$ java -jar forge-1.7.10-10.13.4.1614-1.7.10-installer.jar nogui --installServer

"installerはけしていいよ"といわれたらOK

[4] インストーラーとインストールのログファイルは不要なので削除

$ rm forge-1.7.10-10.13.4.1614-1.7.10-installer.jar
$ rm forge-1.7.10-10.13.4.1614-1.7.10-installer.jar.log

ホームディレクトリも同様に

[5] インストーラーの実行で出来上がったjarファイル(forge-1.8-11.14.4.1563.jar)の名前を変更

$ mv forge-1.7.10-10.13.4.1614-1.7.10-universal.jar minecraft_server.jar

サーバーディレクトリ内のeula.txtをtrueに

[6]Forgeサーバー起動

$ java -Xmx1024M -Xms1024M -jar minecraft_server.jar nogui

[7] 作成したディレクトリの所有者を[minecraft]に設定

# chown minecraft:minecraft forge_server

起動スクリプトを設定

screenのインストール

$ sudo yum -y install screen 

起動スクリプトをダウンロード

$ wget -O minecraft "http://minecraft.gamepedia.com/Tutorials/Server_startup_script/Script?action=raw"

これでservice minecraft startで起動できる
この他にもservice minecraft statusなど様々なコマンドが扱える

仮想端末へ接続

screen -r minecraft

と実行することで仮想端末に接続することができる。
起動スクリプトを使用した場合はここでサーバーが正常に起動できているか確かめる。op権限を付与したりもここから

クライアント側

Forgeを導入

サーバー側のForgeインストールに使ったインストーラーを実行

mod導入

  • サーバー&クライアント側mod導入
    vpsminecraftディレクトリのmodsの中にjarファイルを入れる
    TeraTermの場合ドラッグ&ドロップでパスを指定するだけ
    クライアント側もForge実行後に作成されるmodsフォルダにjarファイルをいれる

  • クライアント側mod導入
    modsフォルダにjarファイルを入れる
    影modはshaderpacksの中に

    mod設定

  • digallModは初期設定から変えたほうがよい configをいじる必要がある
# Boolean: false
    B:DropGather=true

# Integer: 11
    I:Limiter=4

# Boolean: true
    B:StartMode=false

# String: "grass, dirt, sand, gravel, farmland, snow_layer, clay, soul_sand, mycelium"
    S:blockIds=grass, dirt, sand, gravel, farmland, snow_layer, clay, soul_sand, mycelium,stone

# String: "iron_shovel, wooden_shovel, stone_shovel, diamond_shovel, golden_shovel"
    S:itemIds= stone_shovel
  • bibliocraftの写真はzipファイルの中に直接入れる
    パスはassets\bibliocraft\textures\custompaintings
    pngしか認識しない

worldバックアップ

手動

  • バックアップ用のディレクトリを作成
  • cp や tar などでバックアップ
$ tar cfvz buckup_`date +%Y%m%d-%H%M%S`.tar.gz /minecraft/world
  • バックアップ消去はこんな感じ 確認が欲しければyes抜きで
yes | rm -r <ディレクトリ>

スクリプト

スクリプト作成

$ vi /<minecraftディレクトリ>/mc_backup_full.sh 
$ chmod +x /<minecraftディレクトリ>/mc_backup_full.sh

下はサーバーを止めてバックアップして再起するスクリプト。サーバーを止めないものもあるとさらに良い。

#!/bin/bash
 
SERVICE='minecraft_server.jar'
USERNAME=' ' #<minecraft用>
SCNAME=' ' #<minecraft用>
MC_PATH=' ' #<minecraftディレクトリのパス>
BK_PATH=' ' #<作成したバックアップ用ディレクトリのパス>
 
BK_TIME=`date +%Y%m%d-%H%M%S` #現在時刻
BK_NAME="$BK_PATH/mc_backup_full_${BK_TIME}.tar.gz" #バックアップディレクトリ名
BK_GEN="3" #<バックアップを何日残すか>
 
XMX="1024M" #サーバー起動時のメモリ最大割り当て値
XMS="1024M" #サーバー起動時のメモリ初期値
 
 
cd $MC_PATH
 
ME=`whoami`
 
if [ $ME == $USERNAME ] ; then
  if pgrep -u $USERNAME -f $SERVICE > /dev/null
    then
      echo "Full backup start minecraft data..."
      screen -p 0 -S $SCNAME -X eval 'stuff "say SERVER SHUTTING DOWN IN 10 SECONDS. Saving map..."\015'
      sleep 10
      screen -p 0 -S $SCNAME -X eval 'stuff "save-all"\015'
      screen -p 0 -S $SCNAME -X eval 'stuff "stop"\015'
      echo "Stopped minecraft_server"
      echo "Full Backup start ..."
      tar cfvz $BK_NAME $MC_PATH
      sleep 10
      echo "Full Backup compleate!"
      find $BK_PATH -name "mc_backup_full*.tar.gz" -type f -mtime +$BK_GEN -exec rm {} \;
      echo "Starting $SERVICE..."
      screen -AmdS $SCNAME java -Xmx$XMX -Xms$XMS -jar $SERVICE nogui
    else
      echo "$SERVICE was not runnning."
  fi
else
  echo "Please run the $USERNAME user."
fi


テスト (-xを付けると実行内容を出力してくれる)

$ sh -x /<minecraftディレクトリ>/mc_backup_full.sh

定期バックアップ

cronに登録(サーバーを実行しているユーザーで実行)

$ crontab -e

上は毎日4:30にバックアップを行う
下は毎時30分、毎月や毎分なども設定できる

30 4 * * * /<minecraftディレクトリ>/mc_backup_full.sh
30 * * * * /<minecraftディレクトリ>/mc_backup_full.sh

私は毎日4:30にした。これで何もしなくても圧縮バックアップが作成されるようになった。

最後に

後はプレイして楽しもう!
余談だが、サーバー代の集金はPayPalのマネープールを使うことにした。ConoHaVPSもPayPalに対応しているので簡単に支払いができるはずだ。