server-memo.net

【CentOS 7】ConoHaのVPSでマイクラマルチサーバを構築

      2016/10/12

ConoHaのVPSを使用して、CentOS7.2環境上にMinecraftマルチサーバをインストールする方法です。

「ConoHa」VPSの良いところ

最初にMinecraftサーバを構築する際に、「ConoHa」のVPSを選択するメリットについて説明していきます。

初期費用が無料

まず、一番のメリットは初期費用が掛からないということです。

そのため、お手軽にマイクラサーバを構築し始めることができるんです!
安いのは正義なんです!!

スモールスタートが可能

「ConoHa」のVPSは、あとからサーバをスケールアップ(メモリとCPUを増やす)させることが出来ます。

「もっと快適に!」「もっと一緒に遊べる人数を増やしたい!」といった場合も、サーバをスケールアップさせるという対応が可能になります。(その分月額使用料も上がってしまいますが…)

ストレージがSSDではやい

「ConoHa」のVPSはストレージが全プランSSDとなっているため、HDDと比較すると高速なI/Oの読み書きが可能になっています。

そのため、より快適にマイクラをプレイできることが期待できます!

注意点

ただしConoHaのSSDは容量が50GBしか無いので、MODサーバ(spigot等)や大規模なサーバを立てる場合はSSDを追加する必要があります。

最初から容量が多いVPSを使いたい場合は、さくらのVPS(ストレージをHDDに変更 )などが候補にあがりますので、そちらも検討してみてください。

※さくらのVPSでMinecraftマルチサーバを構築する手順はこちらのページで解説しています。

ConoHaのVPSを借りる

Minecraftのマルチサーバの構築を行っていくために、まずはConoHaを借ります。

最初に「ConoHa」のWebサイトからアカウントを作成します。
ConoHaのWebサイト

サーバの作成

「ConoHa」のアカウント登録が完了しましたら、まずはサーバを作成していきます。

サーバ追加を選択

「ConoHa」のサイトからログインすると、「コントロールパネル」にアクセスできます。

「コントロールパネル」の左側にある「サーバを追加」をクリックすることで、新しくVPSサーバを作成する作業を行うことができるようになります。

conoha_srv_add_00

サーバ設定

サーバを作成するために必要な情報を入力画面が表示されるので、下記の内容を設定していきます。

1.プラン

  • タイプ VPSを選択
  • リージョン 東京を選択
  • メモリ 使用したいメモリを選択

※マイクラをある程度快適に動作させるためには、メモリは2Gをおすすめします。

conoha_srv_add_01

2.イメージ

  • イメージタイプ OSを選択
  • OS CentOSを選択
  • バージョン 7.2(64bit)を選択
  • rootパスワード 設定したいパスワードを入力

conoha_srv_add_01_1

3.オプション

  • 自動バックアップ 無効・有効どちらでも良いです
  • ディスク容量 SSD 50GBを選択
  • 接続許可ポート IPv4 全て許可を選択
  • 接続許可ポート IPv6 無選択
  • SSH Key 使用しない
  • ネームタグ 任意

※IPv4接続許可ポートを「全て許可」にしないと、OSのファイアウォールでマインクラフト用のポート(TCP/25565番)を開けても通信ができないという状況が発生します。

全ての項目を設定しましたら、使用料金を確認して「追加」をクリックしてサーバを作成します。

conoha_srv_add_02

30秒~1分ぐらいでCentOSがインストールされたサーバが完成します!

conoha_srv_add_03

ネームタグをクリックするとサーバのネットワーク情報が表示されるので、IPアドレスを確認してTeraTerm等のSSHクライアントでサーバに接続してください。

接続するユーザは「root」ユーザで接続することができます。

OS設定

Mincraftマルチサーバをインストールする前に、下記の設定を行っていきます。

  • Minecraft動作用ユーザ作成
  • SSH設定変更
  • ファイアウォール設定変更

Minecraft動作用ユーザ作成

「root」ユーザでMinecraftのマルチサーバを動作させるのは、セキュリティ上好ましくないため専用のユーザを作成します。

今回は「mcadmin」というユーザを作成していきますが、ユーザ名に決まりはないのでおす好きなユーザを作成してくだい。

