見出し画像

Luanti(旧Minetest)のサーバーをAWSでタダで立てる②~サーバーを完成させる~

こんにちは!こいんまにあです。この記事は連載型なので、前回の記事を読んでないよって方は、まずそちらをご覧ください。

↓前回の記事

さて、前回の続きからやっていきます。IPアドレスの固定とサーバーの自動起動、インスタンスの定期的な再起動を設定していきます。


Elastic IPでIPアドレスを固定する

インスタンスを作れたのはいいのですが、定期的にインスタンスを再起動しないとインスタンスが落ちてしまうようです。定期的にインスタンスを再起動する手順はあとでお教えします。
IPアドレスを固定せずにインスタンスを再起動すると、再起動するたびにIPアドレスが変わってしまい、不便です。そこで、Elastic IPを使ってIPアドレスを固定します。

EC2のネットワーク & セキュリティの「Elastic IP」を選択します。

右上の「Elastic IPを割り振る」をクリックします。そして、何も変更せずにそのまま右下の「割り振る」をクリックしてください。

新しく割り振られたIPアドレスが一覧に追加されたと思います。その項目の、「割り振られた IPv4 アドレス」の数値(青くなってると思います)をクリックしてください。

これ黒塗り多いね

右上の「Elastic IPを関連付ける」をクリックしてください。インスタンスの項目の、「インスタンスを選択してください」と書かれたやつをクリックして、前の記事で作ったインスタンスを指定します。その後、右下の「関連付ける」をクリックしてください。
これで、インスタンスを再起動してもIPアドレスが変わらないようになりました。このIPアドレスはサーバーに入るときなどに使うIPアドレスになります。

systemdで鯖起動時に勝手に起動するようにする

systemdでインスタンスが起動されたときに同時にサーバーが開かれるようにします。
AWSでインスタンスに接続し(手順は前回の記事の通り)、/etc/systemd/system/に「luantiserver.service」というファイルを作成し、nanoコマンドで編集画面を開きます。

sudo cd /etc/systemd/system/

sudo touch luantiserver.service

sudo nano /etc/systemd/system/luantiserver.service

そして、以下のようにファイルの中身を編集します。Ctrl+Xで編集終了できます。そのとき、英語で「保存しますか?」的なことが聞かれるので、Yキーを押して保存します。

[Unit]
Description=Luanti Server
After=network.target

[Service]
Type=simple
User=ubuntu
Group=ubuntu
WorkingDirectory=/home/ubuntu
ExecStart=/usr/bin/luanti --server --config /home/ubuntu/.minetest/minetest.conf --gameid ゲーム名(例:mineclonia minetest_game) --world /home/ubuntu/.minetest/worlds/ワールド名
Restart=always

[Install]
WantedBy=multi-user.target

保存が完了したらターミナルに戻るので、以下のコマンドを順に実行してください。

sudo systemctl daemon-reload #serviceの再読み込み

sudo systemctl start luantiserver #serviceの起動

sudo systemctl enable luantiserver #自動起動を設定

最後に、10〜30秒ほど待ってから、以下のコマンドを実行してうまく行ったか確かめてください。

sudo systemctl status luantiserver

うまくいけば、以下のようなログが返ってくる。

● luantiserver.service - Luanti Server
     Loaded: loaded (/etc/systemd/system/luantiserver.service; enabled; preset: enabled)
     Active: active (running) since Sat 2025-01-25 12:11:01 JST; 11h ago
   Main PID: 526 (luanti)
      Tasks: 7 (limit: 1130)
     Memory: 508.3M (peak: 558.7M)
        CPU: 23min 38.999s
     CGroup: /system.slice/luantiserver.service
             └─526 /usr/bin/luanti --server --config /home/ubuntu/.minetest/minetest.conf --gameid mineclonia --world /home/ubuntu/.minetest/worlds/second

