はじめに
最近話題のパルワールドというゲームについてです!
マルチサーバーを自宅サーバーに建ててみたので、建て方をご紹介します。
公式の手順ではホスト側に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イメージをダウンロード
Rufusというフリーソフトで起動USBを用意します。
あとはUSBメモリを刺した状態でPCを起動してUbuntuをインストールします。
詳しいインストール方法は調べるとたくさん出てくると思うので割愛します。
インストールができたら、SSHで接続してください。
TeraTermというフリーソフトがおすすめです。
TeraTermを起動したら、IPアドレスとユーザー名とパスワードでログインしてSSH接続します。
TeraTermでは、マウスで文字を選択するだけでコピーされて、右クリックすると貼り付けになります。癖があるけど便利なので覚えておいてください!
ファイアウォールの設定
公開するサーバーなのでファイアウォールはしっかりと設定しておく事を推奨します。
※VPSを利用している場合はVPS側の機能でセキュリティグループ設定があると思うので、そちらで8211番のUDPを通すように設定してください。
まず最初にSSHのポートを開放しておきます。
※これしないと後で自分自身がアクセスできなくなります!!
# ↓ 各自の環境に合わせてください
sudo ufw allow from 192.168.11.0/24 to any port 22
パルワールドは8211番ポートのUDPを利用するので開放します。
sudo ufw allow 8211/udp
ファイアウォールを有効化します。
sudo ufw enable
Dockerをインストール
コピペでDockerがインストールできます。
# 競合するパッケージを削除
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もインストールしておきます。
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を作成
nano Dockerfile
エディタが開いたら下記の中身を貼り付けて、Ctrl + Xで保存。
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を作成
nano docker-compose.yml
エディタが開いたら下記の中身を貼り付けて、Ctrl + Xで保存。
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)ユーザーが書き込むので所有者を変えておきます。
mkdir Saved
chown 1000:1000 Saved
コンテナビルド
docker-compose build
サーバー起動
docker-compose up -d
ログの確認
何か動きがおかしくてログを確認したい場合
docker-compose logs -f --tail all
完成
ひとまずここまで実行すれば、パルワールドの専用サーバーメニューからIPアドレスを入力することでゲームを開始できます!