3
2

More than 1 year has passed since last update.

MinecraftサーバをAWSで立ててみた

Posted at

はじめに

AWSの勉強をしているうちに、「実際なにかサーバ運用してみたほうが勉強になるのでは?」と思い、マイクラサーバを立ててみることにしました。
小さな構成でまずはサーバを構築してみて、徐々にIaC、監視、可用性追求等していきAWSを使ったサーバ運用を体験できればなと思っています。

とりあえず現時点では深いことを考えず、まずは初回ということでシンプルにマイクラサーバを構築していきたいと思います。

目次

  1. Minecraftサーバとは?
  2. ネットワーク/サーバ構成
  3. Minecraftサーバ構築
  4. 参考文献

Minecraft サーバとは?

実はそんなにマイクラをやったことありません!!!!!
全くプレイしたことないわけではないのですが、マイクラ自体に詳しいわけではないです

(裏目標としてサーバたててエンドラ討伐目指すか...)

というわけで、そもそもMinecraftにおけるサーバが何たるかを調べてみました。
minecraft japan wiki

Minecraftにおけるサーバーとは、マルチプレイをする手段を提供するソフトウエアを指す。
Minecraftにおいて、サーバーを建てることがマルチプレイをする主な手段となっている。

なるほど、まあ想像通りですね。
ライセンスも念の為確認しましたが、サーバを公開しても、収益化をするようなことをしなければ問題なさそうです。

また、MinecraftサーバはJavaで動作し構築難易度も高くなさそうなので、サーバ運用を試したいという目的にはぴったりな気がしました。

ネットワーク/サーバ構成

AWSの勉強ということで、もちろんマイクラサーバはAWS上に構築していきます。
まず構成図は以下です。
minecraft_server.jpg

ネットワーク構成については今回はざっくりポイントだけ記載しようと思います(詳細は次回とします)

  • 今後リソースが増えることを想定して2AZ構成でSubnetも事前に作成しておく
  • 運用コストをできるだけ下げたいのでNat Instanceを1台のみ作成(AZ 1cのSubnetからもこのNat Instance経由でインターネットに出ていく)
  • SSHはSSM経由で行うこととする
  • なんやかんやできるAnsibleサーバ作っておく

Minecraftサーバ構築

本記事の本題、Minecraftサーバ構築やっていきたいと思います。

今回は以下のEC2インスタンスのスペックで作成してみました。今後スペック等は変更するかもしれませんが、まずはMinecraftサーバの構築手順の確認ということで深くは考えずに選定しました。

項目
インスタンスタイプ t3.small(vCPU:2, メモリ:2GiB)
OS Alma Linux 8

インスタンスの作成後、サーバに乗り込みMinecraftサーバのインストール設定を実施します。

Javaのインストール

以下コマンドでJavaのインストールを実施します。
現時点(2022.12.20)で最新バージョンのMinecraft(1.19.x)の動作にはJava16が必要とのことだが、現時点でのJava最新バージョンがJava17であるためこちらをインストール。(Java17でも正常に動作することを確認できました)

sudo dnf -y update 
sudo dnf -y install java-17-openjdk-headless-1:17.0.5.0.8-2.el8_6.x86_64

Minecraftのインストール

以下コマンドでMinecraftのインストールを行います。

mkdir /etc/minecraft/
cd /etc/minecraft/
sudo java -Xmx1024M -jar server.jar nogui

初回は必ずエラーでストップします。

Starting net.minecraft.server.Main
[17:46:10] [ServerMain/INFO]: Building unoptimized datafixer
[17:46:13] [ServerMain/ERROR]: Failed to load properties from file: server.properties
[17:46:13] [ServerMain/WARN]: Failed to load eula.txt
[17:46:13] [ServerMain/INFO]: You need to agree to the EULA in order to run the server. Go to eula.txt for more info.

ライセンスに同意する旨を記載するため、同ディレクトリに作成されたeula.txtを編集します。

eula=false (削除)
eula=true  (追加)