# adduser mcadmin
# passwd mcadmin

SSH設定

SSHはセキュリティ上の観点から下記の設定を行っていきます。

  • rootユーザログイン禁止
  • 待ち受けポート番号変更

設定はファイルは「/etc/ssh/sshd_config」なので、バックアップを取ってから編集作業を行っていきます。

# cp -p /etc/ssh/sshd_config /etc/ssh/sshd_config_yyyymmdd
# vi /etc/ssh/sshd_config

rootログインの禁止設定

「root」ユーザでのログインを許可しておくと、「root」のパスワードが割り出されただけでサーバのすべてを乗っ取られてしまうので、「root」ユーザが直接SSHでログインを禁止する設定を行っていきます。

変更前
PermitRootLogin yes
変更後
PermitRootLogin no

ポート番号変更設定

通常SSHは「22」番ポートで接続しますが、このポートへは毎日結構な数のブルートフォースアタックやってきます。

その対応として、待ち受けポートを変更して攻撃を受ける機会を減らしたいと思います。

今回は「12222」番ポートに変更していますが、特に決まりはないので使用していないお好きなポート番号を指定してください。

変更前
Port 22
変更後
Port 12222

※「0〜1023」番ポートは事前に予約されているので使用できません。

設定反映

設定が完了しましたら、設定を反映させるために「sshd」を再起動させます。

# systemctl restart sshd
注意!!

この段階でSSH接続を切断してしまうと、ファイアウォールの設定を変更するまでSSHで接続することができなくなってしまうので、現在の接続は切断しないようにしておいてください。

もしSSHの接続が切れてしまった場合は、「ConoHa」のコントロールパネルから「サーバ」-「ネームタグ」をクリックしてから「コンソール」をクリックすると、コンソールを表示させることができるので、こちらからサーバにログインして作業を行ってください。

ファイアウォール(firewalld)設定

SSHの設定が完了しましたら、次にファイアウォール(firewalld)の設定を行ってきます。

firewalldの初期状態は外部からの接続は「dhcpv6-client」と「ssh」用のポートしか許可されていませんので、下記の設定を行っていきます。

  • 変更後のSSHポート(12222)開放
  • 通常のSSHポート(22)を閉じる
  • minecraftポート(25565/tcp)開放

変更後のSSHポート開放

SSHの設定の際に変更したポートで通信できるように設定を行います。

# firewall-cmd --permanent --add-port=12222/tcp
success

SSHのポートを「12222」番以外に設定している場合は、適宜読み替えて設定を行ってください。

通常ののSSHポートを閉じる

はじめから設定されている「ssh」のポートは使用しないため、設定を削除しておきます。

# firewall-cmd --permanent --remove-service=ssh
success

minecraftポート開放

最後に「Minecraftマルチサーバ」で使用する「25565」番ポートを開放して、通信が出来るように設定を行います。

# firewall-cmd --permanent --add-port=25565/tcp
success

設定反映

上記の設定を「firewalld」に反映させるために「reload」します。

# firewall-cmd --reload
success
設定確認

設定が反映されているか「firewall-cmd --list-all」コマンドで確認します。

「servcices」と「ports」の部分を確認して、設定が反映されているとこを確認してください。

# firewall-cmd --list-all
public (default, active)
  interfaces: eth0
  sources:
  services: dhcpv6-client     # sshが削除されているか確認
  ports: 12222/tcp 25565/tcp  # sshとMinecraftのポートが追加されているか確認
  masquerade: no
  forward-ports:
  icmp-blocks:
  rich rules:

動作確認

ここまでの動作確認として、新たにSSHクライアントを起動して下記の動作確認をおこないます。

  • 変更したポートでログインできることの確認
  • rootユーザでログインできないことの確認
  • 22番ポートでログインできないことの確認

ログインの確認は「minecraft」を動作させるために作成したユーザで行えます。

OSアップデート

「SSH」と「firewalld」の動作確認に問題がなければ、OSのアップデートを行いパッケージを最新の状態にしておきます。

# yum -y update

サーバ再起動

OSのアップデートが終わったらサーバを再起動しましょう。

# reboot

Minecraftマルチサーバインストール

OS側の設定が完了したので、いよいよ「Minecraftマルチサーバ」をインストールしていきます。

