minecraft server 1.20.1 を ubuntu server 22.04 で動作させる

ubuntu server 22.04をminecraft serverとして動作させます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/201787/4e2125d5-6d25-d752-755b-9a34b115e357.png)

# 環境
**Server**
・Ubuntu Server 22.04.2 LTS
・MINECRAFT: JAVA EDITION 1.20.1

**Client**
・Windows 11 Pro
・MINECRAFT: Launcher for Windows 10.0.2.5.9
・MINECRAFT: JAVA EDITION 1.20.1

# 構成
自宅ローカル環境のubuntu serverにてminecraftを動作させ、クライアントとしてwindows 11 Proから接続します。

:::note warn
インターネットから接続できるような構成・設定ではありません。
:::

<br>

■構成イメージ（簡易）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/201787/29736232-1c3b-bfdc-5e6f-eb38609f3eed.png)


■構成イメージ（詳細）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/201787/db96e56a-2a98-6af6-7897-4d61182dd283.png)

:::note info
vmware Workstation/ESXi周りの説明は本稿では行いません。
必要に応じて以下を参照ください。
https://qiita.com/Higemal/items/f0a2758b892f710d1eb3
:::

<br><br>



# 1.サーバ要件
ubuntu serverの構成要件を確定します。

**OS/Software**
・ubuntu server 22.04 LTS
・openjdk-19-jdk
・MINECRAFT: JAVA EDITION 1.20.1

**Hardware**
・CPU 4core
・Memory 6GB
・Disk 30GB

:::note info
以下の**Recommended**スペックを参考にしています。
https://minecraft.fandom.com/wiki/Server/Requirements/Dedicated
Requirements | Players | CPU | RAM | HDD
--- | --- | --- | --- | ---
Recommended | 5-7 | Intel Core-Based CPUs or AMD K8-Based CPUs at 3.4GHz or higher | 5 GB | 18 GB empty space
:::



# 2.インストーラダウンロード
## 2.1 ubuntu server
ubuntu serverは以下からダウンロードします。

https://jp.ubuntu.com/download

desktopとserver、またLTSと最新版がありますが、今回は **Server の LTS** をダウンロードします。
`ubuntu-22.04.2-live-server-amd64.iso`
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/201787/7008539b-ff83-f089-db2a-12eba8a83d00.png)


## 2.2 minecraft
minecraftは以下からダウンロードします。

https://www.minecraft.net/ja-jp/download

client用の `WINDOWSレガシーランチャーをダウンロード` 、Server用の `JAVA版サーバー` をダウンロードします。

Client: `MinecraftInstaller.exe`
Server: `server.jar`

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/201787/864fc781-f59a-dbcc-f840-c94ad87c21d9.png)


# 3.ubuntu serverインストール
ubuntu serverをインストールします。

## 3.1 HW準備
＃割愛しますが、以下のスペックでVMを準備しています。

**Hardware**
・CPU 4core
・Memory 6GB
・Disk 30GB


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/201787/43950b8a-e97b-906f-3b00-e7aff7558ce7.png)

## 3.2 OSインストール
以下のISOメディアを利用し、インストールを開始します。
`ubuntu-22.04.2-live-server-amd64.iso`

BIOSが起動したら、`Try or Install Ubuntu Server`を選択し、`Enter`を押下します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/201787/cb45eac3-b608-1813-3606-23240a241dd5.png)

`English`を選択し、`Enter`を押下します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/201787/65a6fd6e-3ae6-c7a2-1cac-a343d147e9d8.png)

`Continue without updating`を選択し、`Enter`を押下します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/201787/d231ea14-2eef-ed52-5161-16ee6c97c5ab.png)

キーボードレイアウトについて、以下を選択し、`Done`を押下します。
・Layout: `Japanese`
・Variant: `Japanese`
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/201787/5b982384-a8a5-6927-5227-5d96b208d553.png)

`Ubuntu Server`を選択し、`Done`を押下します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/201787/d98a2d77-a2de-c967-2d58-792a944104eb.png)

Network connection設定では表示されているNICを選択し、`Edit IPv4`を押下します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/201787/14635c7a-dabc-f224-fdee-6e4d344550d8.png)

