mitsu's techlog

Customer Reliability Engineerになりました。備忘録も兼ねて技術ネタを適当に。技術以外はこっち→http://mitsu9.hatenablog.com/

AWSでマイクラ鯖たててみた٩( 'ω' )و

友達と遊ぶようにマイクラ鯖たてました。 とは言ってもそんなことのできるデスクトップPCは持ってないのでAWS使いました。

自宅鯖だとポート開放やら何やらあるけどAWSなので簡単に公開できました٩( ‘ω’ )و

公開するなら荒らし対策などやることはいろいろあるけど、今回は友達で遊べる最低限の設定まで。 (最低限やるべきことが出来てなかったら教えてください、、)

AWSインスタンスの生成

  • Amazon Linux
  • セキュリティグループの設定
    • 25565ポートを開けておく
  • Elastic IPの設定

マイクラサーバーの設定

とりあえず必要なもののインストール。

$ sudo yum update -y
$ java -version // java入ってるか確認。バージョンも確認。必要なら変更などする。
$ sudo yum -y install git

今回はspigotを使ってサーバー環境を整えていきます。 詳細まではわかってないけど、調べたところ公式よりもspigotが良いらしい。

$ mkdir ~/minecraft_spigot
$ cd ~/minecraft_spigot
$ wget https://hub.spigotmc.org/jenkins/job/BuildTools/lastSuccessfulBuild/artifact/target/BuildTools.jar
$ java -jar BuildTools.jar
$ java -Xms1024M -Xmx1024M -XX:MaxPermSize=128M -jar spigot-1.11.2.jar nogui
$ vi eula.txt

eula=false -> true

$ java -Xms1024M -Xmx1024M -XX:MaxPermSize=128M -jar spigot-1.11.2.jar nogui

クライアントからログインできるかテスト→ログインできたらstopで一旦停止

起動/停止スクリプトの作成

いちいちコマンド打つのもあれなのでスクリプト作ります。

起動スクリプト(spi_start.sh)

#!/bin/bash

USERNAME='ec2-user'
SERVICE='spigot-1.11.2.jar'
SCNAME='spigot'
SPI_PATH='/home/ec2-user/minecraft_spigot/'

XMX="1024M"
XMS="1024M"

cd $SPI_PATH

ME=`whoami`

if [ $ME == $USERNAME ] ; then
if pgrep -u $USERNAME -f $SERVICE > /dev/null
then
echo "$SERVICE is already running!"
else
echo "Starting $SERVICE..."
screen -AmdS $SCNAME java -Xmx$XMX -Xms$XMS -XX:MaxPermSize=128M -jar $SERVICE nogui
fi
else
echo "Please run the minecraft user."
fi

停止スクリプト(spi_stop.sh)

#!/bin/bash

USERNAME='ec2-user'
SERVICE='spigot-1.11.2.jar'
SCNAME='spigot'
SPI_PATH='/home/ec2-user/minecraft_spigot'

cd $SPI_PATH

ME=`whoami`

if [ $ME == $USERNAME ] ; then
  if pgrep -u $USERNAME -f $SERVICE > /dev/null
    then
      echo "Stopping $SERVICE"
      screen -p 0 -S $SCNAME -X eval 'stuff "say SERVER SHUTTING DOWN IN 10 SECONDS. Saving map..."\015'
      screen -p 0 -S $SCNAME -X eval 'stuff "save-all"\015'
      sleep 10
      screen -p 0 -S $SCNAME -X eval 'stuff "stop"\015'
      sleep 10
      echo "Stopped minecraftserver"
    else
      echo "$SERVICE was not runnning."
  fi
else
  echo "Please run the minecraft user."
fi

権限の設定

$ chmod 744 spi_start.sh
$ chmod 744 spi_stop.sh

ちゃんと動くか確認しておく

監視ツールの導入など

mackerelエージェントのインストー

サーバたてたらとりあえずmackerel入れとけ派の人なので入れます。 自分は何かあったらslackに飛ばすように設定してるので鯖落ちとかはすぐ気付けるようにしてます。

$ curl -fsSL https://mackerel.io/file/script/amznlinux/setup-all-yum.sh | MACKEREL_APIKEY='API_KEY' sh

定期的に再起動するように設定

ずっと起動しっぱなしは良くないので定期的に再起動するように設定します。

日本時間に変更

$ sudo vim /etc/sysconfig/clock

ZONE="Asia/Tokyo" 
UTC=false

$ cp /usr/share/zoneinfo/Japan /etc/localtime
$ sudo /etc/init.d/crond restart

再起動スクリプト(spi_restart.sh)

#!/bin/bash

./spi_stop.sh; ./spi_start.sh

cronの設定

$ crontab -e

0 4 * * * /home/ec2-user/minecraft_spigot/spi_restart.sh | logger -t minecraft -p local0.info

$ crontab -l
$ sudo tail -f /var/log/messages // ログの保存先

参考HP

AWSで爆速でMinecraft Plugin鯖を建てる方法! - Qiita

さくらのVPSにspigotインストール(CentOS 7) | server-memo.net

EC2 Amazon Linux を立ち上げた時にする初期設定 - Qiita

CrontabでEC2を指定の時間にシャットダウンさせる - Qiita