Google Cloud で 7 Days to Die サーバを構築する

2023-12-02

#Linux

#VPS

#Google Cloud

#Google Compute Engine

#7 Days to Die

#Game server

VPC ファイアウォールむずすぎ

Overview

Google Cloud を触ってみたいので、試用のため貰える $300 で 7D2D サーバを建ててみる
この試用クレジットは Vultr と違って 90 日間保つ(2023/11 現在)

Architecture

Flow

前提として、Google Cloud アカウントが作成されていること

Google Cloud Console を開き、任意の名称でプロジェクトを作成し、Compute Engine API を有効化しておく

仮想マシンの作成

VPC ファイアウォールルールの追加

接続に必要な FW ルールを用意しておく

Google Cloud Console の検索窓から VPC ネットワーク を選択
default ネットワークに以下の FW ルールを追加

ColumnValue
名前任意のルール名
トラフィックの方向上り
一致したときのアクション許可
ターゲット指定されたターゲットタグ
ターゲットタグ任意のタグ名
ソースフィルタIPv4 範囲
送信元 IPv4 範囲0.0.0.0/0
プロトコルとポート指定したプロトコルとポート
TCP8080-8082, 26900
UDP26900-26903

VM インスタンスの作成

Compute Engine > VM インスタンス を選択

インスタンスを作成 をクリック
構成 を選択

ブートディスクの変更から、OS とディスク容量を変更

詳細オプション > ネットワーキング > ネットワークタグ に、
FW ルールにターゲットタグとして設定した タグ名 を設定

作成をクリック

ステータスが ✓ になったら、VM の作成は完了

サーバのインストール

SteamCMD のインストール

作成した VM インスタンスに接続する
Google Cloud の VM インスタンス一覧から、SSH を選択しブラウザコンソールを起動

作業用ユーザを作成し、パスワードを設定

Terminal window
sudo useradd -m steam -s /bin/bash -G sudo
sudo passwd steam

作成した steam ユーザに変更

Terminal window
sudo su - steam

SteamCMD をインストール

Terminal window
sudo add-apt-repository multiverse; sudo dpkg --add-architecture i386; sudo apt update
Terminal window
sudo apt install steamcmd

7d2d サーバのインストール

引き続き steam ユーザで SteamCMD を起動

Terminal window
steamcmd

インストール先のディレクトリを設定

Terminal window
force_install_dir /home/steam/7d2d_server

匿名で Steam にログイン

Terminal window
login anonymous

7 Days to Die 専用サーバをインストール
ダウンロードに 3 億年掛かるので気長に待つ

Terminal window
app_update 294420

SteamCMD を終了

Terminal window
quit

(上記を一括で実行する用)

Terminal window
steamcmd +force_install_dir /home/steam/7d2d_server +login anonymous +app_update 294420 +quit

サーバの起動

7d2d サーバの設定

インストールされた 7D2D のディレクトリに移動

Terminal window
cd /home/steam/7d2d_server

任意の設定に変更

Terminal window
nano serverconfig.xml

下記の設定をしておけば、Web dashboard からもコンソールの利用が出来る

OptionValuesDescription
WebDashboardEnabledtrueEnable the web dashboard
EnableMapRenderingtrueEnable rendering of the map to tile images while exploring it.
This is used e.g. by the web dashboard to display a view of the map.

7d2d サーバの起動

サーバを起動
初回起動時はワールド作成に 3 万年かかるため、気長に待つ

Terminal window
./startserver.sh -configfile=serverconfig.xml

Telnet でサーバの稼働状況が確認できる

Terminal window
telnet localhost 8081
Terminal window
telnet <VM ExternalIP> 8081

Web dashboard オプションを有効にしていた場合、
以下のアドレスで外部から Web dashboard に接続できる

http://<VM ExternalIP>:8080/

ゲームクライアントで ゲームに参加する > IP に接続 から、
VM インスタンスの 外部 IP と、ポート(デフォルトは26900)を設定し、
クライアントからサーバを検索できるようにすることで、他の人もサーバに参加できるようになる

Mod の追加(オプション)

Mod 関連のファイルは主に <Game directory>/Mods (/home/steam/7d2d_server/Mods) 以下に格納される
詳しい Mod のインストール・設定方法は各 Mod 配布元で確認すること

以下手順では、UI 拡張 Mod の SMXcoreSMXhudSMXmenuSMXui を追加する
これらはサーバ・クライアントの両方に Mod が導入されている必要があるため注意

ゲームサーバが停止されている状態で、Mod の追加を行う

steam ユーザに変更

Terminal window
sudo su - steam

zip ファイルを解凍するため、unzip をインストールする

Terminal window
sudo apt install unzip

Mod をダウンロードするディレクトリを作成し、それをカレントディレクトリにする

Terminal window
mkdir ~/modfiles; cd ~/modfiles

各 Mod ファイルをダウンロード

