Minecraft Spigot server [1.16.5] をUbuntuから構築 ＋ Plugin [Dynmap, LuckPerms, WorldEdit, WorldGuard, Multiverse-Core, Multiverse-Portals, Multiverse-NetherPortals, Multiverse-inventory, LogBlock,Holographic-Displays]

# はじめに
Ubuntuに限らず、パソコン関連のやり方類はWebサイトをいくつか見る必要があり、場合によっては数十ものサイトを見比べて取捨選択する必要があります。 この記事はそうしたやり方類をまとめて書いていきます。

#### この記事でできること
Spigotサーバーを構築してプラグインも導入します。
### 対象読者

* コマンド操作がわかる人
* コマンド操作がわからない人
* Minecraft Spigot serverを構築したい人

# 目次
1. java のインストール
1. Spigot [1.16.5]
1. Plugins
1. Apache
1. ポート開放
1. 完成

# 1. java のインストール
Spigotに限らず、Minecraft系を動かすには Java が必要なのでインストールします 以下のコマンドを実行すると Java 8 がインストールされます。

```
sudo apt-get -y install openjdk-8-jre-headless
```

# 2. Spigot [1.16.5]
Spigot のインストールから起動までを記載します
### 1. インストールするディレクトリに移動
ダウンロードやビルドをするのでディレクトリを移動しないと大変なことになります（経験談） ですので、ちゃんとインストールするディレクトリに移動してから実行しましょう。。 下記の場合は~/Server/Minecraft/java/1.16.5を作成して移動しています。

```
cd ~/ ; mkdir Server && cd $_ ; mkdir Minecraft && cd $_ ; mkdir java && cd $_ ; mkdir 1.16.5 && cd $_
```

";"はコマンドを区切っています。前のコマンド実行が終了したら後のコマンドが実行されます。

### 2. build
Spigot は必ずユーザーがビルドしなければならないらしいのでちゃんとビルドします。 方法はシンプルです。ビルドツールをサイトから wget でダウンロードしてきて、実行します。 ビルドには時間がかかるので気長に待ちましょう。

* ビルドツールをダウンロード

```
wget https://hub.spigotmc.org/jenkins/job/BuildTools/lastSuccessfulBuild/artifact/target/BuildTools.jar
```

* ビルド

```
java -jar BuildTools.jar --rev 1.16.5
```

ビルドが終了したら、`spigot-1.16.5.jar` 以外は削除しても構いません。

### 3. 起動用シェルスクリプト作成
起動するたびに入力するのは面倒なのでシェルスクリプトを作成しておいておきます。
#### 1. 起動シェルスクリプト

* テキストエディターを開きます

```
gedit
```

* 以下を貼り付けます

```
#!/bin/sh
java -Xms1024M -Xmx8G -jar spigot-1.16.5.jar nogui
```

引数`-Xms[割り当て数]`でメモリの最小割り当て、引数`-Xmx[割り当て数]`でメモリの最大割り当てを指定します。

* 右上のSaveを押して、拡張子`.sh`で保存します。`run.sh`
* コマンドとして実行したいので実行権限を与えます

```
chmod +x run.sh
```

#### 2. ディレクトリを移動しなくても実行できるようにする

このままだと、実行するたびにディレクトリに移動しないといけないので、もう一つシェルスクリプトをつくっておきます
メインディレクトリに移動して gedit を起動します

```
cd ~/ ; gedit
```

サーバーディレクトリに移動して起動用シェルスクリプトを実行するように書きます

```
#!/bin/sh
cd Server/Minecraft/java/1.16.5
./run.sh
```

拡張子`.sh`で保存します `mjrun.sh`
同じように実行権限を与えます

```
chmod +x mjrun.sh
```

### 4. 起動する

* 初回起動

```
./mjrun.sh
```

先ほど作ったシェルスクリプトを実行するとすぐ終了しますので、ディレクトリ内にできた`eula.txt`の中の`eula=false`を`eula=true`に変更します。
完成
ログに`Done`と表示されていれば成功です。
# 3. Plugins
今回は `Dynmap` 、 `LuckPerms` 、 `WorldEdit` 、 `WorldGuard` 、 `Multiverse-(Core, Portals, NetherPortals, inventory)` 、 `LogBlock` を導入します。
### 1. ダウンロード

* LuckPerms
* LogoBlock - spigotmc
* Dynmap - bukkit
* WorldEdit - bukkit
* WorldGuard - bukkit
* Multiverse-Core - bukkit
* Multiverse-Portals - bukkit
* Multiverse-inventory - bukkit
* Multiverse-NetherPortals - bukkit
* Multiverse-Holographic-Displays - bukkit

### 2. plugins ディレクトリに突っ込む
ダウンロードしたプラグインファイルをサーバーディレクトリのpluginsディレクトリに入れます。 Minecraftサーバーコンソールに以下を入力してプラグインが認識しているかを確認します

