GCPでArkサーバー建てるンゴ＼(^o^)／

どーもこんにちは。GCPのGoogle Compute Engine（以下GCE）でArkサーバーを最近作って、ちょっと作業がめんどかったので残しておきます。

## 確認してほしいこと
- SteamでArk: Survival Evolvedを購入済みであること
- 自分のPCがArk: Survival Evolvedができる十分なスペックであること
- Ubuntu 18.04.4 LTSでの説明になってますので、Cent OSやDebianなどを使いたい方は差異があるかもしれません。

※サーバー？クライアント？Linux？何それ？という方は、1度Linuxでサーバーを建てて、自分のサイトが表示できるようになったら、またここに来てください。

## Google Compute Engineの準備
早速、GCEの準備に取り掛かりましょう。GCP内で自分のgoogleアカウントで課金処理を済ませたら、GCPコンソール上のメニューから`Compute Engine > VMインスタンス`の項目を選択して、インスタンスを作成しましょう。

インスタンス作成時に下のような画面が出ると思います。
<img width="100%" alt="Create Google Compute Engine Instance" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/144079/e0020b48-7a1d-35b9-1506-beb010fd65ee.png">

この画面から自身で使用したいスペックを決めてインスタンスを作成します。

ついでに自分がArkサーバーで使用するであろうGCEのスペックは以下のようにしました。
Linux: Ubuntu 18.04.4 LTS
リージョン: 東京
CPU: 2コア 8GB
ストレージ: SSD 24GB

一応このスペックだと最大7200円/月くらいです。

## GCEに色々インストールするンゴ＼(^o^)／
まず以下のコマンドです。

```console
sudo apt-get update && sudo apt-get upgrade
```

おまじないですね。そしたら次のコマンドは

```console
sudo apt-get install lib32gcc1
```

完了したら、もう一回`apt-get`の更新です。

```console
sudo apt-get update
```

無事に完了ができたら、

```console
sudo dpkg --add-architecture i386
```

を入力します。心配であればもう一度`sudo apt-get update`をしてもよいかもしれません。そのあとはSteamCMDをインストールしたいのですが、公式だと上のコマンドの後にSteamCMDをインストールさせる手順に入るのですが、うまくいかずエラーになると思います。

このコマンドを入力した後にSteamCMDをインストールしましょう。

```console
sudo apt-get install steam
```

このコマンドを実行すると、利用規約に同意するように求められるので、acceptを選択してからOKを押します。これを終えたら、

```console
sudo apt-get install steamcmd
```

でSteamCMDをインストールします。インストールできたら、`mkdir arkserver`でArkサーバーのディレクトリを作成し、

```console
sudo ln -s /usr/games/steamcmd steamcmd
```

を実行してください。そしたらインストールしたSteamCMDで以下のコマンドを入力します。

```console
steamcmd +login anonymous +force_install_dir <install_dir> +app_update 376030 +quit
```

このコマンドの`<install_dir>`はarkサーバーをインストールする場所を指定します。例えば、`/home/steam/servers/ark`。

ここまでであらかたの環境構築は完了です。お疲れ様でした。

## サーバーを起動してからクライアントからサーバーに接続するまで
### Compute EngineでArkサーバーを起動する
ここまでくると、あともう少しで完了です。これからサーバーを起動したいところですが、その前に何かやり忘れていることがありませんか？クライアントからarkサーバーにアクセスするためにポートを開放してません。

実はいきなりポート開放してもよかったのですが、コマンドで行ってしまう場合（`ufw`や`iptables`とか使う）、少し注意が必要です。自分がやらかした例だと、もともと`ufw`がinactiveだったので、自前で設定しようとしてSSHのポートを開放するのを忘れてしまい、GCPコンソールからアクセスできなくなりました。

なので、このようなことを起こさないために（終了する前に22番を開放しておけば...）、コマンドで設定する方は**細心の注意を払って**行ってください。自分のように、やらかしちゃった人はもう一度、Google Compute Engineの準備まで戻ってやり直して、ここまで戻ってきてくださいね。

ちょっと自信がない方は、GCPコンソールの`VPCネットワーク > ファイアウォールルール`で設定できます。ファイアウォールルールを作成するときに以下の画面が出ると思います。
<img width="100%" alt="Setting FireWall Rule" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/144079/b9df4d65-34e9-bba6-4424-e00aaab22c15.png">

この画面で開放したいポート記載してください。開放するポートは、`udp: 7777, 7778, 27015`です。

では、ポートを開放したら、サーバーを起動させます。この手順で行けばarkserver内をたどっていくと、ShooterGameServerという名前のファイルがあるので、

```console
sudo path/to/ShooterGameServer TheIsland?listen?SessionName=<Server_Name>?ServerPassword=<Password>?ServerAdminPassword=<AdminPassword> -server -log
```

で起動さます。

ここで、`TheIsland`はarkのマップ名でDLCや拡張パックを購入していれば他のマップ名を入れてプレイすることも可能です。初期はアイランド（The Island）だけらしいので、気になるかたはほかのも試してみてください。

`<Session_Name>`はArkでのサーバー名です。サーバー名では記号とスペースがダメなのでご注意を。`<Password>`はサーバーに入るためのパスワードです。`<AdminPassword>`は管理者用のパスワードです。

### クライアントからArkサーバーへアクセスする
それでは、さっそく試してみましょう。まず、ご自身のSteamを起動してください、そうすると、左上に以下のようなメニューがあると思います。
<img width="100%" alt="steam menu" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/144079/55e40604-1cb7-78b4-0a8c-a4e7c9df0e77.png">

この`表示 > サーバー > お気に入り`で以下の画面にたどり着くと思います。
<img width="100%" alt="steam likely server index" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/144079/b9eb7fc9-65e8-84d7-b339-120332262bcd.png">

この画面の右下に「サーバーを追加」とあるのでそこで先ほど起動したArkサーバーのIPアドレスを入力して「このアドレスをお気に入りに追加」を押してください。
<img width="100%" alt="steam server setting" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/144079/a641a7d9-0aef-1000-62d5-2d56b14f3c69.png">

ArkサーバーのIPアドレスは、以下のようなCompute Engineの初めの画面上で見れます。
<img width="100%" alt="external IP Address on Compute Engine" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/144079/d573ad6e-08d7-b626-1f85-f2f3f93bff6e.png">


上の画面の外部IPを入力してください。問題なく完了すると、少し時間がたった後に、Steamのお気に入りのサーバーメニューに先ほどShooterGameServerを起動したときに設定したものが表示されると思います。表示されたら、接続したいサーバーを選択して右下の接続ボタンを押してください。そうすると以下の画面が出ます。
<img width="100%" alt="enter to my password" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/144079/0dc26850-0153-87f7-abac-3a5b499b792d.png">

この画面で、設定したパスワードを入力すれば無事にArkサーバーにアクセスして、ゲームスタート！！

## おわり
以上でGCP上でArkサーバーを建てられると思います。参考になれば幸いです。

ついでに言うとMinecraftもGCPで建ててたんですが、GCP公式が[ブログ](https://cloud.google.com/solutions/gaming/minecraft-server)で書いてあるのでそちらを読んでみるとよいかもです。