作業の流れを簡単に説明すると下記のようになります。

  • javaインストール
  • screenインストール
  • Minecraftイストールディレクトリ作成
  • Minecraftインストール

javaインストール

まずは、「Minecraftマルチサーバ」を動作させるために必要な「java」をインストールします。

# yum -y install java

screenインストール

今回は「screen」を使用して、その仮想端末上で「Minecraftマルチサーバ」を動作させていきますので、こちらもインストールしておきます。

# yum -y install screen

Minecraftインストールディレクトリ作成

「Minecraftマルチサーバ」をインストールするディレクトリを作成します。

今回は「/opt/minecraft」ディレクトリを作成して、そこにインストールを行ってきますが、インストールするディレクトリは特に決まりは無いので、好みの場所にディレクトリを作成してもらって構いません。

ディレクトリ作成後は、所有者をminecraft動作用に作成したユーザに変更しておいてください。

# mkdir /opt/minecraft
# chown mcadmin:mcadmin /opt/minecraft/

Minecraftマルチサーバインストール

ここからの作業はminecraft動作用ユーザで行っていきます。

minecraft_serverダウンロード

インストール用に作成したディレクトリに移動後、「wget」を使用してMinecraft_server(マルチサーバ)のjarファイルをダウンロードしてきます。

ダウンロード用のURLは下記ページで確認できます。
https://minecraft.net/ja/download/server

minecraft_download_00

ウィンドウズであれば、赤枠部分を右クリックして「リンクのアドレスをコピー」でURLをコピーすることが出来ます。

# su - mcadmin
$ cd /opt/minecraft/
$ wget https://s3.amazonaws.com/Minecraft.Download/versions/1.10.2/minecraft_server.1.10.2.jar
jarファイルのコピー

ダウンロードしてきたjarファイルの名前を「minecraft_server.jar」という名前でコピーし、もとのファイルはバックアップとして保存して今後はこちらの方を使用していきます。

$ cp -p minecraft_server.1.10.2.jar minecraft_server.jar

初期設定

まずは、下記コマンドでMinecraftマルチサーバを起動させます。

java -Xms1024M -Xmx1024M -jar minecraft_server.jar nogui

初回起動時は下記のように「Stopping server」と表示されて起動が失敗しますが、これは「eula.txt」が存在せず、EULA(使用許諾契約)に同意していないためです。

$ java -Xms1024M -Xmx1024M -jar minecraft_server.jar nogui
[15:33:39] [Server thread/INFO]: Starting minecraft server version 1.10.2
[15:33:39] [Server thread/INFO]: Loading properties
[15:33:39] [Server thread/WARN]: server.properties does not exist
[15:33:39] [Server thread/INFO]: Generating new properties file
[15:33:39] [Server thread/WARN]: Failed to load eula.txt
[15:33:39] [Server thread/INFO]: You need to agree to the EULA in order to run the server. Go to eula.txt for more info.
[15:33:39] [Server thread/INFO]: Stopping server

一度「Minecraft_server.jar」を起動すると「eula.txt」ファイルやその他必要な設定ファイルやディレクトリが作成されます。

EULA(使用許諾契約)同意

作成された「eula.txt」を編集してEULA(使用許諾契約)に同意します。

$ vi eula.txt
変更前
eula=false
変更後
eula=true

動作確認

EULA(使用許諾契約)同意の設定が終わりましたら、再度「minecraft_server.jar」を起動させてマインクラフトマルチサーバの動作確認を行っていきます。

$ java -Xms1024M -Xmx1024M -jar minecraft_server.jar nogui

#####  省略  #####

[15:35:21] [Server thread/INFO]: Preparing spawn area: 76%
[15:35:22] [Server thread/INFO]: Preparing spawn area: 93%
[15:35:23] [Server thread/INFO]: Done (7.501s)! For help, type "help" or "?"

上記のように「Done」と表示されていれば、正常に起動が完了していますので、マイクラのクライアントからサーバに接続できるか確認してください。

自動起動設定

Minecraftマルチサーバの動作確認が完了しましたら、次は自動起動の設定を行っていきます。

Minecraftサーバが動作しているコンソール上で、「stop」と入力してMinecraftサーバを停止させます。

