暇殺シ

忙しくはない

ValheimのサーバーをVPSでたてる

目次

いま話題のValheimを24時間遊べるサーバーをたてて友達と一緒に楽しもうって主旨です。
store.steampowered.com

こんな人向け

  • サーバーを借りていつでも友達とValheimを遊べるようにしたい
  • 自宅サーバーは嫌
  • ラグが多いのは嫌(サーバーは国内に設置したい)
  • お金はあまりかけたくない(~1600円/月)
  • コマンドラインの操作ができる

サーバー(VPS)選び

サーバーに必要なスペックは高くない。現状は以下を満たせば十分。*1

私は自分でVPSを借りるのが今回初めてだが仮想サーバーで十分だろうということで適合するVPSサービスを比較サイトから選んだ。
採用したのはKagoyaのサービス。3コア/3GB/30GBの仮想サーバー(KVM)を選択した。(1540円/月)
本当はWeb Arena Indigoの2コア/4GB/80GB(1399円/月)を借りたかったけど空きが無いと断られてしまったので妥協した。
有名どころのAmazon Web Service EC2Google Compute EngineMicrosoft Azureさくらインターネットを選んでもよかったが無料で使えるサーバーではスペック不足だったりそれ以外だと比較的高価なので却下。GPortal等のゲーム専門のレンタルサーバーはサーバーの設定とかラクちんそうだが微妙に高かったりラグがひどいみたいな評判が目についたのでこちらも却下。ここは好みで。

サーバー(インスタンス)の作成・起動

ツールの準備

サーバーはリモートから操作するので最初にSSHクライアントを用意する。好きなものを使えばよい。
マニュアル - KAGOYA CLOUD VPS サポートサイト - SSH接続の設定
私はWindows Terminalを使っている。
Windows Terminalの設定は次の記事が参考になる。後で出てくる秘密鍵をあわせて設定しておけばサーバーへの接続が多少楽になる。
astherier.com

インスタンスの作成

※ここはKagoyaのVPSを借りる場合の手順になります。他サービスで借りた場合はそちらのマニュアル等を参照してください。
マニュアルに従ってやればよい。

  1. SSHアクセスするための鍵作成
    マニュアル - KAGOYA CLOUD VPS サポートサイト - ログイン用認証キー作成
  2. ファイアウォールの設定
    マニュアル - KAGOYA CLOUD VPS サポートサイト - セキュリティグループの設定
    開けるポートは次の通り。
    f:id:Idios:20210216115842p:plain
    セキュリティグループ設定例
    • TCP 22番 → SSHクライアント接続用
    • TCP/UDP 2456-2458番 → Valheimサーバーの接続用
  3. インスタンス作成
    マニュアル - KAGOYA CLOUD VPS サポートサイト - インスタンス作成(Linux OS)
    選択は基本デフォルトでOK。以下のものは設定する。
    • スペック → 3コア/3GB/30GB
    • パッケージ → Ubuntu 16.04 64bit
    • ログイン用認証キー → 鍵作成で作ったものを指定する。
    • セキュリティグループ → ファイアウォールの設定で作ったグループを指定する。

なお、KadoyaのVPSにはeth0にグローバルIPアドレスとプライベートIPアドレス(10.150.11.1)の二つが付与してある。この状態だとValheimサーバーがゲームクライアントに送るべきパケットをプライベートIPアドレスの方で送ることがありその場合はゲームに入れなくなる。これはtcpdumpで調べた。
このプライベートIPが邪魔だがこれはVPSに追加でアドレス設定する時に使うものとありそんなことする予定は無いのでここではアドレスを削除する。疎いので他にいい方法あれば教えて欲しい。

ip addr del 10.150.11.1 dev eth0

インスタンスの起動

インスタンスの作成時に勝手に起動すると思うが起動してなかったら手動で起動する。
マニュアル - KAGOYA CLOUD VPS サポートサイト - 起動

Valheimサーバーの設定

サーバーにSSHで繋いで設定操作をおこなう。
本稿ではValheimサーバーの設定・運用にはLinux Game Server Managers(LinuxGSM)を使うものとする。最初の設定が楽だし運用のための機能もついてるので。
linuxgsm.com

