Project ZomboidのサーバをUbuntuとDockerで構築する方法

公開日:

Project Zomboidはゾンビがはびこり始めた世界でアイテムを集めたりバリゲードを作ったりするサバイバル2Dゲームです。

このゲームはマルチプレイに対応していてこれが面白いのですが、Linuxなどで専用サーバを立てるのが少々難しいです。
今回は、DockerとUbuntuの環境でサーバを立てる方法を紹介します。

環境

今回の記事ではUbuntu 20.04にDocker CEをインストールした環境で、Dockerコンテナ上にサーバ構築を行いました。
Dockerを使用しているのでほかのバージョンのUbuntuやLinuxでも問題なく動くと思います。

Dockerが入っていない場合は下記を参考にインストールしておいてください。
Docker公式: Install Docker Engine on Ubuntu

サーバファイルの用意

SteamではLinux環境向けにゲームサーバを用意するためのSteamCMDというコマンドが用意されています。

zomboidもこれに対応しているのでSteamCMDに対して専用コマンドを打っていくことでゲームサーバの準備ができるようになっています。

まず、サーバを構築するディレクトリを作ってください。
そのあと下記の3つのファイルをディレクトリ内に作成してください。

update_zomboid.txt

このファイルは、SteamCMD向けの指示コマンドが列挙されたシェルファイルのようなものです。
380870という番号はProject Zomboidを表すSteam固有のIDです。

このファイルでは/opt/pzserverというディレクトリにサーバファイルを展開するように指示してます。

@ShutdownOnFailedCommand 1
@NoPromptForPassword 1
force_install_dir /opt/pzserver/
login anonymous
app_update 380870 validate
quit
SteamCMDの詳細な使い方はValve公式のガイドを
https://developer.valvesoftware.com/wiki/SteamCMD

Dockerfile

サーバのイメージを作成するためのDockerファイルです。

Dockerfileはサーバの構築方法を指示するものです。下記では構築時にupdate_zomboid.txtを実行して初期化を済ませるように指示しています。

FROM steamcmd/steamcmd:ubuntu-20

RUN mkdir /opt/pzserver
WORKDIR /opt/pzserver
COPY update_zomboid.txt /opt/update_zomboid.txt
RUN steamcmd +runscript /opt/update_zomboid.txt
ENTRYPOINT ["/bin/bash" , "-l"]

Dockerfileの書き方は下記を参照してください。
Dockerfile リファレンス - Docker公式

docker-compose.yaml

docker-compose.yamlはサーバをどう動作させるか定義するためのファイルです。

セーブデータをディレクトリ内のsaveディレクトリに保存するように指定しています。
zomboidではUDPの16261と16262ポートを使用するので開放させておきます。

version: '3'
services:
    zomboid:
        build: .
        container_name: zomboid
        volumes:
          - ./save:/root/Zomboid
        ports:
          - "16261:16261/udp"
          - "16262:16262/udp"
        command: /opt/pzserver/start-server.sh

docker composeの書き方は下記を参考にしてください。
Docker Compose - Docker公式

セーブディレクトリの作成

ディレクトリ内で下記を実行してセーブデータを入れるディレクトリを作ります。

mkdir save

 テスト起動

一回テスト起動します。

docker-compose build
docker-compose up
こんな感じのログが出力されたら成功です。
zomboid    | LOG  : Network     , 1688801808085> 4,060,110,023> *** SERVER STARTED ****
zomboid    | LOG  : Network     , 1688801808085> 4,060,110,023> *** Steam is enabled
Steam is enabledが出ていない場合サーバは起動していますが、Steam版のZomboidで遊ぶことができなかったような気がします。
 
一回サーバを落とします(ctrl + c とかdocker-compose downとか)。
 

サーバ設定の編集

セーブデータ内の下記ファイルを編集してサーバ設定を作ります。
手順通り作業しているのであれば下記のパスにあるはずです。
save/Server/servertest.ini

ポート開放

UDPの16261と16262ポートがインターネット側からアクセスできるようにファイアウォールやルータの設定を変更します。

サーバ起動

サーバを起動します。
Project Zomboidを起動してアクセスできることを確認しましょう。
docker compose up -d

 まとめ

 steamcmdコマンド使ってproject zomboidのマルチプレイヤーサーバを立てることができました。

更新日: