ValheimサーバをEC2のARMインスタンスに作成する

はじめに

前回の記事 で作成したEC2インスタンスは x86 アーキテクチャのCPUのインスタンスとなっている。
今回はARM インスタンスで同様のことが可能かどうかを調査するために試してみる。
最終的には、Raspberry Pi 4 での運用を考えているため、その想定で作成する。

環境

Windows 10 Professional
AWS
Docker Version: 20.10.17
Docker Compose version v2.4.1

サーバの構築

EC2インスタンスの作成

※構築手順はほぼ同じ、AMI, インスタンスタイプのみ変更する。

  1. AWS -> EC2からダッシュボードを開く。
  2. 左メニューバーの「インスタンス」を選択しインスタンス一覧を開く。
  3. 右上の「インスタンスを起動」をクリックする。
  4. インスタンスの設定を行う。 インスタンスの設定は下記の通り。
AMI: Debian 11 
アーキテクチャ: 64ビット(Arm)
インスタンスタイプ: t4g.medium (2vCPU, 4GBメモリ)
セキュリティグループ:
SSH 自分のIP
2456/UDP, 2457/UDP を 0.0.0.0/0 からアクセス可能にする。
ディスク: 8GB (移行するデータによっては変更したほうが良い。)
setting-ec2-instance
  1. 「インスタンスを起動」を押し、インスタンスを起動させる。

ElasticIPの付与

前回の記事#ElasticIPの付与を参照する

ここまででサーバの構築は終了
この後は、サーバ内にSSHで入り、必要なパッケージを入れていく。

※SSHでの接続時のエラー対処

インスタンスを作成した際に下記のようなエラーが出てきた。
rlogin-ssh-error

これは、SSHで接続するプロトコルのバージョンが低いため、SSH2-256 / SSH2-512のいずれかのプロトコルで接続するように言われている。
RLoginでは、下記を修正して設定すると接続ができる。
rlogin-ssh-setting

また、 ユーザ名はAMIごとに異なるため下記を参照すること。
https://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/TroubleshootingInstancesConnecting.html#TroubleshootingInstancesConnectingMindTerm

ログイン成功
ssh-login-success

パッケージのインストール

Dockerのインストール

https://matsuand.github.io/docs.docker.jp.onthefly/engine/install/debian/#install-using-the-convenience-script

$ curl -fsSL https://get.docker.com -o get-docker.sh
# インストールステップの確認
$ DRY_RUN=1 sh ./get-docker.sh
$ sudo sh get-docker.sh
$ docker version

Docker compose のインストール

上記で入っているため不要 インストールできたかの確認

$ docker compose version

サービスの起動/自動起動設定

# Dockerサービスの起動
sudo systemctl start docker
# システム起動時にDockerサービスが起動するように設定
$ sudo systemctl enable docker

dockerグループの作成

$ sudo groupadd docker (ある場合は groupadd: group 'docker' already existsと出る。)
$ sudo usermod -a -G docker admin
$ sudo chgrp docker /var/run/docker.sock

設定を反映する。

$ sudo systemctl restart docker

一回 admin はログアウトし、再接続する。

$ docker version
Client: Docker Engine - Community
 Version:           23.0.1
 API version:       1.42
 Go version:        go1.19.5
 Git commit:        a5ee5b1
 Built:             Thu Feb  9 19:46:41 2023
 OS/Arch:           linux/arm64
 Context:           default

Server: Docker Engine - Community
 Engine:
  Version:          23.0.1
  API version:      1.42 (minimum version 1.12)
  Go version:       go1.19.5
  Git commit:       bc3805a
  Built:            Thu Feb  9 19:46:41 2023
  OS/Arch:          linux/arm64
  Experimental:     false
 containerd:
  Version:          1.6.19
  GitCommit:        1e1ea6e986c6c86565bc33d52e34b81b3e2bc71f
 runc:
  Version:          1.1.4
  GitCommit:        v1.1.4-0-g5fd4c4d
 docker-init:
  Version:          0.19.0
  GitCommit:        de40ad0

Permission denied が出なければOK!

UTC->JSTへの変更

$ sudo timedatectl set-timezone Asia/Tokyo
$ date
Sun Mar 26 01:20:44 UTC 2023

$ sudo timedatectl set-timezone Asia/Tokyo

$ date
Sun Mar 26 10:20:51 JST 2023

valheimサーバの構築

valheimのサーバは、x86_64用のビルドしかないため、x86_64 のアプリケーションを起動できるように Box64 を入れる。
のだが、Docker の方に入っているので不要っぽい。

いくつかリポジトリを見つけて試してみた。
最終的に下記リポジトリを使用することにした。

※使用しなかったもの
下記でもいけた、おそらく中身はほぼ一緒なのでお好みになりそう

イメージのビルド+コンテナのスタート後に結構待たないと接続できないみたいだった。
待たずに接続できねぇ!ってやってたけど、それは良くなかったみたい。

