ガイド
SteamCMDで専用サーバーを入れる方法
SteamCMDは、Steamのゲームの専用サーバーをコマンドで入れたり更新したりするための公式のツールです。Ubuntu 24.04で、入れるところから常駐させるところまでを書きます。
PR本ページはプロモーションを含みます。紹介料の有無で評価や順位は変えていません(広告掲載ポリシー)。
この記事の結論
- Ubuntu 24.04では、multiverseとi386を有効にしてから apt で steamcmd を入れます。途中で出る利用規約には同意が要ります。
- 専用サーバーは +force_install_dir、+login anonymous、+app_update アプリID validate、+quit の順で入れます。
- アプリIDはSteamDBかValveの開発者wikiで調べます。パルワールドは2394010、Valheimは896660です。
SteamCMDとは
SteamCMDは、Valveが配っているコマンドラインのSteamです。画面のあるSteamクライアントを使わずに、専用サーバーのダウンロード、更新、ファイルの検証ができます。画面のないLinuxのVPSでゲームのサーバーを動かすときは、ほとんどの場合これを使います。
レンタルのゲーム用VPSでテンプレートを選んだ場合は、SteamCMDでの導入まで済んだ状態で起動します。この記事は、テンプレートのないゲームを入れたいときや、素のUbuntuから自分で組みたいときのための手順です。
Ubuntu 24.04に入れる
SteamCMDは32ビットのライブラリを使うので、i386のアーキテクチャを足してから入れます。パッケージはmultiverseのリポジトリにあります。
sudo apt update
sudo apt install -y software-properties-common
sudo add-apt-repository -y multiverse
sudo dpkg --add-architecture i386
sudo apt update
sudo apt install -y steamcmd
入れている途中で、Steamの利用規約(Steam License Agreement)の画面が出ます。矢印キーで「I AGREE」を選んでEnterを押すと先に進みます。同意しないと入りません。
aptで入れたSteamCMDは /usr/games/steamcmd に置かれます。/usr/games にパスが通っていない場合は、フルパスで呼ぶか、次のようにパスに足します。
echo 'export PATH="$PATH:/usr/games"' >> ~/.bashrc
source ~/.bashrc
専用のユーザーを作る
ゲームのサーバーはrootで動かさず、専用のユーザーを作ってそのユーザーで動かします。サーバーのプログラムに穴があったときに、被害をそのユーザーのファイルだけに抑えるためです。
sudo useradd -m -s /bin/bash steam
sudo -iu steam
以下のコマンドは、この steam ユーザーで打ちます。初めて steamcmd を起動すると、SteamCMD本体の更新がダウンロードされます。
steamcmd +quit
専用サーバーを入れる
専用サーバーは次の形のコマンドで入れます。
steamcmd +force_install_dir /home/steam/palworld +login anonymous +app_update 2394010 validate +quit
それぞれの意味は次のとおりです。
| 部分 | 意味 |
|---|---|
| +force_install_dir パス | 入れる場所。+login より前に書く |
| +login anonymous | 匿名でログインする |
| +app_update アプリID | 専用サーバーを入れる、または更新する |
| validate | ファイルが壊れていないか確かめ、足りない分を取り直す |
| +quit | 終わったらSteamCMDを閉じる |
+force_install_dir は +login より前に置きます。順番が逆だと、SteamCMDが警告を出し、思わぬ場所に入ることがあります。+force_install_dir を省くと、~/.steam/steam/steamapps/common/ の下などに入ります(環境で変わります)。
validate は、ファイルを一つずつ確かめるので時間がかかります。毎回の更新では外し、おかしいと思ったときだけ付けても構いません。
Windows向けの専用サーバーしかないゲームをLinuxで取ってくるときは、+@sSteamCmdForcePlatformType windows を +login の前に足します。ただし、取ってきたあとに動かすにはWineなどが要り、手順はゲームごとに変わります。
アプリIDの調べ方
アプリIDは、ゲーム本体ではなく専用サーバーのものを使います。たとえばパルワールドのゲーム本体は1623730ですが、専用サーバーは2394010です。
調べ方は2つあります。
- SteamDB(steamdb.info)で「ゲーム名 Dedicated Server」と検索する。App Type が Tool になっているものが専用サーバーです
- Valveの開発者wiki(developer.valvesoftware.com)の Dedicated Servers List を見る
このサイトで扱っているゲームの専用サーバーのアプリIDは次のとおりです。
| ゲーム | アプリID |
|---|---|
| パルワールド | 2394010 |
| Valheim | 896660 |
| 7 Days to Die | 294420 |
| Enshrouded | 2278520 |
| Satisfactory | 1690800 |
| Project Zomboid | 380870 |
| Don't Starve Together | 343050 |
| Core Keeper | 1963720 |
| Soulmask | 3017300(Linux)、3017310(Windows) |
| Conan Exiles | 443030 |
マイクラ(Java版・統合版)、テラリア、Factorio、HytaleはSteamCMDを使いません。それぞれの公式サイトや公式の配布物から入れます。
更新のスクリプト
ゲームが更新されると、古いサーバーには入れなくなります。止める、更新する、起動する、を1つのスクリプトにしておくと楽です。下の例は、あとで作るsystemdのサービス(palworld)を前提にしています。
#!/bin/bash
# /home/steam/update-palworld.sh
set -e
sudo systemctl stop palworld
/usr/games/steamcmd +force_install_dir /home/steam/palworld +login anonymous +app_update 2394010 +quit
sudo systemctl start palworld
chmod +x /home/steam/update-palworld.sh
steam ユーザーが systemctl を使えるように、そのサービスの操作だけを sudo で許可します。sudo visudo -f /etc/sudoers.d/steam で次の行を書きます。
steam ALL=(root) NOPASSWD: /usr/bin/systemctl stop palworld, /usr/bin/systemctl start palworld, /usr/bin/systemctl restart palworld
毎朝自動で更新したいなら、steam ユーザーの crontab(crontab -e)に書きます。遊んでいる人がいない時間を選んでください。
0 5 * * * /home/steam/update-palworld.sh >> /home/steam/update.log 2>&1
systemdで常駐させる
SSHを閉じてもサーバーが動き続け、落ちたときやVPSを再起動したときに自動で立ち上がるように、systemdのサービスにします。起動のコマンドはゲームごとに違うので、ExecStart を書き換えてください。
# /etc/systemd/system/palworld.service
[Unit]
Description=Palworld Dedicated Server
Wants=network-online.target
After=network-online.target
[Service]
User=steam
WorkingDirectory=/home/steam/palworld
ExecStart=/home/steam/palworld/PalServer.sh -port=8211 -players=16
Restart=on-failure
RestartSec=10
[Install]
WantedBy=multi-user.target
sudo systemctl daemon-reload
sudo systemctl enable --now palworld
systemctl status palworld
journalctl -u palworld -f
User=steam で、サービスを steam ユーザーの権限で動かします。ログは journalctl -u palworld で見られます。
最後に、ゲームのポートを開けます。ufwとVPSの管理画面の両方で許可が要ることが多いです。詳しくはポート開放のやり方を見てください。
sudo ufw allow OpenSSH
sudo ufw allow 8211/udp
sudo ufw enable
Windowsで使う場合
自宅のWindowsのPCに入れる場合も、コマンドの形は同じです。Valveの開発者wikiの SteamCMD のページから Windows 用の steamcmd.zip を取ってきて、C:\steamcmd のような、空白や日本語を含まないフォルダに展開します。
cd C:\steamcmd
steamcmd.exe +force_install_dir C:\servers\valheim +login anonymous +app_update 896660 validate +quit
初めて起動したときに本体の更新が入るのはLinuxと同じです。常駐させるなら、タスクスケジューラで、PCの起動時にサーバーの起動用のバッチファイルを動かす設定にしておくと、再起動のあとも自動で立ち上がります。
自宅のPCで動かす場合は、ルーターのポート開放も要ります。電気代も含めた考え方は自宅PCかレンタルかに書いています。
よくあるつまずき
| 症状 | 原因 | 対処 |
|---|---|---|
| steamcmd: command not found | /usr/games にパスが通っていない | /usr/games/steamcmd とフルパスで呼ぶ |
| 入れたはずの場所にファイルがない | +force_install_dir を +login の後ろに書いた | 順番を直して入れ直す |
| No subscription と出る | アプリIDがゲーム本体のもの | 専用サーバーのアプリIDに直す |
| steamclient.so が見つからないと出て起動しない | Steamのライブラリの場所をサーバーが見つけられない | find ~ -name steamclient.so で探し、各ゲームの案内に従ってリンクを張る |
| 更新のあと入れない | クライアントとサーバーの版がずれている | app_update をもう一度、validate 付きで実行する |
自分で組むか、テンプレートを使うか
SteamCMDで自分で組むと、好きなゲームを好きな形で動かせます。その代わり、更新、バックアップ、ポートの設定まで自分で面倒を見ることになります。
ConoHa for GAMEとXServer VPS for Gameには、ここで挙げたゲームのテンプレートがあり(Conan ExilesはXServer VPS for Gameだけ)、申し込むとサーバーが入った状態で起動します。手順を覚える前に、まずテンプレートで遊んでみるのも一つの手です。
対応ゲームの多さならここ
XServer VPS for Game
テンプレート30タイトル、新作への対応が早い
月1,265円〜(2GB・36か月)
よくある質問
QSteamCMDにはSteamのアカウントが要りますか?
Aこの記事で扱うゲームの専用サーバーは、匿名ログイン(+login anonymous)で入れられます。専用サーバーによってはゲームを持っているアカウントでのログインが要るものもあり、その場合は各ゲームの案内に書かれています。
QアプリIDはどこで調べればいいですか?
ASteamDBでゲーム名と Dedicated Server で検索すると出てきます。種類(App Type)が Tool になっているのが専用サーバーです。Valveの開発者wikiの Dedicated Servers List にも一覧があります。
Qrootのまま動かしてはいけませんか?
A動きはしますが、ゲームのサーバーに不具合があったとき、サーバー全体を書き換えられる恐れがあります。専用のユーザーを作り、その権限で動かすのが安全です。
Qサーバーの更新はどうすればいいですか?
A入れたときと同じ app_update のコマンドをもう一度実行すると、新しい版があれば差分だけ取ってきます。サーバーを止めてから実行し、終わったら起動し直します。
QマイクラやテラリアもSteamCMDで入れられますか?
A入れられません。マイクラはminecraft.net、テラリアはterraria.org、Factorioはfactorio.comから専用サーバーを取ってきます。SteamCMDを使うのは、Steamで配られている専用サーバーだけです。