IPアドレス等を設定し、`Save`を押下します。
・IPv4 Method: `Manual`　・・・手動設定
・Subnet: `192.168.142.0/24`　・・・ネットワークサブネット
・Address: `192.168.142.53`　・・・サーバのIPアドレス
・Gateway: `192.168.142.2`　・・・デフォルトゲートウェイ
・Name servers: `192.168.142.2,8.8.8.8`　・・・DNSサーバ
・Search domains: `test.local`　・・・DNSサフィックス
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/201787/4f385d50-d2c1-4777-a955-51ad8b5ab873.png)

`Done`を押下します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/201787/fea8a2df-ed16-a10c-1cd3-9059a62a856e.png)

Configration proxyは何も設定せず`Done`を押下します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/201787/b669a3d3-b87a-8103-f79a-b732d0f7605f.png)

Configration ubuntu archive mirrorは何も設定せず`Done`を押下します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/201787/53889ee0-f72d-9686-b7ed-7b9980100639.png)

Guided storage configrationは何も設定せず`Done`を押下します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/201787/99ccfa6d-3fad-d52a-9db6-2f64a3f89152.png)

Storage configrationは何も設定せず`Done`を押下します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/201787/77c3d2a2-8979-1cd8-a6b4-902b6e2cd792.png)

`Continue`を押下します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/201787/34a076a5-81c9-54c0-23e5-5400504f698c.png)

ユーザ名・ホスト名を設定し、`Save`を押下します。
・Your name: `-`　・・・管理者の氏名。入力不要
・Your server's name: `ubnt22-mc`　・・・サーバホスト名
・Pick a username: `ubuntu`　・・・一般ユーザのユーザ名
・Choose a password: `******`　・・・パスワード
・Confirm your password: `******`　・・・パスワード確認入力
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/201787/5b45d835-9073-6729-015c-16f330609214.png)

`Skip for now`を選択し、`Continue`を押下します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/201787/1df0ad9d-c9d7-abd6-dbf6-176a98c5fb46.png)

SSH Setupは以下を選択し、`Done`を押下します。
・Install OpenSSH Server: `[x]`
・Import SSH identity: `No`
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/201787/f5a59675-045b-55ff-cc46-8cf15c657b01.png)

Feratured Server Snapsは何も設定せず`Done`を押下します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/201787/958c9f39-b803-0e11-e3fb-7cb9729b47df.png)

インストールが開始されます。
完了した場合、上部に`Install Complete!`と表示されるので、`Reboot Now`を押下します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/201787/cc12eb70-f5e9-1c07-f11e-1481eece9027.png)


再起動後、SSH接続が可能になります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/201787/bc6f0f5f-abe8-bf34-f4cf-10df6199e764.png)



## 3.3 OS初期設定
### 3.3.1　root昇格
以降、sudoが必要な場面が多いためroot昇格しておきます。

```text:root昇格
# sudo su -
```


### 3.3.2　タイムゾーン設定
タイムゾーン設定を行います。

```text:タイムゾーン設定
# timedatectl set-timezone Asia/Tokyo

# timedatectl
               Local time: Sun 2023-07-16 21:02:11 JST   ### JSTとなっていることを確認 ###
           Universal time: Sun 2023-07-16 12:02:11 UTC
                 RTC time: Sun 2023-07-16 12:02:11
                Time zone: Asia/Tokyo (JST, +0900)
System clock synchronized: yes
              NTP service: active
          RTC in local TZ: no
```

### 3.3.3 パッケージアップデート
導入済みパッケージのアップデートを実施します。

```text:パッケージアップデート
# apt -y update
# apt -y upgrade
```

:::note info
導入済みパッケージ確認は以下コマンドになります。
`apt list --installed`
`dpkg-query -l`
:::

### 3.3.4 ufw設定
ubuntu firewallを設定し、必要なネットワークポートのみ解放します。

事前状態が無効(`inactive`)であることを確認します。
```text:事前確認
# ufw status verbose

Status: inactive
```

デフォルトで外→内について全ポートの閉塞、またSSHで利用するTCP22およびminecraftで利用するTCP25565を開放します。
```text:設定
# ufw default deny
# ufw allow 22/tcp
# ufw allow 25565/tcp
```

ufwを起動します。
```text:ufw起動
# ufw enable
```