stop
[15:43:08] [Server thread/INFO]: Stopping the server
[15:43:08] [Server thread/INFO]: Stopping server
[15:43:08] [Server thread/INFO]: Saving players
[15:43:08] [Server thread/INFO]: Saving worlds
[15:43:08] [Server thread/INFO]: Saving chunks for level 'world'/Overworld
[15:43:08] [Server thread/INFO]: Saving chunks for level 'world'/Nether
[15:43:08] [Server thread/INFO]: Saving chunks for level 'world'/The End

「CentOS7」からは「systemd」でアプリケーションの起動・停止・自動起動等が管理されているので、それ用に起動と停止のスクリプトを作成していきます。

スクリプトはこちらのサイトのスクリプトを参考にして作成しました。

起動スクリプト作成

まずは起動スクリプトを「mc_start.sh」という名前で作成していきます。

$ vi mc_start.sh
変数説明

起動スクリプト使われている変数の中で、設定が必要な変数をそれぞれ説明します。

変数 設定内容
USERNAME minecraft_server.jar実行ユーザを設定
SERVICE minecraft_server実行ファイルを設定(minecraft_server.jar)
SCNAME screenに指定する名前を設定
MC_PATH minecraft_server.jarがインストールされているディレクトリを設定
XMX 最大メモリ使用量を設定
XMS 初期メモリ使用量を設定
XMX(最大メモリ使用量)を超えないように注意
メモリ使用量について

「XMX」と「XMS」については、「minecraft_server.jar」が使用するメモリの量になりますので、サーバに割り当てられているメモリと相談して設定するのですが、サーバに積んでいるメモリ全部割り当ててしまうと、OS(システム)が使用する分なくなってしまうので、この値を変更する場合はOSが使用するメモリ分は残るように設定してください。

起動スクリプト
#!/bin/bash

USERNAME='mcadmin'
SERVICE='minecraft_server.jar'
SCNAME='minecraft'
MC_PATH='/opt/minecraft'

XMX="1024M"
XMS="1024M"

cd $MC_PATH

ME=`whoami`

if [ $ME == $USERNAME ] ; then
if pgrep -u $USERNAME -f $SERVICE > /dev/null
then
echo "$SERVICE is already running!"
else
echo "Starting $SERVICE..."
screen -AmdS $SCNAME java -Xmx$XMX -Xms$XMS -jar $SERVICE nogui
fi
else
echo "Please run the minecraft user."
fi
echo "Please run the minecraft user."
fi

※起動用ユーザやインストールディレクトリを変更している方は適宜読み替えてください。

パーミッション変更

作成したスクリプトのパーミッションを「744」に変更して、minecraft動作用ユーザのみが実行できるように設定を行います。

$ chmod 744 mc_start.sh

停止スクリプト作成

次に停止用のスクリプトを「mc_stop.sh」という名前で作成していきます。

$ vi mc_stop.sh
変数説明

停止スクリプト使われている変数の中で、設定が必要な変数をそれぞれ説明します。

変数 設定内容
USERNAME minecraft_server.jar実行ユーザを設定
SERVICE minecraft_server実行ファイル(minecraft_server.jar)を設定
SCNAME screenに指定する名前(起動スクリプトで設定した名前)を設定
MC_PATH minecraft_server.jarがインストールされているディレクトリを設定
#!/bin/bash

USERNAME='mcadmin'
SERVICE='minecraft_server.jar'
SCNAME='minecraft'
MC_PATH='/opt/minecraft'

cd $MC_PATH

ME=`whoami`

if [ $ME == $USERNAME ] ; then
  if pgrep -u $USERNAME -f $SERVICE > /dev/null
    then
      echo "Stopping $SERVICE"
      screen -p 0 -S $SCNAME -X eval 'stuff "say SERVER SHUTTING DOWN IN 10 SECONDS. Saving map..."\015'
      screen -p 0 -S $SCNAME -X eval 'stuff "save-all"\015'
      sleep 10
      screen -p 0 -S $SCNAME -X eval 'stuff "stop"\015'
      sleep 10
      echo "Stopped minecraftserver"
    else
      echo "$SERVICE was not runnning."
  fi
else
  echo "Please run the minecraft user."
fi

