【20250810】マイクラがてら、AWSとLinux勉強
1.はじめに
長期休暇に入ったので、試してみたかったEC2上でマインクラフトのサーバーを構築してみることにした。今日の目標は、ひとまずMinecraftがサーバー上でプレイできることとする。
2.構成概要
- OS: Amazon Linux 2023
- インスタンスタイプ: t4g.medium(vCPU 2, RAM 4GB)
- Java: Amazon Corretto 21
- Minecraftサーバー: server.1.21.8 (https://www.minecraft.net/ja-jp/download/server)
- 起動方法: systemdによる自動起動
-
保存場所:
/opt/minecraft/server
3.事前準備済み事項
- AWSアカウントの作成、IAMユーザー(管理者ロール)
- EC2キーペア作成済み(SSHの接続で利用)
4.EC2インスタンスの作成
- AWSマネジメントコンソールでEC2 -> [インスタンスの起動]
- AMI(Amazon Linux 2023)やインスタンスタイプ(t4g.medium)を選択
- キーペアを作成(.pem形式)
- ストレージはデフォルトで無料の30GBまで選択
- インバウンドルールの編集(テスト用にMY IPアドレスの22/SSHと25565/TCPをListen状態に)
5.Linux上での環境構築
インスタンス起動後、SSH接続をする ※ssh接続にはTeraTerm5.0を使用
(1) Amazon Linux用のJavaを入れる
最新のMinecraft(1.21系統)はJava21が必要になるので、Corretto21をインストールする。
Correttoとは、AWSが長期サポートをしているOpenJDK。
# システムにインストールされているパッケージを最新にする
sudo yum update
# Corretto21(headless)のインストール
sudo yum install -y java-21-amazon-coretto-headless
# Javaが正しくインストールされたか確認
java -version
(2) 公式サーバー.jarのインストール
# 作業用ディレクトリを作成
sudo mkdir -p /opt/minecraft/server
cd /opt/minecraft/server
# サーバーのインストール
sudo wget server.jar 'https://piston-data.mojang.com/v1/objects/6bce4ef400e4efaa63a13d5e6f6b500be969ef81/server.jar'
詳細はMinecraftを見てみたほうが早いかも
https://ja.minecraft.wiki/w/チュートリアル:サーバーのセットアップ#Linuxでの手順
(3)初回起動
公式サーバー.jarを初回起動すると、利用規約eula.txtが作成されるのでそれを同意。
# サーバーの起動
java -Xmx1024M -Xms1024M -jar server.jar nogui
# 利用規約の同意
echo 'eula=true' > eula.txt
(4)自動起動
ここはChat GPTに相談しながら設定を記載したため、要学習。
# /opt/minecraft/server/start の作成
cat <<'EOF' | sudo tee /opt/minecraft/server/start
#!/bin/bash
# 作業ディレクトリに移動
cd /opt/minecraft/server
# Javaのヒープメモリ設定(-Xms 最小 / -Xmx 最大)
# -Xmx はインスタンスのRAMに応じて調整(例: 4GBインスタンスなら 3G 程度が安全)
# nogui はコンソールUIを使わない(Linuxでは必須に近い)
exec /usr/bin/java -Xms1300M -Xmx1300M -jar server.jar nogui
EOF
# 実行権限を付与
sudo chmod +x /opt/minecraft/server/start
sudo chown minecraft:minecraft /opt/minecraft/server/start
sudo tee /etc/systemd/system/minecraft.service > /dev/null <<'EOF'
[Unit]
Description=Minecraft Server
After=network.target
[Service]
User=minecraft
Group=minecraft
WorkingDirectory=/opt/minecraft/server
ExecStart=/opt/minecraft/server/start
# 異常終了した場合は10秒後に再起動
Restart=on-failure
RestartSec=10
# サービス停止時に子プロセスもまとめて終了
KillMode=control-group
# ログを journald に送る
StandardOutput=journal
StandardError=journal
[Install]
WantedBy=multi-user.target
EOF
systemdユニットファイルを作成しているらしい。(コンピュータの電源を入れてから起動処理を行うもの)
💡 ChatGPTによる補足
After=network.target
ネットワークが利用可能になった後に起動する設定。これがないとネットワーク未接続のまま立ち上がってしまうことがあります。Restart=on-failure
クラッシュやエラー終了時に自動再起動します。ただし systemctl stop で止めた場合は再起動しません。KillMode=control-group
Java プロセスだけでなく、その子プロセスもまとめて終了できるようにします。WorkingDirectory
相対パスを避けるため、必ず /opt/minecraft/server のような絶対パスにします。ログの取り方
journalctl -u minecraft -f でリアルタイム監視できます。保存や外部出力は journalctl -u minecraft > log.txt のようにします。
(5)再起動
# ユニットを読み込み直す
sudo systemctl daemon-reload
# 自動起動を有効化
sudo systemctl enable minecraft
# 今すぐ起動
sudo systemctl start minecraft
# ステータス確認
sudo systemctl status minecraft
# ログをリアルタイムで確認
sudo journalctl -u minecraft -f
6.接続確認
Minecraft(Java Edition)より、[マルチプレイで遊ぶ]->[サーバーを追加]
サーバー名は自分がわかりやすいものにして、サーバーアドレスにEC2のパブリックIPアドレスを入れる。
EC2は従量課金制なので、ずっとつけっぱにするならElastic IPでグローバルIPアドレスを固定にしたほうが楽。自分はEC2をずっと起動中にするわけではないので、一旦スルー。
(Elastic IPアドレスはインスタンス停止中、時間単位で課金が発生する。)
7.今後の方針
- 動的なグローバルIPアドレスでも名前解決によっていちいちグローバルIPを変更しなくてよいようにする。(Elastic IP代をケチる)
- EC2インスタンスをいつでもDiscordなどのSNSから立ち上げ、終了できるようにする
- EC2のつけっぱなしはコストがかかるので、定刻で自動シャットダウンやアクセスユーザー0の場合に自動シャットダウンなどのアーキテクト構築
Discussion