動作確認をします。
Statusが`active`になっていること、Defaultにて`deny (incoming)`となっていること、解放したポートが`allow`となっていることを確認します。
```text:動作確認
#ufw status verbose
Status: active
Logging: on (low)
Default: deny (incoming), allow (outgoing), disabled (routed)
New profiles: skip

To                         Action      From
--                         ------      ----
22/tcp                     ALLOW IN    Anywhere                  
25565/tcp                  ALLOW IN    Anywhere                  
22/tcp (v6)                ALLOW IN    Anywhere (v6)             
25565/tcp (v6)             ALLOW IN    Anywhere (v6)             
```

# 4.minecraft server設定
minecraft serverのための設定等を実施します。

## 4.1 JDKインストール
JDKをインストールします。今回は`apt search`のうち最新の`openjdk-19-jdk`をインストールします。

インストールするパッケージの確認を行います。

```text:パッケージ確認
# apt search --names-only openjdk-19-jdk

openjdk-19-jdk/jammy-updates,jammy-security 19.0.2+7-0ubuntu3~22.04 amd64
  OpenJDK Development Kit (JDK)

openjdk-19-jdk-headless/jammy-updates,jammy-security 19.0.2+7-0ubuntu3~22.04 amd64
  OpenJDK Development Kit (JDK) (headless)
```

パッケージのインストールを行います。

```text:パッケージインストール
# apt install -y openjdk-19-jdk
```

javaバージョン確認コマンドでインストールされたことを確認します。
```text:インストール確認
# java --version

openjdk 19.0.2 2023-01-17
OpenJDK Runtime Environment (build 19.0.2+7-Ubuntu-0ubuntu322.04)
OpenJDK 64-Bit Server VM (build 19.0.2+7-Ubuntu-0ubuntu322.04, mixed mode, sharing)
```

## 4.2 jarファイル配置
minecraft server本体である`server.jar`を配置します。

teratermの`ファイル`から`SSH SCP...`を押下します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/201787/c0825fb0-5500-11a2-3ad6-bb8d2244da91.png)

`/tmp`に`server.jar`を格納します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/201787/ea50e640-b2e2-ee92-1994-fa0263851319.png)


minecraft用ディレクトリ `/minecraft` を作成します。
```text:ディレクトリ作成
# mkdir /minecraft
```

jarファイルをminecraft用ディレクトリに配置します。
```text:jarファイル配置
# cp -p /tmp/server.jar /minecraft
# cd /minecraft

# ll
total 46680
drwxr-xr-x  2 root   root       4096 Jul 16 21:09 ./
drwxr-xr-x 20 root   root       4096 Jul 16 21:08 ../
-rw-r--r--  1 ubuntu ubuntu 47791053 Jul 16 07:05 server.jar
```

## 4.3 初回起動とEULA同意
minecraft serverを初回起動します。
必ずライセンスエラーで終了します。

```text:初回起動
# java -Xmx5120M -Xms5120M -jar server.jar nogui

＜中略＞
[21:10:57] [ServerMain/WARN]: Failed to load eula.txt
[21:10:57] [ServerMain/INFO]: You need to agree to the EULA in order to run the server. Go to eula.txt for more info.
```

初回起動を行うと、以下ファイルが生成されます。

```text:ライセンスファイル確認
# ll
total 46700
drwxr-xr-x  5 root   root       4096 Jul 16 21:10 ./
drwxr-xr-x 20 root   root       4096 Jul 16 21:08 ../
-rw-r--r--  1 root   root        158 Jul 16 21:10 eula.txt
drwxr-xr-x  8 root   root       4096 Jul 16 21:10 libraries/
drwxr-xr-x  2 root   root       4096 Jul 16 21:10 logs/
-rw-r--r--  1 ubuntu ubuntu 47791053 Jul 16 07:05 server.jar
-rw-r--r--  1 root   root       1272 Jul 16 21:10 server.properties
drwxr-xr-x  3 root   root       4096 Jul 16 21:10 versions/
```

`eula.txt`の中身を変更する必要があるので、内容を編集します。
・変更前: `eula=false`
・変更後: `eula=true`
```text:eula編集
# vi eula.txt

#By changing the setting below to TRUE you are indicating your agreement to our EULA (https://aka.ms/MinecraftEULA).
#Sun Jul 16 21:10:57 JST 2023
eula=true
```


## 4.4 minecraft server起動
minecraft serverを起動します。

コマンド内容
・`-Xmx5120M`：最大メモリ使用量を5120MBに指定
・`-Xms5120M`：最小メモリ使用量を5120MBに指定
・`nogui`：CUI環境で必要なオプション

