AWSで作る、常時起動しない人のためのMinecraftサーバー
概要
- Amazon Linux 2のEC2インスタンスにMinecraftのサーバを建てる
- コストを減らすため常時起動はせず、必要なときにインスタンスを起動する方式
- 常時起動しないのでElasticIPを使わずに、でも毎回同じドメインでサーバに接続できる
- AWSコンソールからインスタンスを開始すればサーバが立ち上がり、停止すればワールドが保存される
- 工夫してコストカットしたり、MODを入れたりしているので、手間が多め
- サーバを起動していない月は、現在サーバ1つにつき月額1$くらいで維持できてます(EBSのみ課金される)
使うもの
私の作りたいマイクラサーバ
- 人数は少なめ、多くても4人程度を想定
- やりたいときに集まってやるので、常時起動はしない
- 少しMODを入れる
EC2を作る
インスタンス作成
インスタンスタイプについて
micro系とかはスペック不足でラグがひどかったりエラー落ちしたりするので、厳しそう
- はじめにt2.microでやってみたときワールド生成の時点でエラー落ちを何回もしていた(0.0152USD/時間)
- t3.smallにしたらすんなり動いた(0.0272USD/時間)
- コストが気になったのでt4g.smallに移行した(t4g初めてつかったけどコスパすごい)(0.0216USD/時間)
- すごい勢いで移動するとワールド生成が追いつかないのでa1.xlargeにしてみたらすごく快適(0.1284USD/時間)
- さすがに高いのでa1.largeを使い始める(0.0642USD/時間)
インスタンスタイプはコストやプレイ人数、MODなどに合わせて適当に決めましょう
あまりケチるとまともにプレイできないので気をつけて・・・
EBSのサイズについて
ストレージは途中で増やすことができるので、いったん最低の8GBで作る→足りなくなったらサイズを増やせば良い
逆にストレージを小さくすることはできないので(別のEBSを作ってそっちに移す形ならできる)、適当に20GBで作ってみたけど、数百MBしか使ってないから最低の8GBで良かった・・・と私みたいにならないように
セキュリティグループについて
Elastic IPを使わないドメイン解決の仕組みについて
こちらの記事を参考に、こんな仕組みを作る
これで、Elastic IPを使わずに毎回同じドメインを使えるのでとても便利(一応レコードが行き渡るのに若干のタイムラグがあるが我慢する)
ただ、常時起動するマイクラサーバならEIPも無料で済むので必要ないかも
仮想マシンにマイクラサーバを入れる
必要なものの用意
- Javaは古いのだと不安定ってちらっとみたので、新しいものを入れる(よく調べてない、てきとう)
$ sudo yum update $ sudo yum install java-1.8.0-openjdk
マイクラサーバの準備
MCVersions.net - Minecraft Versions Download List
このあたりから、ほしいバージョンのマイクラサーバ.jarを探してくる
$ mkdir ~/minecraft $ cd ~/minecraft $ wget https://launcher.mojang.com/v1/objects/35139deedbd5182953cf1caa23835da59ca3d7cd/server.jar
1回サーバを起動する
$ java -Xms1024M -Xmx1024M -jar server.jar nogui
ライセンスに同意する
$ echo 'eula=true' > eula.txt
MODを入れるならforgeとかを適当に入れる
Downloads for Minecraft Forge for Minecraft 1.16.5
このあたりから、ほしいバージョンのforgeを探してくる
$ wget https://files.minecraftforge.net/maven/net/minecraftforge/forge/1.16.4-35.1.4/forge-1.16.4-35.1.4-installer.jar
forgeのインストール
$ java -jar ./forge-1.16.4-35.1.4-installer.jar nogui --installServer
forgeサーバを1回起動してみる
$ java -server -Xms512M -Xmx2048M -jar ./forge-1.16.4-35.1.4.jar nogui
マイクラのクライアントを起動してつないでみる→つながる→一旦止める
> stop
必要ならMODを適当に入れる
インスタンス起動時にマイクラサーバを自動起動する
$ sudo vim /etc/systemd/system/minecraft.service
/etc/systemd/system/minecraft.service
にこんな感じのユニットファイルを作る
[Unit] Description=Minecraft Server After=network-online.target [Service] WorkingDirectory=/home/ec2-user/minecraft User=ec2-user ExecStart=/bin/bash -c '/bin/screen -DmS minecraft /bin/java -server -Xms512M -Xmx2048M -jar ./forge-1.16.4-35.1.4.jar nogui' ExecReload=/bin/screen -p 0 -S minecraft -X eval 'stuff "reload"\\015' ExecStop=/bin/screen -p 0 -S minecraft -X eval 'stuff "say Server Shutdown. Saving map..."\\015' ExecStop=/bin/screen -p 0 -S minecraft -X eval 'stuff "save-all"\\015' ExecStop=/bin/screen -p 0 -S minecraft -X eval 'stuff "stop"\\015' ExecStop=/bin/sleep 10 Restart=on-failure RestartSec=60s [Install] WantedBy=network-online.target
ユニットファイルを読み込んでみて、読み込んだか確認する
$ sudo systemctl daemon-reload $ sudo systemctl status minecraft
Loaded: loaded
みたいになっていれば読み込まれているので、起動できるか試す
$ sudo systemctl start minecraft $ sudo systemctl status minecraft $ screen -r minecraft
screenでマイクラのコンソールに入れたら、Ctrl+A > dで抜ける
クライアントからも接続できるか、さっきと同じワールドにはいれているか確認してみる
大丈夫そうなら、自動起動するようにする
$ sudo systemctl enable minecraft
これで、
できるようになってるはず
最後にテスト
- インスタンスを再起動する
- 起動まで1分程度まってあげる
- Route 53にレコードが登録できていることを確認する
- クライアントから接続できることを確認する