見出し画像

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

はじめまして!りょうまと申します。
今回、技術的な記事を書いてまとめていくnoteを作成しました。
個人的に興味のある物事について不定期に書いていきたいと思います!


はじめに

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

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

Linuxをインストール

VPSなど借りている場合はそちらでOKです(OSはUbuntuにする事)
今回は小型の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アドレスを入力することでゲームを開始できます!
次回はサーバーのゲーム設定を編集してゲームバランスの調整をしてみたいと思います。

この記事が気に入ったらサポートをしてみませんか?