🐡

Check! パルワールド専用サーバーをAzureで構築するぞ

2024/02/10に公開

Prologue

こんにちは、@dz_ こと、岩永かづみです。

オープンワールドでパル(モンスター)を集めて冒険するゲーム「パルワールド」の専用サーバーをAzure VMで構築したので、その作業記録です。

作業風景はこちらからご覧いただけます。念のため、配信時からIPアドレスやパスワードは変更してるのでご安心ください。

https://youtu.be/pAx2qf5VKnc

Azure VMのリソースを作成する

Azure VMの作成手順の詳細は割愛しますが、以下の構成で作成しました。

項目 説明
OS Ubuntu 22.04
サイズ Standard E2as v5 (2 vcpu 数、16 GiB メモリ)
ネットワーク ほぼ初期値。SSHポートは自宅からの接続のみ開放。パルワールド専用サーバーのデフォルトポート8211をUDPで開放。
ストレージ OSディスクのみ(※)

パルワールドの動作要件では、CPUの推奨は4コアですがいったん2コアで試してます。プレイヤー数が1,2名なら特に問題なさそうです。1名で50%前後、2名で70%くらい使っていたようです。参加人数が増えてきたら、B4as v2あたりにアップグレードするつもりです。

メモリは、現状、プレイしてるとメモリを食い続けて回復しないようなので、定期的にサーバーアプリケーションの再起動、もしくはサーバー自体の再起動が必要です。次の図は7日間の空きメモリ量の推移です。空きメモリ量が下がり続け、再起動(矢印)のタイミングで解放されていることがわかります。

パルワールド専用サーバーの空きメモリの推移
パルワールド専用サーバーの空きメモリの推移

ストレージは、上記の動画中ではデータディスクも追加しているのですが、インストールしてみたところ、OSディスクだけでも容量が十分に足りそうなので外しました。ログファイルが微増していっているので、厳密にはログローテートなど対処した方がいいかもしれませんが、とりあえず様子見です。この辺りは、パルワールドに限らずSteamCMDの仕組みに応じた運用になりそうです。

パルワールド専用サーバーをダウンロード、起動設定をする

VMの用意ができたら、早速パルワールド専用サーバーの準備をしていきましょう。

パルワールド専用サーバーを構築するにはまず、ゲームプラットフォームSteamのアプリケーションをコマンドラインで扱えるクライアントStreamCMDをインストールしてから、パルワールドのサーバーアプリケーションをダウンロードし、設自動起動の設定や定の調整をします。

SteamCMDをインストールする

まずは、SteamCMDを公式の手順に従ってインストールします。

以下はUbuntuでの作業ログです。上記の手順に加え、必要に応じてカスタマイズしています。

# steam実行用ユーザーを作成する
sudo useradd -m steam
sudo passwd steam

# steam実行用ユーザーにsudo権限を付与する
sudo usermod -G sudo steam

# steam実行用ユーザーに切替える(以降、steamユーザーで作業する)
sudo -u steam -s
cd /home/steam

# Ubuntuのパッケージを最新にする
sudo apt update

# SteamCMDパッケージをインストールする
sudo add-apt-repository multiverse; sudo dpkg --add-architecture i386; sudo apt update
sudo apt install steamcmd

この時点で、ライセンスへの同意を求められるので、よく読み、問題なければ同意してください。

Package configurationで、Daemons using outdated librariesについて確認されるので、問題なければOKを選択して進めてください。

steamcmdのインストールが無事完了したら次に進みます。

パルワールド専用サーバーをダウンロードし、起動確認する

次に、パルワールド専用サーバーをダウンロードします。手順はパルワールドのテックガイドを参照します。

以下、steamcmd+app_updateコマンドで、パルワールド専用サーバーのSteam Application IDである2394010を指定して専用サーバーをダウンロードします。(※)

※ 余談です。このSteam Application IDについては、手順では詳細なしにIDが直に書かれており謎に思っていたのですが、この記事を書くにあたり調べてみました。Steam Application IDは、Steamにおけるアプリケーション個別のIDです。クライアントアプリケーションの場合はゲームのページのURL https://store.steampowered.com/app/{steam application id} から確認でき、そうでないもの(今回のようなサーバーアプリケーション)の場合は有志によるSteamDBから確認できるそうです。

# パルワールドの専用サーバーをダウンロードする
/usr/games/steamcmd +login anonymous +app_update 2394010 validate +quit

# パルワールドの専用サーバーのダウンロード先へ移動する
cd ~/Steam/steamapps/common/PalServer

# パルワールドの専用サーバーを起動する
./PalServer.sh

公式ドキュメントに注意書きがあるように、以下のエラーが発生した場合はどうやらSteam Clientが足りないそうなので、下記手順を行います。