コンテナの構築

valheim のデータ用のディレクトリを作成する。

mkdir -p /home/admin/valheim/data
mkdir -p /home/admin/valheim/server
$ cd ~/valheim
$ vim compose.yml

compose.yml を作成する。

services:
  raspiheim:
    image: arokan/raspiheim:latest
    container_name: raspiheim
    environment:
      - SERVER_NAME=Raspiheim
      - WORLD_NAME=Raspiworld
      - SERVER_PASS=Raspipass
      - PUBLIC=0
      - UPDATE=false
      - PAUSE=false
    ports:
      - "2456:2456/udp"
      - "2457:2457/udp"
    volumes:
      - "/home/admin/valheim/data:/data"
      - "/home/admin/valheim/server:/valheim"
    restart: unless-stopped
変数名説明設定値
SERVER_NAMEサーバ名Raspiheim
WORLD_NAMEワールド名Raspiworld
SERVER_PASSサーバパスワードRaspipass
PUBLIC公開するかどうか0
UPDATE-false
PAUSE-false

ビルド+コンテナ起動

$ docker compose up -d

docker compose logs -f で確認
ビルドが終わったら起動するが、 すぐには接続できないみたい。

valheim_box64-valheim_box64-1  |  Update state (0x61) downloading, progress: 82.65 (1185245207 / 1434074687)
valheim_box64-valheim_box64-1  |  Update state (0x61) downloading, progress: 83.16 (1192585239 / 1434074687)
valheim_box64-valheim_box64-1  |  Update state (0x61) downloading, progress: 83.62 (1199103255 / 1434074687)
valheim_box64-valheim_box64-1  |  Update state (0x61) downloading, progress: 84.20 (1207531731 / 1434074687)
valheim_box64-valheim_box64-1  |  Update state (0x61) downloading, progress: 84.71 (1214871763 / 1434074687)
valheim_box64-valheim_box64-1  |  Update state (0x61) downloading, progress: 85.22 (1222161203 / 1434074687)
valheim_box64-valheim_box64-1  |  Update state (0x61) downloading, progress: 86.65 (1242656707 / 1434074687)

こんな感じでアップデートが始まっていた。
とりあえず待ってみる。

valheim_box64-valheim_box64-1  | 03/26/2023 07:30:47: Failed to place all SwampHut3, placed 40 out of 50
valheim_box64-valheim_box64-1  | 03/26/2023 07:31:27: Failed to place all TarPit1, placed 75 out of 100
valheim_box64-valheim_box64-1  | 03/26/2023 07:31:33: Failed to place all TarPit2, placed 16 out of 100
valheim_box64-valheim_box64-1  | 03/26/2023 07:31:56: Failed to place all MountainCave02, placed 159 out of 160
valheim_box64-valheim_box64-1  | 03/26/2023 07:32:05:  Done generating locations, duration:182804.222 ms
valheim_box64-valheim_box64-1  | The shader Hidden/Dof/DepthOfFieldHdr (UnityEngine.Shader) on effect Main Camera (UnityStandardAssets.ImageEffects.DepthOfField) is not supported on this platform!
valheim_box64-valheim_box64-1  | The image effect Main Camera (UnityStandardAssets.ImageEffects.DepthOfField) has been disabled as it's not supported on the current platform.
valheim_box64-valheim_box64-1  | The shader Hidden/SunShaftsComposite (UnityEngine.Shader) on effect Main Camera (UnityStandardAssets.ImageEffects.SunShafts) is not supported on this platform!
valheim_box64-valheim_box64-1  | The shader Hidden/SimpleClear (UnityEngine.Shader) on effect Main Camera (UnityStandardAssets.ImageEffects.SunShafts) is not supported on this platform!
valheim_box64-valheim_box64-1  | The image effect Main Camera (UnityStandardAssets.ImageEffects.SunShafts) has been disabled as it's not supported on the current platform.
valheim_box64-valheim_box64-1  | 03/26/2023 07:33:32: Got status changed msg k_ESteamNetworkingConnectionState_Connecting
valheim_box64-valheim_box64-1  | 03/26/2023 07:33:32: New connection

止まったので接続してみると…

パスワード入力画面が来た…! valheim-input-password

パスワードを入れると… valheim-login-world

いけた・・・!

参考

おわりに

本当は、ローカルでQEMUでエミュレートしようと思ったのだけど、(記事も書いた)
できなかったです・・・。
なので、手軽にAWSのARMインスタンスでやってみました。
RaspberryPiのビルドで試したのでこれでいけそうだ・・・!
教訓としては、 x86の方とは違って、起動が結構かかるので待つ忍耐力が必要でしたね。
どこかに書いてあったけど忘れていた↑

追記 How to set up a Valheim dedicated server on the Raspberry Pi の下記に書いてありました。

The startup process might take a few minutes since the game needs to generate the game world, locations, etc.

Hugo で構築されています。
テーマ StackJimmy によって設計されています。