はじめに
最近、Minecraftサーバー(Spigot1)を運営し始めたので、その動作環境と設定や導入したプラグインについて書こうと思います。
ぼくのかんがえたさいきょうのマイクラサーバーを披露します。
- Minecraft (Spigot) 1.14.4
- バニラ
- ホワイトリスト制
- チャット日本語化
- その他色々
既にサーバーの構築が終わっている方はサーバーの設定やプラグインの導入からご覧ください。
サーバーの構築
Minecraftサーバーとして公式よりも高機能と言われているSpigotサーバーを導入します。
環境
GCPの無料枠2を活用して以下の環境を作成しました。なんの変哲もない環境で変な設定もしていません。
- Ubuntu 18.04.3 LTS
- n1-standard-1 (CPU 1 | 3.75 GB)
インストール
Spigotを動かすにはJava 8 以上が必要3なのでインストールします。
sudo apt-get install openjdk-8-jre-headless
無事Javaがインストールできたら、Spigot本体をビルドします。
https://www.spigotmc.org/wiki/buildtools/ の手順に従って進めていきました。
以下ように実行すると1.14.4
のサーバーが手に入ります。
wget https://hub.spigotmc.org/jenkins/job/BuildTools/lastSuccessfulBuild/artifact/target/BuildTools.jar
java -jar BuildTools.jar --rev 1.14.4
大人の事情4により必ずユーザーがビルドしなければならないようです。
ところが、https://getbukkit.org/download/spigot に堂々とビルド済みファイルが置いてあります。
結果としてspigot-1.14.4.jar
のような実行ファイルが手に入れば成功です。
初回起動
java -jar spigot-1.14.4.jar
初回起動するとすぐに終了すると思います。
実行ファイルと同じディレクトリにeula.txt
が生成されるので、ライセンス条項5に同意できる場合は編集してeula=false
となっている部分をtrueに書き換えます。
#By changing the setting below to TRUE you are indicating your agreement to our EULA (https://account.mojang.com/documents/minecraft_eula).
#Sun Sep 01 00:00:00 UTC 2019
eula=true
もう一度spigot-1.14.4.jar
を起動するとワールドが生成されサーバーが接続待機状態となります。
公開
Minecraftサーバーは25565番ポートで動作するので、25565番ポートを開放して、マシンのグルーバルIPを伝えるとアクセスすることができます。更に今回は所有していたドメインのサブドメインを作ってAレコードを登録しました。
Name | TTL | Type | Value |
---|---|---|---|
craft.example.com | 3600 | A | xxx.xxx.xxx.xxx |
これでドメインを使ってサーバーに接続できます。
ポート開放やドメイン設定が面倒な場合はそれらを使わないサーバーの公開方法もあります。そこでよくHamachi6を使った方法が紹介されていますが、個人的にはngrok7を使うのがおすすめです。
起動スクリプトの作成
与えるメモリの容量を指定してバックグラウンドでサーバーを起動するスクリプトを作ります。
バックグラウンド実行のためにscreen8をインストールします。
sudo apt-get install screen
以下のようなMakefileを作成しました。
start:
screen -d -m -S "spigot" java -Xms1G -Xmx2G -XX:+UseConcMarkSweepGC -jar spigot-1.14.4.jar
これで、make start
でサーバーを起動できます。
サーバーの設定
要求を満たすようにサーバーの設定を変更していきます。
基本設定
server.properties
を以下のように変更しました。重要なのはホワイトリスト化したことだけで、それ以外は個人的な趣味です。
# 見栄を張って最大接続数を少し増やしました
max-players=32
# 安全のためホワイトリスト制に変更
white-list=true
# サーバー紹介文を変更
motd=A Minecraft Server \u00A79[version 1.14.x] By Spigot
spigot.yml
のrestart-script
を自作の起動スクリプトに変更しています9。
settings:
restart-script: make start
ホワイトリスト追加
前項でホワイトリスト化したので、基本的にはホワイトリストにユーザーを追加しなければサーバーに接続できません。
サーバーのコンソールから[username]に追加したいユーザー名指定して以下コマンドを実行します。screenを使っている場合はscreen -r
でアタッチしてCtrl-A Dでデタッチできます。
whitelist add [username]
プラグインの導入
Spigotサーバーは./plugins/
の中に実行ファイルを配置するだけで簡単にプラグインの導入ができます。
LunaChat
チャンネルチャットプラグインらしい10ですが、主にゲーム内のチャットを日本語化するために導入しました。
チャットにローマ字入力すると以下のように変換されます。
https://github.com/ucchyocean/LunaChat/releases からLunaChat.jar
をダウンロードして、./plugins/
の中に配置します。
サーバーを再起動すると./plugins/LunaChat/
の中に設定ファイルが作られています。
例えばconfig.yml
のngword
にはデフォルトで以下のようなNGワードが設定されています。
ngword: ['ちん(こ|ぽ|ちん)']
これに該当するワードをチャットで発言すると伏せ字になります。
当サーバーでは言論の自由を尊重するためNGワードは取っ払っておきました。
LegendaryMessages
ゲーム内の各種メッセージを独自に変更できるプラグイン11です。
これを利用して接続・切断時メッセージをオリジナルにしました。
https://dev.bukkit.org/projects/joinmessages/files からLegendaryMessages.jar
をダウンロードして、./plugins/
の中に配置します。
サーバーを再起動して./plugins/LegendaryMessages/
の中のconfig.yml
を編集して以下のようにしました。
Returning_Join_Message:
Message: '&d%player_name% さん登場!!ヽ(`▽´)/'
Quit_Message:
Message: '&d%player_name% さんがお帰りです(´・ω・`)'
Slack
MinecraftサーバーとSlackと連携するプラグイン12です。
誰かがサーバーに接続するとSlackのチャンネルにメッセージを送るようにしました。
まず、https://my.slack.com/services/new/incoming-webhook にアクセスしてSlackのWebhook URLを取得します。
次に、https://github.com/mastercoms/SlackMC/releases からSlack.jar
をダウンロードして、./plugins/
の中に配置します。
サーバーを再起動して./plugins/Slack/
の中のconfig.yml
を編集してwebhook URLを指定しました。
webhook: https://hooks.slack.com/services/***/***/***
Minecart Speed Plus
トロッコの速度を変更できるプラグイン13です。
以下のようなを設置するとトロッコの速度を定数倍できます。
https://www.spigotmc.org/resources/minecart-speed-plus.69639/ からMinecartSP.jar
をダウンロードして、./plugins/
の中に配置します。
プレーヤーにトロッコの速度を変更させるには権限を与える必要があるので、permissions.yml
に適当な権限を作ってmsp.signs
を許可してやります。
server.basics:
description: Basic permissions
default: true
children:
msp.signs: true
サーバーを再起動すると看板を用いてトロッコの速度が変更できるようになっています。
Dynmap
ブラウザから閲覧できるマップを導入するプラグイン14です。
Minecraftの世界がGoogle MapのようなUIで眺められるようになると思うといいと思います。
https://github.com/webbukkit/dynmap/releases からMinecartSP.jar
をダウンロードして、./plugins/
の中に配置します。
サーバーを再起動して、コンソールから以下のようなコマンドを実行するとマップの描画が始まります。
dynmap fullrender world
Dynmapは8123番ポートで動作するので、8123番ポートを開放してブラウザからhttp://[IP Address]:8123
にアクセスすることで閲覧できます。
しかし、8123番ポートにアクセスするのはどうもイケてないような気がしたので、リバースプロキシを使ってサブディレクトリに80番ポートで公開することにしました。
WebサーバーのNginx15をインストールします。
sudo apt-get install nginx
/etc/nginx/nginx.conf
を編集して/etc/nginx/sites-enabled/
をincludeしないようにコメントアウトします。
http {
...
include /etc/nginx/conf.d/*.conf;
# include /etc/nginx/sites-enabled/*;
}
/etc/nginx/conf.d/
の中に適当な名前のファイルを作成して、/dynmap
にアクセスしたときにDynmapが表示されるように設定します。
server {
listen 80;
listen [::]:80;
server_name minecraft;
# `/dynmap`にアクセスすると8123番ポートのDynmapに繋がります
location /dynmap/ {
proxy_pass http://localhost:8123/;
}
# `/`にアクセスするとホームページが表示されます
location / {
root /home/xxxxx/web;
}
}
root
で指定したディレクトリに適当なindex.html
を追加してホームページを作っておきます。
<h1>Welcome to My Server</h1>
<a href="./dynmap">Dynmap</a>
Nginxを再起動するとhttp://[IP Address]/dynmap
でマップが閲覧できるはずです。
sudo nginx -s reload
最後に
備忘録も兼ねて運営しているサーバーが今の状態になるまでに行ったことをすべて書いてみました。
自分と同じような要求でMinecraftサーバーを運営したいと思っている方々のお役に立てれば幸いです。
-
一度もサーバーが落ちたことがないので動作は未確認ですが ↩