NRIネットコム社員が様々な視点で、日々の気づきやナレッジを発信するメディアです

注目のタグ

    インフラ勉強のためにMinecraftサーバを簡易的に構築してみた

    1. はじめに

    2025年4月に新卒で入社しました、松浦です。私は現在、システム基盤の分野で業務に携わっています。

    新人研修ではあまりシステム基盤(インフラ)について触れないまま、インフラ系の業務に携わるチームに配属となり、当初はわからないことの連続でした。

    そこで、インフラの勉強・慣れも兼ねて、Linuxで動くサーバを構築してみました。身近なテーマを選びたく、当時同期の人とプレイしていた「Minecraft」の簡易的なサーバを構築することに挑戦しました。

    Minecraftとは

    Minecraftはブロックでできた世界を自由に冒険できるサンドボックス型のゲームです。こちらのゲームでは、マルチプレイ用にサーバを構築して複数人でプレイすることができます。 www.minecraft.net

    ※本記事でのサーバ構築は技術検証を目的としたものであり、商用利用や実運用を前提とした内容ではありません。利用規約、並びにエンドユーザ使用許諾契約書については、下記URLを参照し、それに準拠しています。 www.minecraft.net

    2. サーバの構築とは?

    2-1. サーバの調達

    サーバとは、ネットワーク上で他のコンピュータ(クライアント)にサービスや機能を提供するコンピュータを指します。見たいページを返答するWebサーバや、データを管理するデータベース(DB)サーバなどが主な例です。

    このようなサーバを調達するには、大まかに以下の方法があります。

    1. 物理的なサーバを購入する
    2. 物理的なサーバをレンタルする
    3. クラウドサーバを利用する

    自前でサーバを調達するには初期投資がかかること、業務でクラウド上のサーバに触れる機会があることの2つの理由から、今回は「3. クラウドサーバを利用する」方法で実施しました。

    2-2. サーバを稼働させるために

    サーバを稼働させるためには、

    • 物理的な機器、ネットワーク
    • システムの土台となる「Operating System(OS)」
    • OSとアプリケーションを仲介してくれる「ミドルウェア」
    • 具体的なサービスを提供してくれる「アプリケーション」

    と、下から上に積み上げていくレイヤ構造でサーバが構成されます。簡単に表すと、以下の表のようなイメージです。

    名称 Minecraftサーバ Webアプリケーション
    実行環境
    基盤ソフトウェア
    Java 21(OpenJDK/Java実行環境) Apache(Webサーバ), MySQL(DB)
    OS Windows / Linux 等
    ハードウェア・仮想基盤

    「3. クラウドサーバを利用する」方法には、物理機器の管理、OSのインストールや基本設定までクラウド事業者が提供してくれるサービスがあります。このサービスの利用者は、ミドルウェアやアプリケーションの構築に専念できます。OSの種類やバージョンを選ぶだけで、数分でその環境が用意されるため便利です。

    今回の構築では実務で使うことが多い、Amazon Web Services(AWS)を利用してサーバを構築しました。AWSが提供するクラウドサーバは、Elastic Compute Cloud(通称:EC2)というサービスが該当します。

    3. サーバを構築する

    3-1. EC2を作成する

    今回の構築のイメージはざっくりと以下のようになります。

    EC2を利用するためにはAWS上に仮想ネットワーク(VPC)を作成する必要があります。また、インターネット通信をするにも諸々の設定が必要です。(Internet Gatewayの作成、ルートテーブル設定など…。)

    ただし、AWSアカウント作成時に自動で作成される「デフォルトVPC」を利用するため、ここではVPC設定の詳細を割愛します。また、インスタンスの作成方法については、簡単に画像で紹介するまでに留めておきます。(ものすごい文章量になってしまうので…。)


    OSやCPU、メモリサイズを選定する

    OSは業務で携わることが多いRedHat系のOSと互換性のある「Alma Linux」を選んでいます。


    ネットワーク(通信)の設定をする AWSのセキュリティグループという設定項目で、接続元を自分のIPアドレスからの特定ポートのみの通信に制限しています。昨今ではセキュリティ対策は重要課題のため、十分に留意する必要があります。

    EC2インスタンスの作成に成功すると、以下のような画面が確認できます!

    パブリックIPv4アドレスはサーバへの接続に使います。固定のパブリックIPv4アドレスを使わない限り、IPv4アドレスはEC2インスタンスの再起動をすると変わることもあるので、サーバに接続する際にはこの画面を確認します。

    3-2. EC2インスタンスに接続をする

    EC2を起動することができたら、ミドルウェアとアプリケーションをインストールします。

    そのためには、EC2にリモート接続する必要があります。リモート接続の方法は様々ありますが、今回はtera termというクライアントツールを使用して、EC2インスタンス(サーバ)に接続します。

    teratermproject.github.io

    まず、接続先にAWSで確認したパブリックIPを入力し、[OK]を押して接続します。

    次に、ユーザ名に[ec2-user]を入力します。このユーザはEC2作成時に自動で作成されるユーザです。認証方式は鍵を選択します。AWS上でキーペアを作成した際にダウンロードされた鍵を使用します。

    3-3. ミドルウェアとアプリケーションを導入する

    いよいよ、サーバ内での作業です。サーバを稼働させるために必要なミドルウェアとアプリケーションをインストールし、起動する作業を実施していきます。

    初めに、サーバ内のRPMパッケージを最適化するためのコマンドを実行します。パッケージとはサーバ内の「ソフトウェアを管理するための単位」のことで、OSによって管理されています。また、OSによってこのパッケージを管理するツールが異なります。

    OSの系列 パッケージ管理ツール
    Debian系 APT(Advanced Package Tool)
    RedHat系 RPM(Red Hat Package Manager)

    [3-1. ]で選んだ「AlmaLinux」はRedHat系のOSで、パッケージ管理ツールにRPMを用いてサーバ内のソフトウェアを管理しています。

    RPMパッケージはセキュリティやバグ修正等の観点から最新化しておくことが望ましいとされています。dnf(旧yum)と呼ばれるパッケージ管理コマンドを実行してパッケージを最新化します。RPMパッケージの配布元は、RedHat社やその他サードパーティなどが存在しますが、今回はRedHat社が提供するリポジトリからダウンロードします。

    パッケージ間には依存関係が存在するので、すべてを最新化してしまうと予期せず不具合なども起こってしまう場合もあります。実際のシステム運用では、パッケージの管理・最適化は慎重に行う必要があります。

    # サーバ内のパッケージを最新化しておく(セキュリティパッチなどが最適化される)
    sudo dnf update
    
    # アプリケーションを動かすために必要なパッケージをインストールする
    # javaのバージョンは、導入予定のアプリケーションによって指定がある。(今回はjava21)
    sudo dnf install wget java-21-openjdk

    dnfコマンドは、インストールしたいソフトウェア・ミドルウェアに必要な周辺パッケージも自動でインストールしてくれます。(パッケージ間の依存関係には、依然として留意する必要はあります。)

    インストールをしたパッケージについての解説は以下です。

    パッケージ 説明
    wget HTTP/HTTPSでファイルを取得するコマンド。Minecraftサーバ用のアプリケーションをインターネットからサーバにダウンロードするために導入。
    java-21-openjdk javaの実行環境。Minecraftサーバ用アプリケーションを実行したり、拡張機能を使用・開発するために使う。

    ミドルウェアのインストールも完了したため、残りはサーバのアプリケーションをインストールするのみです!

    公式が配布しているリンクより、ダウンロードをしてきます。

    www.minecraft.net

    # アプリケーションをDLするためのディレクトリを作成
    sudo mkdir /opt/minecraft
    
    # インターネット経由でMinecraftサーバに必要なファイルをDLする
    sudo wget [Minecraft公式が配布しているjarファイルをDLするURL]
    
    # 先ほど作ったディレクトリにファイルを移動させる
    sudo mv server.jar /opt/minecraft

    ダウンロードが完了しました。早速、javaアプリケーションを実行してみます。

    # DLしてきたアプリケーションを実行
    # 初回起動は必ず失敗し、サーバが立ち上がらない。
    java -Xmx4G -Xms4G -jar /opt/minecraft/server.jar nogui

    一度起動すると、server.jarのあるディレクトリに複数のファイルが作成されます。しかし、eula(利用規約)に同意しないと、サーバアプリケーションが立ち上がらないようになっているため、規約に同意する必要があります。

    アプリケーションを配置したディレクトリに、eula.txtというファイルが作成されているので、利用規約を読んで理解したのち、ファイルの中身を下記のように書き込みます。

    これで、再度「java -Xmx4G -Xms4G -jar server.jar nogui」を実行するとサーバが起動されて、ゲームアプリの方で接続が可能になります。

    しかし、サーバとの遠隔接続(セッション)が切れると、設定をしない限りアプリケーションは終了してしまうので、アプリケーションをバックグラウンドで常に実行させる必要があります。

    3-4. アプリケーションをバックグラウンドで動作させる

    サーバが起動した際、バックグラウンドでアプリケーションを実行させるための手段として、systemdのサービスユニットを作成し、サービスとして登録する必要があります。

    systemdとは Linux で動くサービス/アプリケーションの起動の設定を管理するものです。serviceファイルは、systemdに「このアプリをどう起動するか」を教える設定ファイルです。これらを活用することで、以下のことが実現できます。

    • EC2インスタンスの起動時に、アプリケーションを自動で起動させる。
    • サーバ起動中に、アプリケーションが何らかの原因でダウンした際、自動で起動処理をしてくれる。(Restartオプション)

    ファイル名を「gameserver.service」(拡張子が.serviceなら何でもOK)として、「/etc/systemd/system/」ディレクトリに配置します。また、ファイルに以下の設定を書き込みます。

    serviceファイルの編集が終わったら、以下のコマンドを実行して、サービスとして登録します。

    # systemdに新しく作成したサービスファイルの内容を反映させる必要がある。
    # ファイルを書き込んだ後に、サービスを再読み込みさせるコマンド
    sudo systemctl daemon-reload
    
    # システム起動時にサービスを自動起動させるコマンド
    sudo systemctl enable gameserver
    
    # サービスを再起動する
    sudo systemctl restart gameserver
    
    # サービスの状態を確認するコマンド(Activeであれば起動中)
    sudo systemctl status gameserver

    Activeの状態になれば、アプリケーションがバックグラウンドで常に実行状態になります!これで、EC2インスタンスを起動し、パブリックIPアドレスを接続先とすれば、いつでもゲームサーバとして接続ができる状態の完成です。(パブリックIPはEC2インスタンスの再起動などで変わることがあるので、)

    4.おわりに

    4-1. 実際にMinecraftから接続してみる

    実際にゲーム画面で接続してみました!

    4-2. 雑感

    実際にサーバを構築しようとすると、学んだITスキルを網羅的に活用することが求められ、とても勉強になりました。今回は簡単なMinecraftサーバ構築でしたが、今後は様々なサーバ構築も実践していけるよう勉強してみようと思います。

    執筆者:松浦 悠人
    システムエンジニア