LinuxGSMのインストール

前提パッケージをインストールする。

sudo dpkg --add-architecture i386; sudo apt update; sudo apt install curl wget file tar bzip2 gzip unzip bsdmainutils python util-linux ca-certificates binutils bc jq tmux netcat lib32gcc1 lib32stdc++6 steamcmd

サーバーの状態確認に便利なのでGamedig(LinuxGSMの推奨ツール)も入れておく。

sudo apt remove --purge nodejs npm
sudo apt clean
sudo apt autoclean
sudo apt install -f
sudo apt autoremove
curl -sL https://deb.nodesource.com/setup_12.x | sudo -E bash -
sudo apt update && sudo apt install -y nodejs
npm install gamedig -g

Valheimサーバー用のユーザーを作る。

adduser vhserver
passwd vhserver
※好きなパスワードを設定する

自身をサーバー用ユーザーに変更する。

su - vhserver

LinuxGSMをダウンロードする。

wget -O linuxgsm.sh https://linuxgsm.sh && chmod +x linuxgsm.sh && bash linuxgsm.sh vhserver

LinuxGSMをインストールする。

./vhserver install

ゲームサーバーを起動してみる。

./vhserver start

無事起動したら設定を進めるためゲームサーバーを止める。

./vhserver stop

ゲームサーバーの設定

※サーバーにはSSHで繋ぎゲームサーバー用ユーザーとなって操作すること。
次のパスに設定ファイルがあるのでエディタ(vi/nano)で開く。

lgsm/config-lgsm/vhserver/vhserver.cfg

設定ファイルには次の内容を記載する。

servername="サーバー選択画面で表示するサーバーの名前"
# Minimum password length is 5.
serverpassword="サーバーに入るためのパスワード"
port="2456"
gameworld="ゲームワールドを生成するための文字列(半角英数字ならなんでもよいはず)"
public="1"

サーバーの起動・停止

※サーバーにはSSHで繋ぎゲームサーバー用ユーザーとなって操作すること。
起動は次のコマンドを実行する。

./vhserver start

停止は次のコマンドを実行する。

./vhserver stop

ゲームからサーバーに接続

次の手順でサーバーを探して接続する。お友達にはサーバー名とパスワードを教えておく。

  1. Valheimを起動
    f:id:Idios:20210216130911p:plain
    メニュー画面
  2. Start Game
  3. キャラクター未作成なら作る
    f:id:Idios:20210216131133p:plain
    キャラクター選択
  4. Start→Join Game
    f:id:Idios:20210216131356p:plain
    サーバー選択
  5. [Filter]欄にサーバー名を入れる
  6. サーバーを選択
  7. Connect
  8. パスワードを入力する
    f:id:Idios:20210216132003p:plain
    パスワード入力
  9. I HAVE ARRIVED!!
    f:id:Idios:20210216132138p:plain
    ログイン成功

もしもサーバーが見つからなかったり、パスワードが違ったら設定を見直してください。
steamアプリのお気に入りから入る手順が出回ってるけど自分の環境では結局↑の手順を踏まないとサーバーには入れなかった。

アップデートとバックアップ

※サーバーにはSSHで繋ぎゲームサーバー用ユーザーとなって操作すること。
ゲームにアップデートが入るとサーバーも更新するまで遊べなくなってしまうので1時間に一回アップデートをかける。また、障害やバグでデータ壊れた時に巻き戻せるように1日に一回バックアップをとるようにする。
処理はcronに対して次のように設定する。なお、更新が無い場合はアップデート処理が走ってもサーバーの再起動などは起きない。

crontab -e
↓エディタで以下を記入。
0 * * * * /home/vhserver/vhserver update > /dev/null 2>&1 # 毎時0分にアップデート
0 7 * * * /home/vhserver/vhserver backup > /dev/null 2>&1 # 毎日7:00にバックアップ

バックアップの個数や最大保持日数はLinuxGSMの設定で変更できる。デフォルトは4回×30日。

*1:今後のエンハンスでこのスペックでは足りなくなる可能がある。

*2:私はUbuntu 16.04 LTSを採用した。