【パルワールド】マルチプレイサーバーをDockerでサクッと建てる方法

Docker

はじめに

最近話題のパルワールドというゲームについてです!
マルチサーバーを自宅サーバーに建ててみたので、建て方をご紹介します。

公式の手順ではホスト側にSteamCMDをインストールして、パルワールドのサーバーソフトウェアを入れるのですが、サーバーの環境を汚したくないと言うのと、のちのち環境の構築・解体・移動が簡単にできるDocker技術を用いてメンテナンス性の高い方法で導入していきます。
参考:公式のサーバー構築手順

Linuxをインストール

VPSなど借りている場合はそちらでOKです(OSはUbuntuにする事)
今回はMINISFORUM Venus Series NAB5と言う小型PCを購入してUbuntuをインストールしました。
セールになっていて6万7,000円ほどで入手できました。

用意したPCスペック

  • CPU Intel Core i7 12650H
  • メモリ 32GB(16GB x2)
  • LAN 2.5Gbps x 2ポート
  • OS Windows11
  • ストレージ M.2 SSD 512GB
    • 2.5インチHDD/SSD追加可能

値段の割に結構良いスペックで小型で省スペースでとっても良かったです。
(1月31日にスペック上がった新型のNAB7が出るらしい…)

Ubuntuのインストール

Ubuntu Server公式サイトからiSOイメージをダウンロード

Get Ubuntu Server | Download | Ubuntu
Get Ubuntu Server one of three ways; by using Multipass on your desktop, using MAAS to provision machines in your data c...

Rufusというフリーソフトで起動USBを用意します。

Rufus - 起動可能なUSBドライブを簡単に作成できます
Rufus: Create bootable USB drives the easy way

あとはUSBメモリを刺した状態でPCを起動してUbuntuをインストールします。
詳しいインストール方法は調べるとたくさん出てくると思うので割愛します。

インストールができたら、SSHで接続してください。
TeraTermというフリーソフトがおすすめです。

Releases · TeraTermProject/teraterm
Contribute to TeraTermProject/teraterm development by creating an account on GitHub.

TeraTermを起動したら、IPアドレスとユーザー名とパスワードでログインしてSSH接続します。
TeraTermでは、マウスで文字を選択するだけでコピーされて、右クリックすると貼り付けになります。癖があるけど便利なので覚えておいてください!

ファイアウォールの設定

公開するサーバーなのでファイアウォールはしっかりと設定しておく事を推奨します。
※VPSを利用している場合はVPS側の機能でセキュリティグループ設定があると思うので、そちらで8211番のUDPを通すように設定してください。

まず最初にSSHのポートを開放しておきます。
※これしないと後で自分自身がアクセスできなくなります!!

ShellScript
                    # ↓ 各自の環境に合わせてください
sudo ufw allow from 192.168.11.0/24 to any port 22

パルワールドは8211番ポートのUDPを利用するので開放します。

ShellScript
sudo ufw allow 8211/udp

ファイアウォールを有効化します。

ShellScript
sudo ufw enable

Dockerをインストール

コピペでDockerがインストールできます。

ShellScript
# 競合するパッケージを削除
for pkg in docker.io docker-doc docker-compose podman-docker containerd runc; do sudo apt-get remove $pkg; done

#パッケージ インデックスを更新
sudo apt-get update -o Dir::Etc::sourcelist=/dev/null
sudo apt-get install apt-transport-https ca-certificates curl gnupg lsb-release software-properties-common -y

# Dockerの公式GPGキーを追加
sudo install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --yes --dearmor -o /etc/apt/keyrings/docker.gpg
sudo chmod a+r /etc/apt/keyrings/docker.gpg

# Dockerのリポジトリをセットアップ
echo \
"deb [arch="$(dpkg --print-architecture)" signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
"$(. /etc/os-release && echo "$VERSION_CODENAME")" stable" | \
sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
                
# パッケージ インデックスを更新
sudo apt-get update

# Dockerをインストール
sudo apt-get install docker-ce docker-ce-cli containerd.io  docker-buildx-plugin docker-compose-plugin -y

# 自動起動するように設定
sudo systemctl enable docker
sudo systemctl start docker

docker-composeをインストール

docker-composeもインストールしておきます。

ShellScript
sudo curl -L https://github.com/docker/compose/releases/download/v2.12.2/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose

Dockerfileを作成

ShellScript
nano Dockerfile

エディタが開いたら下記の中身を貼り付けて、Ctrl + Xで保存。

ShellScript
FROM cm2network/steamcmd:latest AS base

RUN mkdir -p /home/steam/.steam/sdk64/
RUN ./steamcmd.sh +login anonymous +app_update 1007 +quit
RUN cp /home/steam/Steam/steamapps/common/Steamworks\ SDK\ Redist/linux64/steamclient.so /home/steam/.steam/sdk64/

RUN ./steamcmd.sh +login anonymous +app_update 2394010 validate +quit
RUN cp /home/steam/steamcmd/steamservice.so /home/steam/.steam/sdk64/

WORKDIR /home/steam/Steam/steamapps/common/PalServer

EXPOSE 8211/udp
RUN mkdir /home/steam/Steam/steamapps/common/PalServer/Pal/Saved
RUN chown steam.steam /home/steam/Steam/steamapps/common/PalServer/Pal/Saved

CMD ["./PalServer.sh", "players=32", "-useperfthreads", "-NoAsyncLoadingThread", "-UseMultithreadForDS"]

解説

SteamCMDがセットアップ済みのベースイメージが用意されているので、
cm2network/steamcmdをベースイメージに利用させていただきました。

起動時にsteamclient.soが無いエラーが出る事があるようなので、ライブラリをインストール。
その後パルワールドのサーバーをインストールしています。
8211番ポートをコンテナの外に公開。
セーブデータのフォルダを作成してsteamユーザーに権限を付与。
プレイヤー数32人、マルチスレッドCPU環境において性能を向上させるオプション追加して起動。

docker-compose.ymlを作成

ShellScript
nano docker-compose.yml

エディタが開いたら下記の中身を貼り付けて、Ctrl + Xで保存。

YAML
version: "3.9"
services:
  palworld:
    build: .
    ports:
      - "8211:8211/udp"
    restart: always
    volumes:
      - ./Saved:/home/steam/Steam/steamapps/common/PalServer/Pal/Saved
    user: "1000:1000"

解説

先ほど作成したDockerfileをビルドします。
ホスト側の8211番ポートをコンテナの8211番ポートにつなぎます。
もし、パルワールドからの接続時にポート番号を9999に変えたかったら、
– 9999:8211/udp
のようにしてください。
restart: alwaysにすることで、サーバー起動時に自動起動するようになります。
volumesでホスト側のSavedフォルダにコンテナ内のSavedフォルダをマウントしてデータが保持されるようにします。
※こうしておかないとコンテナ再起動したときにセーブデータ吹っ飛びます!

Savedフォルダを作成

セーブデータと設定の保存先になります。
steam(ID:1000)ユーザーが書き込むので所有者を変えておきます。

ShellScript
mkdir Saved
chown 1000:1000 Saved

コンテナビルド

ShellScript
docker-compose build

サーバー起動

ShellScript
docker-compose up -d

ログの確認

何か動きがおかしくてログを確認したい場合

ShellScript
docker-compose logs -f --tail all

完成

ひとまずここまで実行すれば、パルワールドの専用サーバーメニューからIPアドレスを入力することでゲームを開始できます!

タイトルとURLをコピーしました