はじめに
趣味でやっている Valheim
というゲームをローカルからEC2に移行してみる。
↓これです。
環境
Windows 10 Professional
AWS
Docker Version: 20.10.17
Docker Compose version v2.4.1
サーバの構築
EC2インスタンスの作成
- AWS -> EC2からダッシュボードを開く。
- 左メニューバーの「インスタンス」を選択しインスタンス一覧を開く。
- 右上の「インスタンスを起動」をクリックする。
- インスタンスの設定を行う。 インスタンスの設定は下記の通り。
インスタンスタイプ: t3.medium (2vCPU, 4GBメモリ)
セキュリティグループ:
SSH 自分のIP
2456/UDP, 2457/UDP を 0.0.0.0/0 からアクセス可能にする。
ディスク: 8GB (移行するデータによっては変更したほうが良い。)
- 「インスタンスを起動」を押し、インスタンスを起動させる。
ElasticIPの付与
AWSの場合、このままだと停止→起動した際にIPアドレスが変わってしまうので、固定のグローバルIPアドレスをつけたい。
そのために、ElasticIPを付与する。
- 左メニューバーのネットワーク&セキュリティにある「Elastic IP」を選択する。
- ElasticIPのページにある、右上の「Elasitc IPアドレスを割り当てる」を選択する。
- 一覧にElastic IPアドレスが出てくるので、選択した状態で右上の「アクション」→「Elastic IP アドレスの関連付け」を押す。
- 関連付けを行うページが出てくるので、インスタンスから先程起動したインスタンスを選択する。
- 確認のために、左メニュー「インスタンス」を選択し一覧を開く。その後、一覧から先程起動したインスタンスを選択すると、パブリックIPv4アドレスが割当したEIPになっている。
ここまででサーバの構築は終了
この後は、サーバ内にSSHで入り、必要なパッケージを入れていく。
パッケージのインストール
Gitのインストール
$ sudo yum install -y git
Dockerのインストール
$ sudo yum install -y docker
Docker composeのインストール
$ sudo mkdir -p /usr/local/lib/docker/cli-plugins
$ sudo curl -SL https://github.com/docker/compose/releases/download/v2.4.1/docker-compose-linux-x86_64 -o /usr/local/lib/docker/cli-plugins/docker-compose
$ sudo chmod +x /usr/local/lib/docker/cli-plugins/docker-compose
参考: https://matsuand.github.io/docs.docker.jp.onthefly/compose/install/
インストールできたかの確認
$ 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 ec2-user
$ sudo chgrp docker /var/run/docker.sock
設定を反映する。
$ sudo systemctl restart docker
一回 ec2-user
はログアウトし、再接続する。
UTC->JSTへの変更
$ sudo timedatectl set-timezone Asia/Tokyo
[ec2-user@ip-172-31-47-217 ~]$ date
Tue Mar 21 09:35:59 JST 2023
valheimサーバの構築
イメージ構築のための設定
リポジトリをクローンする
$ git clone https://github.com/katsuobushiFPGA/valheim-server-ec2.git
$ cd valheim-server-ec2/
クローン後、 README.md
に従い、下記の手順を実施する。
.env.exampleをコピー
$ cp .env.example .env
.envの設定 DockerHub(https://hub.docker.com/r/lloesche/valheim-server)に記載されている「Environment Variables」を参考に設定する。 設定例は下記の通り。
SERVER_NAME=soloserver
SERVER_PASS=secret
SERVER_PUBLIC=false
WORLD_NAME=soloworld
TZ=Asia/Tokyo
BACKUPS_DIRECTORY=/backup
BACKUPS_MAX_COUNT=3
DATA_PATH=$HOME/valheim-server-ec2/data
CONFIG_PATH=$HOME/valheim-server-ec2/config
ローカルから移行する場合については、WORLD_NAME
に ローカルで名前をつけているワールド名にすること。
今回自分のローカルでは、 soloworld
と名前をつけているのでその名前にしている。
イメージのビルド
$ docker compose up -d
Started
でコンテナが開始していればOK
[ec2-user@ip-172-31-47-217 valheim-server-ec2]$ docker compose up -d
[+] Building 12.0s (5/5) FINISHED
=> [internal] load build definition from Dockerfile
=> => transferring dockerfile: 128B
=> [internal] load .dockerignore
=> => transferring context: 2B
=> [internal] load metadata for docker.io/lloesche/valheim-server:latest
=> [1/1] FROM docker.io/lloesche/valheim-server:latest@sha256:fd71df67215a3fceaa98d298074dbf7865a3cbbacb9e1bcc1b365f314d15e2ee
=> => resolve docker.io/lloesche/valheim-server:latest@sha256:fd71df67215a3fceaa98d298074dbf7865a3cbbacb9e1bcc1b365f314d15e2ee
=> => sha256:fd71df67215a3fceaa98d298074dbf7865a3cbbacb9e1bcc1b365f314d15e2ee 856B / 856B
=> => sha256:3f9582a2cbe7197f39185419c0ced2c986389f8fc6aa805e1f5c090eea6511e0 31.41MB / 31.41MB
=> => sha256:c6468f85b03ef97c1dd2dcf1ca34d49a0c756dce200eaaf747e65e50da36af5f 2.22MB / 2.22MB
=> => sha256:61c35feee7040e130ff8c4e9d6863efe66d751e3fc51e3a74ee1802ae135de53 1.63kB / 1.63kB
=> => sha256:2436c0d17130c9326f0231078da9d16c80e43fe29302794af50d4a8196be9592 7.22kB / 7.22kB
=> => sha256:870c408e40e7786466785d2f9d121646dc42c6ca043688ff93039f7cebcb62d8 87.55kB / 87.55kB
=> => sha256:83e8299376ba94add8c34d3e8d18691ed2231ba4373ed09d4b61fe26ee895bce 5.12MB / 5.12MB
=> => extracting sha256:3f9582a2cbe7197f39185419c0ced2c986389f8fc6aa805e1f5c090eea6511e0
=> => sha256:8d243f5f819e83964a7ec9fe65a14fb8656e7e243b94e38fc31a23ce9b70a74a 24.98MB / 24.98MB
=> => sha256:28e2b74a91a74fbdf12d92172337fd5b52c8350f813a82db6003866f79a5ddea 596B / 596B
=> => sha256:94e16f233544db964f30b2de9e00beec52e7966ab379589b2f07d55fdef7ccbf 203.43MB / 203.43MB
=> => extracting sha256:c6468f85b03ef97c1dd2dcf1ca34d49a0c756dce200eaaf747e65e50da36af5f
=> => extracting sha256:870c408e40e7786466785d2f9d121646dc42c6ca043688ff93039f7cebcb62d8
=> => extracting sha256:83e8299376ba94add8c34d3e8d18691ed2231ba4373ed09d4b61fe26ee895bce
=> => extracting sha256:8d243f5f819e83964a7ec9fe65a14fb8656e7e243b94e38fc31a23ce9b70a74a
=> => extracting sha256:28e2b74a91a74fbdf12d92172337fd5b52c8350f813a82db6003866f79a5ddea
=> => extracting sha256:94e16f233544db964f30b2de9e00beec52e7966ab379589b2f07d55fdef7ccbf
=> exporting to image
=> => exporting layers
=> => writing image sha256:e5049e0e92b2ff2e1553aae669ad262f48ecc424276d41ef6a3f7c307b08ee0a
=> => naming to docker.io/library/valheim-server-ec2_valheim
[+] Running 2/2
⠿ Network valheim-server-ec2_default Created
⠿ Container valheim-server-ec2-valheim-1 Started
[ec2-user@ip-172-31-47-217 valheim-server-ec2]$
プロセスを確認
$ docker compose ps
↓下記のように、2456, 2457のUDPポートが開放されていればOK
[ec2-user@ip-172-31-47-217 valheim-server-ec2]$ docker compose ps
NAME COMMAND SERVICE STATUS PORTS
valheim-server-ec2-valheim-1 "/usr/local/sbin/boo…" valheim running 0.0.0.0:2456-2457->2456-2457/udp, :::2456-2457->2456-2457/udp
[ec2-user@ip-172-31-47-217 valheim-server-ec2]$
既にアクセスできる状態ですが…一旦止めます。
コンテナを停止し、移行データを入れる。
コンテナを停止。
$ docker compose down
移行データについては、 .db
, .fwl
を入れる必要があるので2ファイルを用意しておく。C:\Program Files (x86)\Steam\userdata\[スチームID]\[ゲームID]\remote\worlds
にあるとのこと
まずは、移行データをSFTPで転送し、 /home/ec2-user
配下においておく。
移行データをサーバに入れる。.env
のCONFIG_PATH
の場所に、ワールドデータが存在するのでそこにデータを移動する。
今回、 CONFIG_PATH=$HOME/valheim-server-ec2/config
となっているので確認する。
$ ll $HOME/valheim-server-ec2/config/
[ec2-user@ip-172-31-47-217 valheim-server-ec2]$ ll $HOME/valheim-server-ec2/config
total 16
-rw-r--r-- 1 root root 39 Mar 21 00:23 adminlist.txt
-rw-r--r-- 1 root root 40 Mar 21 00:23 bannedlist.txt
-rw-r--r-- 1 root root 42 Mar 21 00:23 permittedlist.txt
-rw-r--r-- 1 root root 270 Mar 21 00:25 prefs
drwxr-xr-x 2 root root 120 Mar 21 00:25 worlds_local
こんな感じになっているが、ワールドデータはないので、worlds_localを見てみる。
$ ll $HOME/valheim-server-ec2/config/worlds_local
[ec2-user@ip-172-31-47-217 valheim-server-ec2]$ ll $HOME/valheim-server-ec2/config/worlds_local
total 300
-rw-r--r-- 1 root root 45 Mar 21 00:23 soloworld_backup_auto-20230321092348.fwl
-rw-r--r-- 1 root root 293013 Mar 21 00:25 soloworld.db
-rw-r--r-- 1 root root 45 Mar 21 00:25 soloworld.fwl
-rw-r--r-- 1 root root 45 Mar 21 00:23 soloworld.fwl.old
これですね。
データのコピー
$ cd ~
$ sudo cp soloworld* $HOME/valheim-server-ec2/config/worlds_local
これでOKです。
再度起動して確認をする。
cd ~/valheim-server-ec2/
docker compose up -d
※ちなみにメモリはこんな感じ
[ec2-user@ip-172-31-47-217 valheim-server-ec2]$ free -m
total used free shared buff/cache available
Mem: 3862 218 1119 0 2524 3425
Swap: 0 0 0
[ec2-user@ip-172-31-47-217 valheim-server-ec2]$
起動の確認
ValheimをSteamから起動する。
キャラクターを選んで…IPアドレスとポートを入力する…!
無事ログインできましたと…
今回は新キャラで入っているので、地図情報無いのと祭壇から始まっているが、エイクスュルが倒せているので移行できている!
というわけで移行完了です!
おまけ: 料金について
https://calculator.aws/ で計算できる。
t3.medium
の場合、どうなるか
毎月 39.71USD
!!なかなかっすね。
別でも運用するとかであれば Savings Plan
で割安になるけどそうでもないからな~。
平日 18~28時+土日祝日起動とかだとどうなるのか気になるところ。 10 * 5 + 24 * 2 (98) / 24 * 7 (168) 位の割合? 58.3%くらい。
なので、 上記の運用であれば 23USD
くらいにはなるのか。それにしてもまあ高いな。
個人の趣味でやるにはまあまあ出費になりそう。
おわりに
ゲームのサーバって Minecraft
以来建てたことなかったけど、最近は Docker
で環境汚さずにできるから本当に良いよね。
特に VPS
とかだと環境汚したくないので、(AWSなどと違って気軽にインスタンス削除みたいなことができないから)かなり使えると思う。