もう一度起動し、動作することを確認します。

sudo java -Xmx1024M -jar server.jar nogui
Starting net.minecraft.server.Main
[17:53:02] [ServerMain/INFO]: Building unoptimized datafixer
[17:53:04] [ServerMain/INFO]: Environment: authHost='https://authserver.mojang.com', accountsHost='https://api.mojang.com', sessionHost='https://sessionserver.mojang.com', servicesHost='https://api.minecraftservices.com', name='PROD'
[17:53:09] [ServerMain/INFO]: Loaded 7 recipes
[17:53:10] [ServerMain/INFO]: Loaded 1179 advancements
[17:53:11] [Server thread/INFO]: Starting minecraft server version 1.19.3

...

デーモン化

実行できることは確認できたので、デーモン化の設定を行います。
まずは実行ユーザを作成します。

useradd -M minecraft

起動用スクリプトを作成します。

touch /etc/minecraft/boot.sh
echo '#!/bin/bash' >> /etc/minecraft/boot.sh
echo 'java -Xms$XMS_SIZE -Xmx$XMX_SIZE -jar /etc/minecraft/server.jar nogui' >> /etc/minecraft/boot.sh
chmod +x /etc/minecraft/boot.sh

Javaの実行メモリ容量指定用の環境変数ファイルを作成します。

touch /etc/minecraft/environments
echo 'XMS_SIZE=1024M' >> /etc/minecraft/environments
echo 'XMX_SIZE=1024M' >> /etc/minecraft/environments

minecraftユーザでサービス実行するので/etc/minecraft配下の所有者を変更します。

chown -R minecraft:minecraft /etc/minecraft

最後にサービス定義ファイルを作成します。

vi /etc/systemd/system/minecraft-server.service
minecraft-server.service
[Unit]
Description=Minecraft Server
After=network-online.target

[Service]
ExecStart=/bin/bash /etc/minecraft/boot.sh
EnvironmentFile=/etc/minecraft/environments
WorkingDirectory=/etc/minecraft
Restart=always
User=minecraft
Group=minecraft

[Install]
WantedBy=multi-user.target

サービス起動/接続確認

以下コマンドでminecraft-serverサービスを起動します。
(ついでに自動起動設定もしておきます)

sudo systemctl enable minecraft-server
sudo systemctl start minecraft-server
sudo systemctl status minecraft-sever
● minecraft-server.service - Minecraft Server
   Loaded: loaded (/etc/systemd/system/minecraft-server.service; enabled; vendor preset: disabled)
   Active: active (running) since Wed 2022-12-28 06:54:37 UTC; 41min ago
 Main PID: 3032 (bash)
    Tasks: 30 (limit: 12022)
   Memory: 1.3G
   CGroup: /system.slice/minecraft-server.service
           ├─3032 /bin/bash /etc/minecraft/boot.sh
           └─3033 java -Xms1024M -Xmx1024M -jar /etc/minecraft/server.jar nogui

Dec 28 06:55:13 ip-10-8-3-180.ec2.internal bash[3033]: [06:55:13] [Worker-Main-1/INFO]: Preparing spawn area: 0%
Dec 28 06:55:14 ip-10-8-3-180.ec2.internal bash[3033]: [06:55:14] [Worker-Main-1/INFO]: Preparing spawn area: 0%
Dec 28 06:55:14 ip-10-8-3-180.ec2.internal bash[3033]: [06:55:14] [Worker-Main-1/INFO]: Preparing spawn area: 96%
Dec 28 06:55:14 ip-10-8-3-180.ec2.internal bash[3033]: [06:55:14] [Server thread/INFO]: Time elapsed: 13448 ms
Dec 28 06:55:14 ip-10-8-3-180.ec2.internal bash[3033]: [06:55:14] [Server thread/INFO]: Done (22.262s)! For help, type "help"

クライアントからの接続確認し、ワールドで遊べることを確認できました。

minecraft_connected.PNG

参考文献

3
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
2