※起動用ユーザやインストールディレクトリを変更している方は適宜読み替えてください。

パーミッションの変更

作成したスクリプトのパーミッションを「744」に変更して、minecraft動作用ユーザのみが実行できるように設定を行います。

$ chmod 744 mc_stop.sh

スクリプト動作確認

起動と停止スクリプトが完成しましたら、それぞれのスクリプトの動作確認を行っていきます。

起動スクリプト動作確認

「mc_start.sh」スクリプトを実行して、Minecraftサーバが起動するかどうか確認します。

$ ./mc_start.sh
仮想端末状況確認

今回は「screen」の仮想端末上でminecraftサーバが動作するようにスクリプトを作成しているため、起動スクリプトを実行した後に「screen -ls」コマンドで仮想端末の状況を確認します。

$ screen -ls
There is a screen on:
        10904.minecraft (Detached)
1 Socket in /var/run/screen/S-mcadmin.

正常に起動スクリプトが動作してれば、起動スクリプト内で設定したscreenの名前で仮想端末が起動してるはずです。

仮想端末に接続(Attach)

次にMinecraftサーバ用に起動している仮想端末に接続して、正常にMinecraftサーバが起動しているかどうかの確認を行います。

仮想端末に接続するためには「screen -r スクリーン名」コマンドを使用します。

$ screen -r minecraft

[15:53:32] [Server thread/INFO]: Starting Minecraft server on *:25565
[15:53:32] [Server thread/INFO]: Using epoll channel type
[15:53:33] [Server thread/INFO]: Preparing level "world"
[15:53:33] [Server thread/INFO]: Preparing start region for level 0
[15:53:34] [Server thread/INFO]: Preparing spawn area: 65%
[15:53:34] [Server thread/INFO]: Done (1.453s)! For help, type "help" or "?"
仮想端末から抜ける(Detach)

Minecraftサーバが無事起動していることを確認しましたら、いったん接続している仮想端末から抜け(Detach)ておきます。

minecraftサーバが実行されている仮想端末から抜けるには、「Ctrl」+「a」を押下した後に「d」を押下することで仮想端末から抜ける(Detach)ことができます。

停止スクリプト動作確認

起動スクリプトの動作確認が終わりましたら、次に停止スクリプトの動作確認を行っていきます。

$ ./mc_stop.sh
screen起動状況確認

停止スクリプトの実行が完了してMinecraftサーバの動作が停止したら、仮想端末も停止するので「screen -ls」コマンドを実行して、仮想端末の起動状況を確認します。

$ screen -ls
No Sockets found in /var/run/screen/S-mcadmin.

minecraftサーバ用の仮想端末が動作停止している場合は、「No Sockets found」と表示されて仮想端末が起動していないことが確認できます。

自動起動設定

ここからの作業は「root」ユーザで行っていきます。

自動起動設定ファイル作成

起動・停止スクリプト動作確認で問題がなければ「systemd」用の自動起動設定ファイルを作成していくのですが、このファイルは「/etc/systemd/system/サービス名.service」という名前で作成する必要があります。

今回は「/etc/systemd/system/minecraft.service」という名前のファイルを作成していきます。

$ su -
# vi  /etc/systemd/system/minecraft.service
変数説明

設定が必要な変数について説明します。

変数 設定内容
User minecraft_server.jar実行ユーザを設定
ExecStart minecraftサーバ起動スクリプトを指定
ExecStop minecraftサーバ停止スクリプトを指定
設定ファイル内容
[Unit]
Description=Minecraft Server
After=network.target local-fs.target

[Service]
Type=forking
User=mcadmin
ExecStart=/opt/minecraft/mc_start.sh
ExecStop=/opt/minecraft/mc_stop.sh

[Install]
WantedBy=multi-user.target

自動設定

自動起動設定ファイルを作成しましたら、「systemctl」コマンドを使用して自動起動設定を行います。

# systemctl enable minecraft

自動起動設定の確認

設定ファイルの作成が完了しましたら、サーバを再起動して自動的にマイクラが起動するかを確認して下さい。

# reboot

サーバの再起動が完了しましたら、マインクラフトクライアントからサーバに接続しログインできるか確認してください。

無事ログインできましたら作業完了となります。
おつかれさまでした。

 - インストール