```
plugins
```

# 4. Apache
Dynmapにアクセスするためにはポート番号を指定する必要がありますが、実際にアクセスする場合にめんどくさいので、80番ポートに来たHTTPアクセスから8123番ポートをつけて飛ばすサイトを構築します
### 1. Apacheをインストール
HTMLの Meta タグの指定先のリンクに飛ばす機能を使うのでHTTPサーバーであるApacheをインストールします インストールするか聞かれるので同意しましょう

```
sudo apt -y install apache2
```
インストールが終わったら起動しているかを以下のコマンドでチェックします

```
sudo systemctl status apache2
```

Active: active(runnning)とあれば正常です。
"Q"を押して終了しましょう
### 2. htmlファイルを書き換える
Apacheのインストールが終わったら、HTMLファイルを書き換えます
Apacheは /var/www/html/ にある index.html ファイルをすでに公開しているので、それを編集します
#### 1. 所有権を取得する
このままでは所有権の関係で直接編集できないのでディレクトリの所有権を以下のコマンドで取得します。

```
sudo chown -R $USER:$USER /var/www/html
```

#### 2. 書き換える
所有権を取得したら、次はhtmlファイルを書き換えます。
テキストエディタでhtmlファイルを開きます。

```
gedit /var/www/html/index.html
```

なんかごちゃごちゃ書いてありますが、使わないので全消しして以下のhtmlを貼り付けます

```html
<!doctype html>
<html lang="en">
<head>
	<meta charset="utf-8">
	<title>Jump to Dynmap</title>
	<meta http-equiv="Refresh" content="0;URL=[IP]:8123">
</head>
<body> </body>
</html>
```
	
プログラム内の ```[IP]``` の部分に自身のグローバルIPアドレス、またはFQDNを挿入します。
※ FQDN や IP の後ろに "/" をつけるとアクセスできません。ポートなので ```http://~~.com:8123 ```となるようにしましょう。
Jump to Dynmap のところはなんでもいいです。
書き換えが完了したら、セーブして終了します。
### 3. 再起動
念のためにApacheを再起動します。

```
sudo systemctl restart apache2
```

# 5. ポート開放
ここまでの作業が終わったら次はUbuntuのポートを開放します。(あくまでOSのポート開放なのでルーターのポート開放は別途必要)
Ubuntuのポート開放が終わったら、ルーターの設定をします。
### 1. ポート開放
ポート開放が必要なポート

* HTTP (Apache) : 80
* Minecraft Spigot server : 25565
* Dynmap : 8123

この３つのポートを開放します。

```
sudo ufw allow 80 ; sudo ufw allow 25565 ; sudo ufw allow 8123
```

### 2. リロード
ポートの設定が終わったらファイアウォールをリロードします

```
sudo ufw reload
```

### 3. ルーターの設定
ルーターのポートを開放しないと、いくらOSでポートが解放できてもルーターのファイアウォールではじかれてしまいますので、ルーターのポート開放をします。 ローカルIPアドレスがわからない場合は以下のコマンドで調べることができます

```
ip -4 a show | grep -oP '(?<=inet\s)\d+(\.\d+){3}'
```

#### 1. DMZ
DMZ はルーターに外部から接続リクエストが来た場合、無条件で指定のローカルIPアドレスの場所に転送する設定です。
ルーターで構築したUbuntu-serverを選択、もしくは割り当てられているローカルIPアドレスを指定します。
#### 2. ポート転送及びポート開放
指定のポートに外部からアクセスがあった場合にどのローカルIPアドレスに転送するかを設定します。
DMZだけでも開放は大丈夫ですが、念のために設定しておきます。
ルーターのNAT転送、詳細設定などの項目に行き、ポート転送、ポート開放などの項目で設定します。
開始値などがある場合はすべて同じポート番号に指定します。
構築したUbuntu-serverを選択、もしくは割り当てられたローカルIPアドレスを指定します。
# 6. 完成
念のために、サーバーを再起動してから実行します。

```
reboot
```

再起動が完了したら、新しいターミナルを開いて、設定した`.sh`ファイルを実行します`mjrun.sh`

```
./mjrun.sh
```

# 以上
Spigotサーバー構築はこれで終了です。
# 参考サイト

https://qiita.com/yoidea/items/b514406e77b984e5d5c1

https://qiita.com/t-morisoba/items/51d2463d41055768eabe

https://qiita.com/naoyukisugi/items/558b116fda95e4f4f808

https://www.digitalocean.com/community/tutorials/how-to-install-the-apache-web-server-on-ubuntu-20-04-ja

https://www.hashimoto-h.wakayama-c.ed.jp/club/suugakubu/method/tyuukyuu/jump.html