メインコンテンツへスキップ

Palworld専用サーバーをDiscordで管理 〜参加者誰でも起動や停止で可用性UP〜

    こんにちはRcatです。
    今回はリリースからすさまじい勢いの新作パルワールドのサーバー管理系の話です。
    私はこういった専用サーバーを立てるゲームでサーバーをよく立てるのですが、可用性が鯖主に左右されるという欠点があります。
    レンタルサーバーかつシェルの知識のある参加者はできないことはないでしょうけれども…。
    つまり専用サーバーのくせに参加者がいつでも参加できないのでは、セッション合流式のゲームとなんら変わりません。
    というわけでDiscordを使って、みんなで管理できるようにしちゃいましょう。

    アップデート情報

    本作バージョン2作成しました
    Windowsに対応したほか生成AIやリモート管理機能など様々な新機能を搭載しより使いやすくなりました。
    ※こちらでは本記事の定義非対応なのでご注意ください。

    ちなみに、今回は下記で作成したサーバー管理ツールをパルワールドで使用するための方法となります。
    ※Ver1.2.0よりメモリ監視で警告と自動停止機能追加しました。palworld0.1.4.1時点でのメモリリークに有効です。

    事前準備

    事前準備としてサーバーのセットアップを行います。

    環境

    今回対象とするのは次の環境です。
    OS : Linux (Ubuntu)
    CPU : N100
    MEM : 16GB
    ハードウェアの詳細は次の記事をご確認ください。

    セットアップ

    最初にSteamcmdのセットアップを行います。
    Steamcmdは、Steamで扱っているゲームサーバーの構築を行うためのコマンドです。
    下記を参考にやったらできたのでこちらでやる前提です。
    https://blog.ahh.jp/?p=29774
    なお、記事の中で出てくる"sudo dpkg –add-architecture i386"の部分に関してはうまくいかなかったのですが、スキップしても問題ありませんでした。
    追記:
    公式の説明からSteamCMDの公式ページへ飛んでも同じ内容が書いてありました
    。
    こちらも"dpkg –add-architecture i386"がありますが同じくスキップですかね。

    サーバーをセットアップ

    セットアップが完了したSteamcmdを使ってサーバーをインストールします。
    上記で紹介したセットアップ方法だと"steamcmd"がコマンドとして使用できるので実行します。
    次に"force_install_dir"コマンドでインストール先を決定します。
    次に匿名ユーザーでログインします。"login anonymous"
    よくある間違いとして先にログインをしてからインストール先決定をしてますが、その順番だと警告が出ます。別に問題なくインストールできますが、急に仕様が変わってエラーになる可能性も否定できないので、この順番でやる方がいいでしょう。
    最後にサーバーをインストールします。"app_update 2394010 validate"
    ここで言う"2394010"が、パルワールドのサーバーのIDになります。
    逆に言えばこのIDさえ分かればどんなゲームでも同じ方法でサーバーを立てられます。

    実行例
    初回はアップデートだけでなく、全体のダウンロードが入るのでもう少し時間がかかる。

    $ steamcmd
    Logging directory: '/home/rcat/Steam/logs'
    [  0%] Checking for available updates...
    [----] Verifying installation...
    Steam Console Client (c) Valve Corporation - version 1705108307
    -- type 'quit' to exit --
    Loading Steam API...dlmopen steamservice.so failed: steamservice.so: cannot open shared object file: No such file or directory
    OK
    
    Steam>force_install_dir /SSD/palworld
    
    Steam>login anonymous
    
    Connecting anonymously to Steam Public...OK
    Waiting for client config...OK
    Waiting for user info...OK
    
    Steam>app_update 2394010 validate
     Update state (0x5) verifying install, progress: 0.19 (4194304 / 2248053389)
     Update state (0x5) verifying install, progress: 30.65 (688978846 / 2248053389)
     Update state (0x5) verifying install, progress: 67.35 (1514175245 / 2248053389)
    Success! App '2394010' fully installed.
    
    Steam>quit

    ダウンロードが終わったら"PalServer.sh"を実行することでサーバーを立てることができます。
    一度実行して稼働することを確認してください。

    画像

    管理ツールのセットアップ

    準備ができたら私オリジナルの管理ツールをセットアップしていきます。
    この汎用管理ツールを使うことで、Discordのボットから指示を受け付けることができます。

    上記の記事からツールを配布していますので、ダウンロードしてください。
    また、一通り読んでいただき、サーバーの定義方法などは理解した前提でこの先進めていきます。

    ダウンロードして展開したものを任意のフォルダーに格納してください。
    この中で絶対に必要なのがpyファイルとHTMLになります。それ以外はなくても大丈夫です。

    画像

    start.sh

    ここから先は上記記事を読了済みで理解している前提です。

    まず起動スクリプトの紹介です。
    こちらが私が作成した起動スクリプトです。
    二重起動の防止処理の後にサーバーの起動が入っているだけです。
    ちなみに公式の起動スクリプトがあるので、それを起動しに行くだけの超簡単な構造です。
    あと、アップデートがあった時に自動で適用できるようにアップデートスクリプトを先に挟んでいるという特徴もあります。
    二重起動の防止処理のファイルはツールがサーバーの起動を判定するのに使うので必須です。

    画像

    update.sh

    アップデートスクリプトの内容はいかになります。
    先ほどの、サーバーインストールコマンドと全く同じこと事が書いてあります。
    ただし改行ができないので、各コマンドをプラスでつなぐという方法を取っています。

    画像

    stop.sh

    サーバーを停止させるスクリプトです。
    ここではRCONを使用し、セーブの指示を出した後、シャットダウンの指示を送っています。
    少なくとも公開時点では、RCONを使用して安全にシャットダウンしているのはこの方法のみだと思います。
    サーバーコマンドとRCONに関しては下記記事をご確認ください

    画像

    Backup.sh

    詳細は配布内容を確認してください

    unique.py

    上記の固定コマンド以外に任意のコマンドを定義できます。
    下記でPalworldを例にプレイヤーリストを挙げているので良ければ試してください。(本記事の配布には含まれています)

    実行方法

    下記記事の操作方法をご確認ください。

    サーバー定義の配布

    今回紹介したパルワールド専用のサーバー定義は以下にて配布中です。
    使ってみたいという方は使用してみてください。
    当たり前ですが、ファイルパスなどは異なってくるので、そのあたりは書き換えてください。

    https://script.google.com/macros/s/AKfycbysRqb7488rvLGPqOOhGlr0w513zIHC67BEPzJtPAKrAc4lKfDCmsB0mVL1Ha5BY5P0/exec?name=ゲームサーバー管理サーバー定義_Palworld

    なお、入手には下記有料ライン以下のキーワードが必要です。
    利用規約に同意の上お買い上げください。
    ちなみに内容は記事に貼っている画像と同じなので、面倒な方かこれ位なら情報もくれたしいいかなと思っていただけた方向けです。

     
     
    モノづくりが趣味。 "売ってないなら自分で作ればいいじゃない"をコンセプトに、機械/電気/AI/プログラム/ネットワーク 全部やります。 記事執筆はAI不使用。 ご連絡や利用規約はプロフィール記事参照。

    あなたへのおすすめ