🐰

【GCP/Linux】GCEに話題のパルワールド(Palworld)の専用サーバー(Dedicated Server)を構築してみた

2024/01/25に公開1

概要

今回は現在、話題になっているパルワールド(palworld)の専用サーバーをGCPのGoogle Compute Engineに構築する方法を紹介します。少々マニアックな内容にはなりますが、最後までお付き合いいただけると幸いです。

はじめに

本記事ではパルワールド(palworld)の専用サーバーをGCPのGoogle Compute Engineに構築する方法を紹介しています。バージョンや環境依存によって正常に動作しない可能性はあります。実装の一例であることをご理解の上、参考にしていただけると幸いです。

サーバーの構成

まず、どの程度のサーバースペックが必要かですが、現状パルワールドはメモリーの使用量が多くなり傾向があり、同時接続するユーザー数に比例して要求されるメモリー容量も増やす必要があります。以下は筆者が3人ほどでマルチをした際に安定稼働した構成になります。10人以上だと最低でも32GB以上はないと厳しいと感じます。

- スペック 補足
マシン E2 比較的低コストで構築できるマシン構成
OS Ubuntu -
CPU 2コア 公式推奨は4コア以上ですが、2コアでも問題なく動作しています
Memory 16GB 2~4人マルチだと最低でも8GBはないと安定しません
HDD 30GB サーバー自体の容量は大きくないので、そこまで大きめなストレージは必要ないです
Region asia-northeast1(東京) 物理的に近いサーバーのほうが通信が安定しますが、コストも上がります

サーバーの費用

GCEの料金はサーバーの起動時間で課金されます。サーバースペックなどで単価が異なるため、構築前にGoogle Cloud 料金計算ツールで見積もりをすることをおすすめします。
https://cloud.google.com/compute/vm-instance-pricing?hl=ja

GCEの新規インスタンスを作成

インスタンスを作成する

以下のページにアクセスしてGCEのインスタンスを作成します。作成するプロジェクトを間違えないよう注意してください。
https://console.cloud.google.com/compute/instances?hl=ja

各種情報を入力する

設定できる項目が非常に多数ありますが、今回設定すべきところは以下の通りです。

項目 補足
名前 任意の名前を入力 特に指定などはありませんが、名前からなんのサーバーか分かるようにしておくといいと思います
マシン構成 E2 サーバーに同時接続するユーザー数などで調整してください
マシンタイプ e2-medium(4 vCPU、2コア、16GBメモリ) サーバーに同時接続するユーザー数などで調整してください
ブートディスク OS:Ubuntu、バージョン:LTS、ブートディスクの種類:バランス永続ディスク、サイズ(GB):10 OS以外はデフォルトで問題ありません

上記を設定できたら画面右側に表示されている月間予測の金額を確認します。実際には別機能で少しプラスされるため、ここで確認できるのはあくまでサーバー費用のみになります。費用を確認して問題なければ、ページ下部にある「作成」をクリックします。

インスタンス作成画面のスクリーンショット

GCEインスタンス作成

初期設定

Cloud ShellからSSH接続する

Google Cloud SDKに内包されているgcloudを使ってローカル環境からアクセスすることも可能ですが、普段GCPを使っていない人は導入していないと思いますので、今回はGCPにあるCloud Shellを使用してSSH接続していきます。
今回はCloud Shellの説明は省略するので、詳しく知りたい方は以下のサイトをご参照ください。

https://cloud.google.com/shell?hl=ja

Cloud Shellを起動させる

Cloud Shell
こちらページから先程作成したインスタンスをクリックして管理ページに移動します。移動後、画面上部にある「SSH」ボタン横にある下矢印をクリックし、「gcloudコマンドを表示」をクリックします。ポップアップが表示されたら下部にある「CLOUD SHELLで実行」をクリックするとShellが起動します。

SSH接続する

上記で起動させるとコマンドライン上に以下が表示されていると思いますので、Enterを押します。

$ gcloud compute ssh --zone "{{ リージョン名 }}" "{{ インスタンス名 }}" --project "{{ プロジェクトID }}"

「Cloud Shellの承認」のポップアップが表示されると思いますので、承認します。承認後、コマンドラインが以下の表示になっていればSSH接続完了です。

{{ ユーザーID }}@{{ インスタンス名 }}:~$

ユーザーを追加する

SSH接続できたら次は実行するユーザーを作成していきます。ユーザーの新規作成は以下のコマンドを実行します。

ユーザーを新規作成

以下のコマンドを実行することで「palworld」というユーザーを作成できます。ユーザー名は任意で変更しても問題ないですが、以降のコマンドで使用していくため、そちらも適宜変更してもらう必要があります。

$ sudo useradd -m palworld

パスワードを設定する

追加したユーザーのパスワードを設定します。

$ sudo passwd palworld

権限を付与する

追加したユーザーにsudoの実行権限を付与します。

$ sudo usermod --append --groups sudo palworld

ユーザーを切り替える

以下のコマンドを実行して追加したユーザーに切り替えます。

$ sudo -u palworld -s
$ cd

SteamCMDを導入

実行環境の確認

実行前にユーザーが切り替わっているか、rootディレクトリに移動してあるか確認してください。コマンドライン上が以下のような表示であれば問題ありません。

palworld@{{ インスタンス名 }}:~$

インストールコマンドを実行する

確認できたら公式サイトにあるコマンドを順番に実行していきます。途中パスワードの入力が求められるので、先程設定したパスワードを入力します。

$ sudo add-apt-repository multiverse; sudo dpkg --add-architecture i386; sudo apt update

以下のコマンド実行すると途中で、規約の同意可否などを求めれるので、内容を確認してOK or AGREEを選択します。

$ sudo apt install steamcmd

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

パスを通す

インストール完了後に/usr/gamesにパスを通します。.bash_profileをviで編集していきます。viの使い方はここでは解説しませんので、ご了承ください。

$ vi .bash_profile

viが起動したら以下の内容を追記して保存します。

export PATH="$PATH:/usr/games"

保存後に変更内容を反映させるために以下のコマンドを実行します。

$ source .bash_profile

SteamCMDが実行できるか確認

以下のコマンドを実行してインストールできたか確認していきます。実行後にSteam>の表示がでていれば成功です。

$ steamcmd
# steamcmdから出る際は以下のコマンドを実行
$ quit

Palworld Dedicated Serverのインストール

下準備を終えたのでようやくパルワールドのサーバーをインストールしていきます。インストール自体は以下のコマンドを実行するだけで完了します。ただ時間が少しかかるので、ここでコーヒーでも飲んで一服しましょう。

$ steamcmd +login anonymous +app_update 2394010 validate +quit

サーバーを起動できるか確認

以下のコマンドを実行してサーバーが起動できるか検証してみます。

$ cd .steam/SteamApps/common/PalServer/
$ ./PalServer.sh

恐らくですが、/home/palworld/.steam/sdk64/steamclient.soというエラーが複数表示され正常に動作しないと思います。なので、まず以下のコマンドでこの問題を解消します。

$ cd
$ mkdir -p ~/.steam/sdk64/
$ ln -s ~/.steam/SteamApps/common/PalServer/linux64/steamclient.so ~/.steam/sdk64/steamclient.so

問題解消後に再度サーバー起動のコマンドを実行して以下のような表示がでていれば成功です。

[S_API FAIL] Tried to access Steam interface SteamUser021 before SteamAPI_Init succeeded.
[S_API FAIL] Tried to access Steam interface SteamFriends017 before SteamAPI_Init succeeded.
[S_API FAIL] Tried to access Steam interface STEAMAPPS_INTERFACE_VERSION008 before SteamAPI_Init succeeded.
[S_API FAIL] Tried to access Steam interface SteamNetworkingUtils004 before SteamAPI_Init succeeded.

ファイアウォール設定

コマンドラインでの作業はここで一段落したので、次にファイアウォール設定をしていきます。パルワールドはデフォルトのポート番号が「8211」ですが、初期設定では閉鎖されているので、ファイアウォール設定を変更して開放する必要があります。

ルールを追加する

以下のページにアクセスしてファイアウォールルールを追加します。
https://console.cloud.google.com/net-security/firewall-manager/firewall-policies/list?hl=ja

上部にある「ファイアウォールルールを作成」をクリックして追加します。以下の項目を設定します。

項目 補足
名前 任意の名前を入力 特に指定などはありませんので任意の名前で大丈夫です。
ターゲットタグ palworld 特に命名規則ないですが、これでインスタンスと紐付けるため、分かりやすい命名にしておくと良いと思います。
送信元IPv4範囲 0.0.0.0/0 -
UDP 8211 -

インスタンスと紐付ける

ターゲットタグ
インスタンスの設定ページに移動して、上部の「編集」をクリックしてネットワークタグの項目に「ターゲットタグ」で設定したタグを設定します。

ゲームからサーバーにアクセス

これで最低限の準備はできたので、一旦ゲームからアクセスできるか検証してみます。ゲームからアクセスする際は「マルチプレイに参加する(専用サーバー)」を選択して、下部にあるIPアドレス入力欄にGCEインスタンスのIPアドレスを入力します。GCEインスタンスのIPアドレスは以下のページの外部IPの項目で確認することができます。
https://console.cloud.google.com/compute/instances

アクセスしてみてキャラ作成画面が表示されれば成功です。ただこのままだと毎回SSH接続してサーバーを手動で起動させる必要があり、やや面倒なのでサーバー起動時に自動でパルワールドサーバーも立ち上がるように設定しましょう。ただ今回は少し長くなってしまっているので、こちら方法やサーバーの設定変更などに関しては近日まとめますので、気長にお待ちください🙏

まとめ

今回は現在、話題になっているパルワールド(palworld)の専用サーバーをGCPのGoogle Compute Engineに構築する方法を紹介しました。比較的運用コストも抑えることができると思いますので、ぜひ参考にしていただければと思います。

本記事を最後まで読んで頂き、ありがとうございました。いいねしていただけると記事執筆の励みになりますので、参考になったと思った方は是非よろしくお願いします!

参考記事

https://zenn.dev/t_furu/articles/346d15348a22c7
https://qiita.com/naoya-i/items/e907a6b949e5da36d532

Discussion

kizokukizoku

GCPの勉強で無知識でトライしていましたがうまく行かず・・・拝見して試してみたら無事起動できました。ありがとうございました!