Jan 29 21:02:41 ip-172-31-37-219 systemd[1]: minetest.service: Scheduled restart job, restart counter is at 1.
Jan 29 21:02:41 ip-172-31-37-219 systemd[1]: Started minetest.service - Minetest Server.
Jan 29 21:02:41 ip-172-31-37-219 luanti[2579]: 2025-01-29 21:02:41: [Main]: Using game specified by --gameid on the command line
Jan 29 21:02:49 ip-172-31-37-219 luanti[2579]:  _                   _   _
Jan 29 21:02:49 ip-172-31-37-219 luanti[2579]: | |_   _  __ _ _ __ | |_(_)
Jan 29 21:02:49 ip-172-31-37-219 luanti[2579]: | | | | |/ _` | '_ \| __| |
Jan 29 21:02:49 ip-172-31-37-219 luanti[2579]: | | |_| | (_| | | | | |_| |
Jan 29 21:02:49 ip-172-31-37-219 luanti[2579]: |_|\__,_|\__,_|_| |_|\__|_|
Jan 29 21:02:49 ip-172-31-37-219 luanti[2579]: 2025-01-29 21:02:49: ACTION[Main]: World at [/home/ubuntu/.minetest/worlds/second]
Jan 29 21:02:49 ip-172-31-37-219 luanti[2579]: 2025-01-29 21:02:49: ACTION[Main]: Server for gameid="mineclonia" listening on 0.0.0.0:30000.

インスタンスを定期的に自動で再起動するようにする

あとちょっとです。このままでも遊べはするのですが、インスタンスはしばらくほっとくとなぜか鯖落ちするので定期的に再起動するようにします。

下準備

「ロール」を作成していきます。「ロール」とは、色々やるときの許可をする役割を持つものです。
右上の検索ボックスで「ロール」と検索し、ロールのメニューにアクセスします。

ロールのメニュー画面。色々試行錯誤していらなくなったロールがいくつもある。

右上の「ロールを作成」から新しいロールを作ります。信頼されたエンティティタイプを「カスタム信頼ポリシー」にし、以下のようにコードを書き換えます。

{
	"Version": "2012-10-17",
	"Statement": [
		{
			"Sid": "",
			"Effect": "Allow",
			"Principal": {
				"Service": [
					"events.amazonaws.com",
					"ssm.amazonaws.com"
				]
			},
			"Action": "sts:AssumeRole"
		}
	]
}

書き換え終わったら右下の「次へ」をクリックしてください。このようなページに切り替わります。

「許可を追加」では以下の四つを選択してください。

  • AmazonEventBridgeFullAccess

  • AmazonSSMAutomationRole

  • CloudWatchEventsBuiltInTargetExecutionAccess

  • CloudWatchEventsInvocationAccess

いずれも検索すればでてきます。

選択できたら右下の「次へ」をクリックしてください。こんな画面に切り替わります。

ロール名は「ec2-auto-event-role」など、わかりやすいものにしましょう。
完了したら、右下の「ロールを作成」をクリックしてください。
これで下準備は完了です。

EventBridgeで定期的にインスタンスを再起動させる

左上の検索ボックスで「EventBridge」を検索し、「Amazon EventBridge」を選択します。そして、「バス」内の「ルール」を選択します。

ルールのメニュー画面。

上の画像にも写っている、橙色の「ルールを作成」をクリック。

ルールの詳細をきめていきます。名前は適当でいいです。「Luanti_instance_auto_reboot」とでもしておきましょう。説明は書かなくてOKです。イベントパスは変えません。ルールタイプは「スケジュール」にしてください。そして、右下の「EventBridge Schedularで続行」につられずに、左にある「続行してルールを作成する」をクリック。

つられずに「続行してルールを作成する」をクリックできればこのページになります。

スケジュールパターンを編集していきます。スケジュールパターンは、毎日指定の時刻に指示を実行できる「特定の時刻 (毎月第 1 月曜日の午前 8 時 (PST) など) に実行されるきめ細かいスケジュール。」にしておきます。「通常のレートで実行されるスケジュール (10 分ごとなど)。」にすると、時刻に関係なくN分おきに指示を実行できます。
cron式は書き方が少しややこしいですか、慣れると便利です。例えば、以下のように書くと、毎日夜0時に指示を実行できます。タイムゾーンを「ローカルタイムゾーン」にするのを忘れずに!

できたら右下の「次へ」をクリックしましょう。「ターゲットの選択」というふうになると思います。

各項目を以下のように指定してください。InstanceIdはLuantiのサーバーのインスタンスのIDをコピペしてください。ロール名は下準備で作ったものを使用します。完成したら右下の「レビューと作成 にスキップ」をクリック。
ちゃんと記入できたかを確認してから、右下の「ルールの作成」をクリックします。これでインスタンスを定期的に再起動できるようになったと思います。ルールを2個作って、毎日朝夕2回ほど再起動するよう設定するのがおすすめです。

まとめ

以上でサーバーを立てるために最低限やることはやりました。おつかれさまでした。楽しいLuanti鯖ライフを!もしうまくいかないことがあったり、足りてない手順、改善点等あればコメント等でぜひお知らせください!

次回以降の記事予定

ひょっとしたら更新されないかもしれません。でも、AWSのインスタンスにVS Codeでアクセスする方法やAWSのバックアップの取り方などは他の方の記事がネットにありますので、そちらを見てみるのがいいと思います。

  • Discordとサーバー間でリアルタイムでチャットできるようにする

  • AWSのインスタンスにVS Codeでアクセスする方法(Mod追加でめちゃくちゃ役立つ)

  • Modを追加する方法・オススメのMod

  • 鯖主権限ゲットする方法(鯖主のみ)

  • 公開鯖にする方法

著者のTwitter

いいなと思ったら応援しよう!

こいんまにあ
Scratch、Python、Unity、ラズパイなどをいじってます。ソフト系に傾いていってます。 ↓自分のサイト(Googleサイトですみません) https://sites.google.com/view/Oldcoinmania