Terminal window
wget -O SMXcore.zip https://github.com/Sirillion/SMXcore/archive/refs/heads/main.zip
Terminal window
wget -O SMXhud.zip https://github.com/Sirillion/SMXhud/archive/refs/heads/master.zip
Terminal window
wget -O SMXmenu.zip https://github.com/Sirillion/SMXmenu/archive/refs/heads/master.zip
Terminal window
wget -O SMXui.zip https://github.com/Sirillion/SMXui/archive/refs/heads/master.zip

ダウンロードした zip ファイルを解凍

Terminal window
unzip SMXcore.zip
Terminal window
unzip SMXhud.zip
Terminal window
unzip SMXmenu.zip
Terminal window
unzip SMXui.zip

不要になった zip ファイルを削除

Terminal window
rm -rf *.zip

解凍した Mod ファイルから、Mod 本体を Mods ディレクトリにコピー

Terminal window
cp -rp SMXcore-main/SMXcore /home/steam/7d2d_server/Mods
cp -rp SMXcore-main/0-Quartz /home/steam/7d2d_server/Mods
Terminal window
cp -rp SMXhud-master/SMXhud /home/steam/7d2d_server/Mods
cp -rp SMXhud-master/ZMXhudCP /home/steam/7d2d_server/Mods
Terminal window
cp -rp SMXmenu-master/SMXmenu /home/steam/7d2d_server/Mods
Terminal window
cp -rp SMXui-master/SMXui /home/steam/7d2d_server/Mods
cp -rp SMXui-master/ZMXuiCP /home/steam/7d2d_server/Mods

Mod ファイルが規定の階層に配置されたことを確認

Terminal window
ls -la /home/steam/7d2d_server/Mods

サーバを開始する

Terminal window
/home/steam/7d2d_server/startserver.sh -configfile=serverconfig.xml

Note

専用サーバの設定項目

以下のページにて、各設定項目の概要を記載

7 Days to Die 専用サーバ設定 概要一覧

サーバのシャットダウン

Telnet から shutdown コマンドを実行し、ゲームサーバをシャットダウンすることが出来る

Terminal window
telnet localhost 8081
Terminal window
telnet <VM ExternalIP> 8081
Terminal window
shutdown

設定変更などをした後、初回と同様のコマンドでサーバを起動することができる

Terminal window
sudo su - steam
Terminal window
/home/steam/7d2d_server/startserver.sh -configfile=serverconfig.xml

ゲームデータの保存先

サーバが開始されると、ホームディレクトリ下の .local ディレクトリ配下にゲームデータが保存される
ゲームネームディレクトリ(以下の例ではMy Game)配下のデータを削除すると、そのゲームデータは削除される

また、serverconfig.xmlGameName を変更すると、新しいゲームが作成される
新しいゲームを始める際、容量に不足がなければ古いゲームデータを削除する必要はない

.local
└ share
└ 7DaysToDie
└ Saves
├ PREGEN10k
│ └ My Game
│ ├ Player
│ ├ Region
│ └ main.ttw
├ profiles.sdf
└ serveradmin.xml

なお、上記例での Windows ローカルホストでの保存先は以下のようになる
対応するディレクトリにコピーすれば、データの移管が可能

C:\Users\{username}\AppData\Roaming\7DaysToDie\Saves\PREGEN10k\My Game

Web Dashboard の利用

Web Dashboard からコンソールを利用する場合、ユーザ登録が必要

インゲームコンソールで以下コマンドを実行し、表示されるウィンドウに従って Web ユーザ登録を行う

Terminal window
createwebuser

管理者権限の付与

インゲームコンソールや Web Dashboard から上級コマンドを実行したい場合、管理者権限と権限レベルが必要
Telnet から管理者権限を管理、操作することが出来る

権限レベルは 0 が最も高く、明示されていないプレイヤーは 1000 として扱われる

プレイヤー名で追加・削除を行う場合は、対象のプレイヤーがサーバにログインしている必要がある

Telnet で接続

Terminal window
telnet localhost 8081
Terminal window
telnet <VM ExternalIP> 8081

Error

mmap(PROT_NONE) failed でサーバが異常終了する

朝起きたらゲームサーバが停止していたため、
7d2d_server/7DaysToDieServer_Data/ 以下の
output_log__yyyy-MM-dd__HH-mm-ss.txt からログを確認

mmap(PROT_NONE) failed で異常終了していたことを確認

デフォルトの vm.max_map_count65530 が低すぎて足りなくなったらしい

下記コマンドで、一時的に上限値を増やす
この場合、インスタンスの停止を行うと、再起動時にはデフォルトの値に戻る

Terminal window
sudo sysctl -w vm.max_map_count=262144

もしくは、/etc/sysctl.conf ファイルに追記して値を更新する

Terminal window
sudo nano /etc/sysctl.conf
Terminal window
vm.max_map_count=262144
Terminal window
sudo sysctl -p

Ref