GCPでMinecraft サーバーを立ち上げるまで

## はじめに
SteyHome週間で退屈だったので、Minecraftサーバを立てて遊んでみました。
（サーバ建てたのに同期や友達は誰も参加せず、結局ただのお勉強になってしまいました...）

基本は下記のままなので公式ドキュメントで十分じゃい！という方はそちらをどうぞ

Compute Engine での Minecraft サーバーのセットアップ
https://cloud.google.com/solutions/gaming/minecraft-server?hl=ja

また下記を参考にしていますので、そちらも合わせてどうぞ。
【GCP】Google Cloud Platform でMinecraftマルチサーバーを立てる方法
https://qiita.com/onnobu/items/01e45e3d6988cc54a70b

## GCP アカウントの準備
GCPの無料枠で作成します。Googleアカウントに紐づいてGCPを利用するので、なければ新しいアカウントを作成しましょう。
GCPを利用する際、クレジットカードの登録を求められるかもしれませんが、勝手に課金されることはないので安心して登録してください。

## Google Compute Engineの作成
Google Cloud プラットフォームの画面からGoogleアカウントでログインします。

ログイン後、
ナビゲーションメニュー > コンピューティング -  Compute Engine > VMインスタンス を選択します。
![スクリーンショット 2020-05-06 23.42.52.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/294828/f0fb928f-4b38-f504-e756-9a9dbdfa75b5.png)


名前・リージョン・ゾーン・マシンの構成は任意の物で良いです。
リージョンやマシンの構成で金額が変わりますので、自分のお財布（トライアルの金額）と相談してください。
![スクリーンショット 2020-05-06 21.39.48.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/294828/4cd4bd0f-931d-3629-1002-2024f1815229.png)



ブートディスクの変更を選択します。
ここではOSとディスク(HDDとSSD)を設定できます。
OSは任意で良いですが、ブートディスクのサイズは30GBを推奨します（30GBまでは無料枠のはず）
![スクリーンショット 2020-05-06 21.39.56.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/294828/d82348fa-d24f-5c6a-5c44-4a03626dac69.png)


![スクリーンショット 2020-05-06 21.42.54.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/294828/f8e98829-9069-5ac8-ec92-ee2b2b6a0c99.png)

ファイアウォールは両方とも許可で良いです。
![スクリーンショット 2020-05-06 21.43.52.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/294828/eadfee1f-1127-fc6e-5388-49434f0b40a8.png)


IPアドレスを設定します。
この工程は無理にする必要はありませんが、行わなければGCEを起動するたびにIPアドレスが変わります。
外部IPは予約すると同時に課金が始まり、GCEのインスタンスを削除しても解放されません。自分で管理する必要があるので気をつけましょう！

ネットワーキングのネットワークインターフェイスを選択して、外部IPのIPアドレスを作成します。
名前は任意です。入力したら、予約を選択します。


![スクリーンショット 2020-05-06 21.49.20.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/294828/0ab94bee-fd98-c0b1-efbb-7a3f89d5a3a0.png)
![スクリーンショット 2020-05-06 21.49.50.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/294828/2252b364-4c2b-c3c6-95fa-a93afca02e22.png)


以上で、一旦の設定は終わりです。
画面下部の作成をクリックします。

## 作成したインスタンスの設定
作成後の画面で、先ほど作成したインスタンスのSSHのリストからブラウザウィンドウを選択します。
![スクリーンショット 2020-05-06 22.03.06.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/294828/d3d5a027-6090-5c9a-8d56-bf1176d1770a.png)



linuxモジュールのupdateを行います。
またwgetを使うので入れておきましょう。

```bash

sudo apt-get update
sudo apt-get install wget
sudo apt-get install screen
```

minecraftのserver.jarの動かすためのJREをインストールします。

```bash

sudo apt-get install -y default-jre-headless
```

## Minecraftサーバのインストール
minecraftのサーバをインストールするために、インストールするディレクトリを作成・移動します。

```bash
sudo mkdir /home/minecraft
cd /home/minecraft
```

minecraftのサーバを取得します。ダウンロードのURLでwgetしてください。
最新バージョンのサーバならここから取得できますが、古いバージョンで建てたい場合は備考を参考にしてください。

```bash
sudo wget https://launcher.mojang.com/v1/objects/bb2b6b1aefcd70dfd1892149ac3a215f6c636b07/server.jar
```
  
  

サーバの起動を行います。これによってeula.txtが作成されるので、そのファイルを設定して再度起動させます。

