AWS EC2(ubuntu22.04)をValheim Serverにする

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/201787/5255e94b-21bb-63f8-1d10-aa69628d8a23.png)
AWS EC2をValheimゲームサーバとして利用します。

# ■構成
Valheim Server : Ubuntu22.04
Valheim Client : Windows11

# ■公式wiki
https://valheim.fandom.com/wiki/Valheim_Dedicated_Server

# 1.EC2の作成
EC2を作成します。
Valheim Offical Wikiの推奨要件に従い、vCPU 4core以上となる`t3.xlarge`を使用します。
（その他割愛）

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/201787/25d27781-784d-4bba-de53-e73e173983c7.png)



# 2.セキュリティグループの設定
Ubuntu接続用のSSHのほか、Valheim要件の`UDP 2456-2458`も通信許可します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/201787/8b4c3cf3-1577-e57c-d05e-671e6281ee6c.png)



# 3.ubuntu設定
以降、ubuntuにSSHで接続して操作を実行します。

## 3-1.初回アップデート
以下コマンドを実行し、いったん再起動します。
```text:update
$ sudo su -
# apt -y update
# apt -y upgrade
# reboot
```


## 3-2.steamcmdインストール
valheimをインストールするためのコマンドに使用するsteamcmdをインストールします。

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

```text:steamcmd
# add-apt-repository multiverse; dpkg --add-architecture i386; apt -y update
# apt install -y steamcmd
```

https://developer.valvesoftware.com/wiki/SteamCMD


## 3-3.valheimサーバインストール
valheimのサーバアプリケーションをインストールします。
指定ディレクトリ `/valheim` にダウンロード等するかたちとしています。

```text:ディレクトリ作成
# mkdir /valheim
```

```text:valheimインストール
# steamcmd +login anonymous +force_install_dir /valheim +app_update 896660 validate +exit
```

`+force_install_dir`オプションの値としてダウンロードディレクトリの`/valheim `を指定します。
`+app_update`オプションの値として、valheimのアプリIDである`896660`を指定します。

```text:libpluseインストール
# apt install -y libpulse0 libpulse-dev libatomic1 libc6
```


https://steamcommunity.com/app/892970/discussions/1/3365901765271862386/?l=finnish

https://www.linode.com/community/questions/24077/i-cant-get-crossplay-to-work-with-valheim-on-debian-10


## 3-4.サーバ名/ワールド名/パスワード設定
以下ファイルを編集して必要なパラメータを設定します。
例として以下のように編集しています。
サーバ名：`ServerName123`
ワールド名：`World123`
パスワード：`password123`

```text:start_server.sh
# vi /valheim/start_server.sh
-------------------------------------
./valheim_server.x86_64 -name "My server" -port 2456 -world "Dedicated" -password "secret" -crossplay

↓

./valheim_server.x86_64 -name "ServerName123" -port 2456 -world "world123" -password "password123" -crossplay
-------------------------------------
```


## 3-5.ファイアーウォール設定
ファイアーウォール設定を実施します。
今回はAWSセキュリティグループにて制御をしてるため、ufwを停止しておきます。

```text:ufw
# ufw disable
# ufw status
```



## 3-6.valheimサーバ起動
valheimサーバを起動します。

```text:start
# cd /valheim
# ./start_server.sh
```

:::note warn
`start_server.sh`は同ディレクトリでのスクリプト起動が予期されているので、
`start_server.sh`のディレクトリにcdしての起動を推奨します。
:::

なお、停止の場合はコンソール上で`ctrl + c`を行います。



# 4.valheimクライアントからの接続

valheimを起動します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/201787/28a9175c-c8d9-54fa-f1fa-7f579ac69e6d.png)

スタートからゲーム参加タブに遷移し、サーバを追加からIPアドレスを入力します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/201787/2ebb944e-5e15-4469-d454-16be1604fd5a.png)


サーバ名が表示されたら接続を押下します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/201787/fa6d9681-8d88-3f4c-0bb8-8ab8c58a3d4a.png)

パスワード入力画面が表示されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/201787/a65bd0e8-d0f8-7775-2858-3195408bb3f5.png)

サーバへの接続が完了しました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/201787/e738ece0-90bc-f00e-9de2-5bbe0fce833b.png)







# 5.valheimサーバのサービス化
上記`3-6.valheimサーバ起動`ではコンソールから起動をしていますが、EC2起動後にvalheimサーバが自動で起動するようにサービス化を行います。

サービス定義用のファイルを作成します。
```text:valheim.service
# vi /etc/systemd/system/valheim.service
----------------------------------------
[Unit]
Description=Valheim
After=network-online.target
[Service]
WorkingDirectory=/valheim 
ExecStart=/valheim/start_server.sh
ExecStop=/bin/kill -INT ${MAINPID}
Type=simple
[Install]
WantedBy=multi-user.target
----------------------------------------
```

サービス自動起動の設定およびサービス起動を行います。
```text:service
# systemctl enable valheim.service 
# systemctl start valheim.service
# systemctl status valheim.service
```

これで、ubuntu/EC2の再起動を実施してもvalheimサーバが自動で起動するようになります。