```text:minecraft server起動
# java -Xmx5120M -Xms5120M -jar server.jar nogui

＜中略＞
[21:11:57] [Server thread/INFO]: Time elapsed: 16947 ms
[21:11:57] [Server thread/INFO]: Done (20.672s)! For help, type "help"
```

:::note info
以後、teratermやコンソールを閉じず、そのままにしておきます。
:::

<br><br>


# 5.minecraft clientからの接続
minecraft clientからminecraft serverへ接続します。

## 5.1 minecraft server接続
minecraftを起動し、 **`マルチプレイ`** を選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/201787/1a99a824-9992-797e-67c7-aa75fa4c8c94.png)

`ダイレクト接続`を押下します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/201787/2edebdbf-29b3-e9ac-3968-9641aafaf71f.png)


サーバのIPアドレスおよびポート(デフォルトの場合は25565)を入力し、`サーバに接続`をします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/201787/e7d7fea7-8f71-996b-44f5-03a0eb765e17.png)

サーバに接続しプレイ可能になりました！
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/201787/a12e16a5-7c32-331d-5bf5-e94a23d99f16.png)


サーバ側のターミナルより、ユーザログインに関する内容が出力されます。

:::note warn
以降、minecraftユーザ名は`<username>`と表現しています。
:::


```text:ログインログ
[21:15:25] [User Authenticator #1/INFO]: UUID of player <Username> is xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
[21:15:25] [Server thread/INFO]: <Username>[/192.168.142.1:49542] logged in with entity id 188 at (-2.5, 102.0, -5.5)
[21:15:25] [Server thread/INFO]: <Username> joined the game
```

## 5.2 minecraft server操作
サーバ側のターミナルにてminecraftコマンドを利用することができます。

https://minecraft.fandom.com/ja/wiki/%E3%82%B3%E3%83%9E%E3%83%B3%E3%83%89

例として、`kill`コマンドを利用することでユーザをキルします。
```text:ユーザキル
kill <Username>
[21:19:16] [Server thread/INFO]: <Username> was killed
[21:19:16] [Server thread/INFO]: Killed <Username>
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/201787/368d2051-ad6b-ebdf-7ceb-9cd4d5c074f5.png)


## 5.3 minecraft server終了
サーバ側のターミナルにて`stop`コマンドを利用することでminecraft serverを停止することができます。

:::note warn
接続中のユーザは強制退出となります。
:::

```text:ユーザキル
stop
[23:55:24] [Server thread/INFO]: Stopping the server
[23:55:24] [Server thread/INFO]: Stopping server
[23:55:24] [Server thread/INFO]: Saving players
[23:55:24] [Server thread/INFO]: Saving worlds
[23:55:25] [Server thread/INFO]: Saving chunks for level 'ServerLevel[world]'/minecraft:overworld
[23:55:26] [Server thread/INFO]: Saving chunks for level 'ServerLevel[world]'/minecraft:the_nether
[23:55:26] [Server thread/INFO]: Saving chunks for level 'ServerLevel[world]'/minecraft:the_end
[23:55:26] [Server thread/INFO]: ThreadedAnvilChunkStorage (world): All chunks are saved
[23:55:26] [Server thread/INFO]: ThreadedAnvilChunkStorage (DIM-1): All chunks are saved
[23:55:26] [Server thread/INFO]: ThreadedAnvilChunkStorage (DIM1): All chunks are saved
[23:55:26] [Server thread/INFO]: ThreadedAnvilChunkStorage: All dimensions are saved
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/201787/260e0864-379a-e27a-154c-e1ff4e0674fb.png)


# 参考

**Windows10上のvmware Workstationにvmware ESXi 8.0 u1aをインストールしてVMを作成する**

https://qiita.com/Higemal/items/f0a2758b892f710d1eb3

<br>

**Server/Requirements/Dedicated**

https://minecraft.fandom.com/wiki/Server/Requirements/Dedicated

<br>

**Ubuntuを入手する**

https://jp.ubuntu.com/download

<br>

**MINECRAFT をダウンロード**

https://www.minecraft.net/ja-jp/download

<br>

**コマンド**

https://minecraft.fandom.com/ja/wiki/%E3%82%B3%E3%83%9E%E3%83%B3%E3%83%89