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というコマンドが用意されています。
まず、サーバを構築するディレクトリを作ってください。
そのあと下記の3つのファイルをディレクトリ内に作成してください。
update_zomboid.txt
このファイルでは/opt/pzserver
というディレクトリにサーバファイルを展開するように指示してます。
@ShutdownOnFailedCommand 1
@NoPromptForPassword 1
force_install_dir /opt/pzserver/
login anonymous
app_update 380870 validate
quit
https://developer.valvesoftware.com/wiki/SteamCMD
Dockerfile
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
サーバ設定の編集
save/Server/servertest.ini
ポート開放
UDPの16261と16262ポートがインターネット側からアクセスできるようにファイアウォールやルータの設定を変更します。
サーバ起動
docker compose up -d
まとめ
steamcmdコマンド使ってproject zomboidのマルチプレイヤーサーバを立てることができました。