ほのぼの技術部

技術系記事

AzureでPalworldのプライベートサーバーを構築した

はじめに

個人のPalworldサーバーを構築した記録

とりあえず構築から常時稼働状態までもっていく。

背景

  • ローカルワールドの招待制だと4人までしかプレイできない。
  • 手軽だが、鯖主は1人プレイの同じデータで遊べるけど、ゲストは初期データから始めなければいけないのがネック。
    • 鯖主だけレベル高い世界みたいなことができやすい?

なので、専用サーバーなら、32人までプレイできるし、フェアにいつでもアクセスできるようにしたかったので構築してみた。

構築概要

AzureでLinux仮想マシンを用意して、そこにPalworldサーバーを構築する。

見積り

まず要求スペックを確認。

https://tech.palworldgame.com/dedicated-server-guide

公式マニュアルを参考すると、

  • CPU:4コア
  • メモリ:16GB

あればいいらしい。

(リリース日は8GBってなってたけど、次の日みたら16GBになってた。ドキュメント更新対応早くてありがたいです。ってかアーリーアクセス時点でこっち系のドキュメントまで整備されているのマジで凄いです。)

予算は月8000円くらいでできるといいなーと思いつつAzureで見積り。

VirtualMachineは、ワークロードの例としてゲームサーバーの記載があったので、D系のシリーズを使うことにします。(D***の細かい文字列は知らん)

スポットVMを使用して価格を抑えます。

Azure料金計算だとスポットのシミュレーションは入っていないっぽいので、正規の値段からスポット価格表を照らし合わせてざっくり計算します。

ストレージはSSDの32GBにしてみた。

130$くらいだから、今の円だとおおよそ1.5倍で2万?

スポットの割引を確認して90%の節約らしいから10分の1で月2000円。

え、安くね?

しかも夜にしか稼働しない予定なので、もっと安く済むかも・・・?

地域は割引考えると近くてもいいと判断し、日本にする。

下記の環境を構築する予定

  • OS:LinuxUbuntu
  • VirtualMachine:4コア、メモリ16GB
  • ストレージ:SSD(32GB)
  • 地域:日本のどこか

構築作業

Azureの管理ページを開いて、Virtual Machines→

作成→Azure仮想マシン

  • プロジェクトの詳細
  • インスタンスの詳細
    • 仮想マシン名:<任意の名前>
    • 地域:(Asia Pacific)Japan East
    • 可用性オプション:インフラストラクチャ冗長は必要ありません。
    • セキュリティの種類:トラステッド起動の仮想マシン
    • イメージ:Ubuntru
    • アーキテクチャ:x64
    • AzureSpot割引を実行する:チェック
    • サイズ:任意のスペックを選択

    ここはvCPUのコア数が3までしか選択できなくて、4にするためには、クォータ要求をする必要があった。

    任意のVMサイズを選んでクォータ要求を送信する。

    自分の場合は10分くらいですぐ承認された。

    (*筆者は見積と同じVMサイズは選択していない。)

  • 管理者アカウント
    • 今回はSSH鍵認証で
  • 受信ポートの規則
    • パブリック受信ポート:選択したポートで接続する
    • SSH(22)
  • ディスク
    • Standard SSD
    • サイズ:規定量(30GiB)
    • VMと共に削除:チェック
    • 他そのまま
  • ネットワーク
    • 仮想ネットワーク:新規作成
    • VMが削除された時にNICを削除する:チェック
    • 他そのまま
  • 管理
    • 自動シャットダウン:チェック
      • 夜更かし防止にテキトーに深夜の時間に設定
  • 監視
    • アラート:チェック
      • 自動シャットダウンの通知確認用

認証をSSHにしたので秘密鍵は忘れずにダウンロードしておく。

これで作成完了

設定(Azure側)

ポート設定

Palworld公式マニュアルより、ポート番号8211を開放します。

仮想マシンのネットワーク設定画面へ進み、ネットワーク設定を行う。

先ほど作成されたネットワークセキュリティグループのポートルールの作成(受信)

UDPプロトコルで宛先のポート番号を指定。

DNS名設定

仮想マシンの作成と一緒に作成された、パブリックIPアドレスの画面へ遷移→構成

DNS名ラベル(オプション)に任意の名前を設定。

「xxxxxx.japaneast.cloudapp.azure.com」のxxxxxxの部分の名前が付けられます。

これでOK

設定(仮想マシン側)

Azure側で仮想マシンを開始しておく。

任意のターミナルソフトでSSH接続し、秘密鍵でログイン。(私はTeraTermを使用)

初期設定

ルートユーザになって、システムを最新にしてみる。

$ sudo -s
# apt update
# apt -y upgrade

導入作業

ここからは、またPalworld公式マニュアルを参考に導入していく。

SteamCMDの導入

  • 公式手順

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

steamユーザを用意する

sudoも使えるようにしておきます。

$ sudo useradd -m steam
$ sudo passwd steam
$ sudo usermod -G sudo steam

SteamCMDのインストール(今回はリポジトリから導入)

$ sudo -u steam -s
$ cd /home/steam
$ sudo add-apt-repository multiverse; sudo dpkg --add-architecture i386; sudo apt update
$ sudo apt install steamcmd

steamcmdコマンドが使用できるようになります。

専用サーバーのダウンロードと準備

公式マニュアルの手順に戻り、進めていく。

専用サーバーのダウンロード

$ steamcmd +login anonymous +app_update 2394010 validate +quit

ダウンロード先のディレクトリは下記のはず

「/home/steam/.steam/SteamApps/common/PalServer/」

一度、サーバー起動スクリプトを実行する。

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

ライブラリファイルがないと言われてエラーが出るので、指定の場所にコピーします。

$ mkdir -p ~/.steam/sdk64/
$ steamcmd +login anonymous +app_update 1007 +quit
$ cp ~/.steam/SteamApps/common/Steamworks\ SDK\ Redist/linux64/steamclient.so ~/.steam/sdk64/

再度サーバースクリプトを実行して確認。

$ ./PalServer.sh

起動時に1度エラーが表示され、.steam/sdk64/steamclient.so OK. (First tried local 'steamclient.so')

が表示されることを確認できれば、完了。

動作確認

Palworldを起動して、「マルチプレイに参加する(専用サーバー)」を選択

画面中央下の入力バーに接続先をポート番号付きで入力して接続。

xxxxxx.japaneast.cloudapp.azure.com:8211

キャラ作成画面が表示されれば成功!

楽しんで。

おわりに

これで、いつでも遊びたいときに入って抜けれる環境が構築できた。

引き続き、サーバーの稼働時間の調整や、このワールドの設定やコマンドなどを使ってカスタマイズしていこうと思う。