```bash
sudo java -Xmx1024M -Xms1024M -jar server.jar nogui
[13:31:15] [main/ERROR]: Failed to load properties from file: server.properties
[13:31:15] [main/WARN]: Failed to load eula.txt
[13:31:15] [main/INFO]: You need to agree to the EULA in order to run the server. Go to eula.txt for more info.
```

nanoエディタやvimエディタで内容を次のように書き換えます。

```bash
vim eula.txt

[before]
eula=false
↓
[after]
eula=true
```

このタイミングで、minecraftディレクトリの所有者を管理者ユーザから一般ユーザに変更しておきます。

```bash
sudo su -
chown -R (YourUser) /home/minecraft
exit
```

再度起動させます。
今度はscreenコマンドを利用して起動させ、sshでの接続が切れた後でもサーバが持続するようにします。
これで起動させなければ、sshのセッションが切れると同時にサーバも終了してしまいます。
ここではmcsという名前のセッションを作っています(公式のmcsですね)
起動後にctrl + A -> d でscreenのセッションから抜けます。

```bash
screen -S mcs java -Xmx1024M -Xms1024M -jar server.jar nogui

起動後
ctrl + a key -> d key
```
再度screenのセッションに入り、サーバを停止する場合は、

```
現状のセッションを調べて
screen -ls

それめがけて入る
screen -r mcs

止めるのは
stop
```
## Minecraftサーバへの接続設定
Minecraftサーバはデフォルトでポート番号25565で接続します。
GCEで25565ポートへの接続の許可を設定します。

ネットワークタグに任意のタグを作成します。
25565ポートに許可を出すことやminecraftサーバ用であることがわかる名前が望ましいです。
![スクリーンショット 2020-05-06 23.05.49.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/294828/c2d7c0c1-37cf-bff5-651b-2424134785d4.png)



次にナビゲーションメニュー > ネットワーキング > VPCネットワーク > ファイアウォールルール から作成を選択します。
名前は任意、
ターゲットタグは先ほど作成したタグ名、
ソースIPの範囲は0.0.0.0/0、
ポートとプロトコルで、TCP 25565
で入力して作成を選択します。

![スクリーンショット 2020-05-06 23.11.35.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/294828/8a7cfe30-e68b-83dc-877b-1bcf2a43f082.png)

以上で終了です。
あとはMinecraftのクライアントからIPアドレスとポートを指定すればアクセスできるはずです。

**みんなで** Minecraftを楽しんでくださいね！



## 備考
### sshのポート変更
sshのポート変更する場合は次の流れです。

まずsshd_configの設定を変更します。
Portを変えることで任意のポート番号にすることができます(デフォルト22)

```bash:ssh_config
sudo vim /etc/ssh/sshd_config

#Port 22
Port 30022 <- こんな感じで変える
#AddressFamily any
#ListenAddress 0.0.0.0
#ListenAddress ::
```

その後、GCEのネットワークタグとファイアウォールルールで次の設定を行います。
- 許可・拒否するネットワークタグの作成
    minecraftサーバ用に25565ポートを設定したのと同じ手順で作成
- ファイアウォールルールの作成
    拒否の設定だけ下記に記載します。
    任意の名前、ソースIPは0.0.0.0/0で、一致した時のアクションを拒否にします。
![スクリーンショット 2020-05-06 23.19.46.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/294828/81addd53-965e-a04b-3bc0-cdaee8665e3f.png)



### 古いバージョンのserver.jarの入手方法

Minecraftのクライアントから過去のserver.jarを取得できるようです。
起動構成 > 新規作成 > バージョン から
好きなバージョンを選んで、サーバーを選択してください。

![スクリーンショット 2020-05-06 22.23.09.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/294828/70910801-96d1-c0ea-1b5d-207da5cb1581.png)

![スクリーンショット 2020-05-06 22.23.22.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/294828/8836d7b7-5171-4b52-2a73-6579d5264ea3.png)

ダウンロード後にブラウザのダウンロード履歴からURLが確認できるはずです。
そのURLでwgetを行えば導入できます。
![スクリーンショット 2020-05-06 22.23.35.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/294828/0b2cca12-7886-06cc-ea90-7f616c1f30f3.png)

### そのほか気になったこと
GCEインスタンスの起動時と終了時にサーバを閉じたり、開いたりするようなスクリプト（startup-script, shutdown-script)を書いたけどうまく動かなかった。
screenコマンドは起動時に使えないのかということが気になった。