/home/steam/.steam/sdk64/steamclient.so: cannot open shared object file: No such file or directory
# ~/.steam/sdk64/ディレクトリを作成する
mkdir -p /home/steam/.steam/sdk64/

# Steam Client(Steamworks SDK Redist)をダウンロードする
/usr/games/steamcmd +login anonymous +app_update 1007 +quit

# steamclient.soを所定の場所にコピーする
cp ~/Steam/steamapps/common/Steamworks\ SDK\ Redist/linux64/steamclient.so /home/steam/.steam/sdk64/

# パルワールドの専用サーバーを起動する
./PalServer.sh

パルワールド専用サーバーを自動起動させる

PalServer.shが無事に実行されたら、自動起動の設定をしておきましょう。

SSH接続での作業においてPalServer.shを起動するだけでは、SSHのセッションを閉じれば停止してしまいますし、安易に&でバックグラウンド起動するとプロセスを追いきれなくなると考え、サービスとして起動することにしました。(この辺りの作業はあまり慣れておらず、適切かどうかは不明です。もっと良い方法があれば教えてください。)

サービスとして起動する方法は別途お調べいただくとして、以下のような設定で対応しました。

ここでは、パルワールド専用サーバーをコミュニティサーバーとして起動したかったので、PalServer.shの引数にEpicApp=PalServerを指定しています。コミュニティサーバーに関しては、下記ドキュメントをご参照ください。

/etc/systemd/system/palserver.service
[Unit]
Description=Palworld server

[Service]
Type=simple
User=steam
Group=steam
TimeoutStartSec=0
Restart=on-failure
RestartSec=30s
ExecStart=/home/steam/Steam/steamapps/common/PalServer/PalServer.sh EpicApp=PalServer
SyslogIdentifier=PalServer

[Install]
WantedBy=multi-user.target

設定ファイルが作成できたら、以下のコマンドでサービスを有効化し起動します。

# 作成したpalsever.serviceを有効化する
sudo systemctl enable palserver.service

# パルワールド専用サーバーをpalserver.serviceから起動する
sudo systemctl start palserver.service

パルワールド専用サーバーの設定を調整する

パルワールド専用サーバーの設定については、公式ドキュメントをご参照ください。

設定ファイルは、~/Steam/steamapps/common/PalServer/Pal/Saved/Config/LinuxServer/PalWorldSettings.iniですが、初回は存在しないので、DefaultPalWorldSettings.iniをコピーして作成します。

# 設定ファイルをコピーして作成する
cp ~/Steam/steamapps/common/PalServer/DefaultPalWorldSettings.ini ~/Steam/steamapps/common/PalServer/Pal/Saved/Config/LinuxServer/PalWorldSettings.ini

私は、複数人でサーバーを利用できるように、とりいそぎ以下のパラメーターを調整しました。

パラメーター 説明 備考
ServerPlayerMaxNum サーバーに参加できる最大人数 VMのスペックが低いので少人数に制限
ServerName サーバー名
ServerPassword サーバーのログインに必要なパスワード
AdminPassword サーバーの管理者権限を取得するのに使用するパスワード まだ設定していないが、将来的に使いそう

パルワールド専用サーバーを更新する

パルワールド専用サーバーは、クライアントのバージョンと一致していないとプレイできません。バージョンが一致しない場合、クライアントからサーバーに接続しようとすると、以下のようなエラーが表示されて接続できないので、専用サーバーを更新する必要があります。

クライアントとサーバーのバージョンが一致しない場合のエラー表示
クライアントとサーバーのバージョンが一致しない場合のエラー表示

専用サーバーに最新のバージョンを反映するには、再度steamcmd+app_updateコマンドを使って更新をダウンロードします。

# パルワールド専用サーバーのサービスを停止する
sudo systemctl stop palserver.service

# パルワールドの専用サーバーの更新をダウンロードする
/usr/games/steamcmd +login anonymous +app_update 2394010 validate +quit

# パルワールド専用サーバーのサービスを起動する
sudo systemctl start palserver.service

専用サーバーが起動したら、クライアントから接続できれば更新成功です。

Epilogue

以前、恐竜が居る世界観のサバイバルゲーム「ARK: Survival Evolved」でも専用サーバーを立てたことがあり、今回は比較的スムーズに構築できました。さらに、この記事でまとめるにあたり、Steamについてより理解が深まり、エンジニアとしても楽しめてホクホクです。

今回構築したパルワールド専用サーバーでちょっとずつ遊んでいるので、もしよければ見に来てください🙌 配信はTwitchで、アーカイブはYouTubeに残しています。

https://twitch.tv/dzeyelid

https://youtube.com/@dzeyelid

Discussion