title

SteamCMDとConoHa VPSでゲームサーバーを建てる時のメモ

2024/1/20

Steam

CoreKeeperとPalWorldでゲームサーバーを建てる機会があったので、SteamCMDとコスパの良いConoHa VPSを利用した際のメモです。どちらかというと汎用的なメモなので、各種ゲームに特化はしてません。


ConoHa VPS

ConoHa VPSを使用しない場合はこの項目は読まなくて大丈夫です。

ConoHaでのセットアップはクリック等で簡単に終わるので言うまでも無いのですが、忘れないほうが良い設定としてセキュリティグループの設定があります。

コントロールパネル ▶ セキュリティ ▶ セキュリティグループ から設定をします。

セキュリティグループ + を押下したら、覚えやすい情報を入力して保存をします。

セキュリティグループ作成

保存をするとセキュリティグループ一覧に追加されているので、追加したものをクリックして展開します。

下の方にある + をクリックして設定を更に追加します。

ゲームサーバーそれぞれに求められているポート情報を入力します。

パルワールドであれば、UDP:8211を開ける必要があるため、以下のように入力します。

自身がConoHaで作成したサーバーの管理ページを開き、ネットワーク情報からセキュリティグループの設定の鉛筆マークを押下します。

+マークを押し、先程追加したセキュリティグループを追加して保存をします。

これでConoHa VPS側での設定は終了です。結構忘れがちでConoHa特有な感じの操作でもあるので、しっかりやっておかないとサーバー側でポート開放してるのに接続出来ないといった沼にハマる場合があります。

SteamCMD

SteamCMDはDedicated Serverなどを建てるときに主に利用されるSteamのコマンドラインツールです。

公式のインストールガイドももちろんあります。

ゲームに関しては開発者がガイドを置いている場合もあります。

他の方のブログ記事で、VPSをセットアップしてからrootのままやっているものなどありますが、ゲームサーバーのプログラムがrootでの起動を許容していない場合などがあるので、ユーザー作成を別途してから実行したほうが良いです。

環境

今回はConoHa VPS上のUbuntu 20.04を操作しています。

また、ブラウザコンソールから操作するとゲームサーバー接続用のIDなどが表示される際にコピペが出来ずにしんどい思いをすることになるので、Tera Termなどターミナルソフトウェアを経由して接続するのをオススメします。(CoreKeeperでGameIDのコピーが出来ずしんどくなったので……)

別の手段として、そういった情報が静的ファイルで生成される場合は、WinSCPなどを利用してアクセスするのも悪くないです。

Tera Term

WinSCP

ユーザーの追加

sudo useradd -m steam
sudo passwd steam

sudoersへ追加(sudo出来るようにするため)

sudo visudo
root ALL=(ALL:ALL) ALL # 元々記述されている
steam ALL=(ALL:ALL) ALL # 追記

Ctrl+Xでvisudoを抜け、保存するか聞かれるのでyを押し、ファイル名指定になるのでそのまま変更せずEnterを押下します。

ユーザー切り替え

sudo -u steam -s
cd /home/steam

SteamCMDのインストール

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

SteamCMDからサーバーファイルのインストール

以下のようにワンライナーで書くことが出来ますが、steamcmdコマンド単体を打ってから対話的に進めることも出来ます。

また、サーバークライアントのアップデートも同じ手順です。

steamcmd +login anonymous +app_update <SteamAppId> validate +quit
steamcmd

Steam > login anonymous
Steam > app_update <SteamAppId> validate
Steam > quit

サーバークライアントは以下にインストールされます。

/home/steam/Steam/steamapps/common

SteamのAppIdの調べ方

SteamDBなどで検索するとすぐに調べることが出来ます。

例えばパルワールドであれば SteamDB上でPalworldと検索 すると、PalWorld Dedicated Server といった検索結果が出てきます。

CoreKeeperの場合はこちら Corekeeperの検索結果 CoreKeeper Dedicated Server

このページにあるAPP IDがSteamCMDで入力するAppIdに該当します。

Palworldのサーバであれば2394010、CoreKeeperであれば1963720

なので、先程のワンライナーは以下のような内容になります。

steamcmd +login anonymous +app_update 2394010 validate +quit

サーバーの起動

インストールディレクトリの.shファイルを動かします。

CoreKeeperの場合

cd ~/Steam/steamapps/common/Core\ Keeper\ Dedicated\ Server/
./_launch.sh

PalWorldの場合

cd ~/Steam/steamapps/common/PalServer/
./PalServer.sh

steamclient.soが無い系のエラー

サーバーディレクトリにlinux64というディレクトリがあるので、そこからsteamclient.soを必要な場所へコピーまたはシンボリックリンクを貼ります。

場所はサーバークライアントにもよるので適宜対応する必要があります。

Corekeeper

コピーするパターン

cp linux64/steamclient.so . # _launch.shのある場所で実行

PalWorld

シンボリックリンク貼るパターン

mkdir -p /home/steam/.steam/sdk64/
ln -s /home/steam/Steam/steamapps/common/PalServer/linux64/steamclient.so /home/steam/.steam/sdk64/steamclient.so

ファイヤウォールの設定

UDP:8211を開放したいのであれば以下のように入力します。tcpであれば25565/tcpのように入力。

sudo ufw allow 8211/udp

状態を確認します。

sudo ufw status
Status: active

To                         Action      From
--                         ------      ----
OpenSSH                    ALLOW       Anywhere
8211/udp                   ALLOW       Anywhere
OpenSSH (v6)               ALLOW       Anywhere (v6)
8211/udp (v6)              ALLOW       Anywhere (v6)

systemdへの追加

自動で再起動したりしてくれるようにサーバー実行ファイルをserviceとして追加します。something-gameは適宜置き換えます。

sudo vi /etc/systemd/system/<something-game>.service

以下はCoreKeeperでのシンプルな設定の例なので、必要に応じて書き換えてください。

[Unit]
Description=Core Keeper Dedicated Server
Wants=network-online.target
After=network.target network-online.target

[Service]
Type=simple
ExecStart="/home/steam/Steam/steamapps/common/Core Keeper Dedicated Server/_launch.sh"
WorkingDirectory=/home/steam/Steam/steamapps/common/Core Keeper Dedicated Server
Restart=always
User=steam

[Install]
WantedBy=multi-user.target

systemctl系コマンド

デーモンのリロード

sudo systemctl daemon-reload

自動起動設定(新しくファイルを作成したとき)

sudo systemctl enable <something-game>.service

起動・再起動・停止

sudo systemctl start <something-game>.service
sudo systemctl restart <something-game>.service
sudo systemctl stop <something-game>.service

状態確認

systemctl status <something-game>.service
sudo journalctl -u <something-game>.service

困ったときは大体journalctlしてChatGPTに投げれば良いと思います。(投げやり)


本記事のサムネイルの画像はConohaVPSの美雲このはちゃんです。

再使用等は禁止されています。

©GMO Internet Group, Inc.