VPSでFiveMサーバーを構築する方法
UbuntuにFXServerを導入し、artifact buildを固定してCfx.re licence keyを追加します。TCPとUDPの30120を開け、txAdminは外部公開しない手順を解説します。
VPS 上の FiveM サーバーに必要なもの
VPS 上の FiveM サーバーには、権限を制限した Linux ユーザー 1 つ、Cfx.re の artifact build 1 つ、ライセンスキー 1 つ、TCP と UDP の両方で開放したポート 1 つが必要です。インストールは約 10 分で完了します。このガイドでは、サーバーをプレイ可能にする要素を説明します。具体的には、単一 CPU コアの速度、resource が必要とするメモリ、そして公開アドレスで決して公開状態にしてはならない管理パネルです。
3 つの前提条件は固定です。サーバーバイナリである artifact は、公式の Cfx.re build 一覧から取得します。ライセンスキーは、portal.cfx.re にある Cfx.re portal から取得します。これは古いガイドで keymaster と呼ばれているサービスです。キーは、使用するマシンのアドレスに紐付けられます。接続する各プレイヤーには、Steam、Rockstar Games Launcher、または Epic Games にある GTA V (Grand Theft Auto V) の正規コピーと、無料の Cfx.re アカウントが必要です。クライアントは起動時にゲームの所有権を確認します。そのため、それ以外の方法で構築したサーバーは動作しません。いかなる種類の回避用コンテンツも、ここでは扱いません。
サーバーをホストすることと、そのマシンでゲームをプレイすることは別の作業です。後者については、VPS 上でゲーム自体を実行できるかどうかという別の問いになり、答えも異なります。
FiveM サーバーの体感を左右するシングルコア性能
FXServer は FiveM のサーバーバイナリで、ゲームロジックを 1 本のメインスレッドで実行します。すべての resource スクリプト、イベントハンドラー、状態更新が、この 1 本のループを通過します。追加のコアは、カーネル、データベース、ネットワークスタックには役立ちます。しかし、ゲームループを分割することはありません。そのため、遅いコアを搭載した 4 vCPU のサーバーは負荷時にカクつく一方、高速なコアを搭載した 2 vCPU のサーバーは滑らかに動作します。
これは、コア数を最重要項目として VPS を選ぶ一般的な考え方とは逆です。契約する前に、コア単体の速度を確認してください。まず CPU モデルを調べます。
lscpu | grep -E 'Model name|MHz'次に、そのモデルの公開されているシングルスレッドスコアを確認します。PassMark の single thread rating と Geekbench の single-core score はどちらも公開されており、いずれも 1 つのコアで処理を実行した性能を測定します。ここで重要なのは、この数値です。その後、実際に割り当てられたサーバーを測定します。
sudo apt update && sudo apt install -y sysbench
sysbench cpu --cpu-max-prime=20000 --threads=1 runevents per second の行を確認します。2 つの候補プロバイダーで同じコマンドを実行すれば、処理内容が同一で 1 つのコアに限定されるため、公平に比較できます。再現可能な VPS ベンチマークの実行では、サーバー間でこれらの数値を比較可能に保つ方法を説明します。
次に、そのコアが本当に自分のサーバーに割り当てられているか確認します。
vmstat 1 5最後の列である st は steal time です。これは、仮想 CPU が実行可能な状態だったにもかかわらず、ハイパーバイザーによって待機させられた時間の割合を示します。1 または 2 を超える値が継続する場合、負荷の高い他の利用者と物理コアを共有しています。ゲームループでは、これがすぐにラバーバンディングとして現れます。ノイジーネイバーによる steal timeでは、この列の読み方と対処方法を説明します。
メモリ使用量は、スロット数だけでなく、実行する resource の数に応じて増加します。Cfx.re の基本的なサーバーデータは、数百 MB で動作します。一方、40 または 50 個の resource と MariaDB データベースを同じサーバーで実行する roleplay framework では、必要な構成が異なります。4 GB は妥当な最低ラインで、32 から 64 スロットでは 8 GB あると余裕があります。これらはコミュニティ構成で公開されている一般的な値です。まずは目安として扱い、実際のプレイヤー負荷時に free -m を監視してください。
ユーザーを作成して依存関係をインストールする
サーバーは通常のユーザーで実行し、root では決して実行しないでください。理由は 2 つあります。インターネットに公開するサービスで root を使うのは悪い習慣です。また、Linux artifact は同梱された Alpine Linux の root ファイルシステム内で実行されます。そのため、root が展開したファイルは他のユーザーが実行できません。新規インストールが起動しない原因として、これが最もよくあります。
sudo adduser --disabled-password --gecos "" fivem
sudo apt update
sudo apt install -y git xz-utils curl tcpdump
sudo -iu fivem以下の操作はすべて fivem ユーザーで実行します。ダウンロードするファイルは .tar.xz アーカイブなので、xz-utils が必要です。また、ベースサーバーデータのクローンには git を使用します。
固定したアーティファクトビルドをダウンロードする
Linux ビルドは、Cfx.re artifact server の build_proot_linux チャネルにあります。リストには推奨される最新ビルドが 1 つ表示されますが、そのラベルは数週間ごとに新しいビルドへ移動します。代わりに、番号付きのフォルダーを固定します。翌月にサーバーを再構築しても、今月テストしたものと同じバイナリを取得でき、アップグレードも意図的に判断して実施できます。
mkdir -p ~/FXServer/server
cd ~/FXServer/server
curl -fLO https://runtime.fivem.net/artifacts/fivem/build_proot_linux/master/25770-8ddccd4e4dfd6a760ce18651656463f961cc4761/fx.tar.xz
tar xf fx.tar.xz
ls2026 年 8 月にリストを確認した時点では、Build 25770 に推奨ラベルが付いていました。ブラウザーで同じディレクトリを開いて現在のビルドを確認し、そのフォルダー名を URL に貼り付けます。フォルダー名は、ビルド番号と commit hash を組み合わせたものです。
ls には run.sh と alpine ディレクトリが表示されるはずです。このディレクトリがポイントです。Linux artifact には小規模な Alpine root filesystem が含まれており、root 権限なしで chroot をエミュレートする userspace ツールの proot を使って、その中でサーバーを起動します。そのため、ディストリビューション固有のパッケージなしで、1 回のダウンロードを Ubuntu、Debian、Rocky 上で実行できます。
次に、server.cfg の起動時に使用するデフォルトリソースを含む、ベースサーバーデータを clone します。
git clone https://github.com/citizenfx/cfx-server-data.git ~/FXServer/server-dataライセンスキーを取得して server.cfg を作成する
portal.cfx.re に Cfx.re アカウントでサインインし、サーバーキーを作成します。ポータルでは、キーを使用するマシンの IP アドレスを指定します。キーはそのアドレスに紐付けられます。新しい VPS に移行する場合は、2 つ目のキーを作成せず、ポータルでキーを編集します。編集内容はすぐに適用されますが、FXServer が再検証するのは再起動時です。
~/FXServer/server-data/server.cfg を記述します。
endpoint_add_tcp "0.0.0.0:30120"
endpoint_add_udp "0.0.0.0:30120"
ensure mapmanager
ensure chat
ensure spawnmanager
ensure sessionmanager
ensure basic-gamemode
ensure hardcap
sv_hostname "My FiveM server"
sv_maxclients 48
set onesync on
sv_scriptHookAllowed false
sv_licenseKey ChangeMe
add_ace group.admin command allow
add_principal identifier.fivem:1 group.adminsv_maxclients には 1 から 2048 の値を指定できます。32 以上を指定する場合は onesync を on または legacy に設定する必要があり、64 を超える場合は on が必要です。OneSync はサーバーの状態認識モードです。これにより、サーバーはベースゲームの少ないスロット数を超えて利用できます。OneSync を無効にしたまま 128 スロットに設定しても、128 スロットにはなりません。サーバーが拒否する設定になるだけです。
sv_licenseKey には、引用符や末尾の空白を付けずにキーを指定します。FXServer はこの行を空白で分割するため、余分な文字が 1 つあるだけで検証に失敗し、サーバーは起動しません。
rcon_password は意図的にこのファイルから省略しています。RCON(リモートコンソール)は、この変数を設定した場合にだけ有効になり、その場合はゲームと同じ UDP ポートで待ち受けます。公開ポート上の RCON パスワードは、サーバーへのリモートコマンド経路になります。明確な必要性がない限り未設定にしてください。使用する場合は、長くランダムな値にします。
sv_scriptHookAllowed は false のままにします。公式ドキュメントでは非推奨とされています。Script Hook V クライアントを許可すると、クライアント側の悪用につながるためです。
add_principal identifier.fivem:1 は、Cfx.re アカウント ID 1 に管理者権限を付与します。1 を自分の数値 ID に置き換えてください。置き換えない場合、他人のアカウントに管理者権限を付与し、自分には付与しないことになります。
手動で 1 回起動します。
cd ~/FXServer/server-data
bash ~/FXServer/server/run.sh +exec server.cfg2 つ目の SSH セッションから、サーバー自身の状態を確認します。
curl -s http://127.0.0.1:30120/info.json | head -c 200サーバー変数とリソースを示す JSON が返れば、FXServer はポートにバインドされ、応答しています。Connection refused の場合はポートにバインドできていないため、推測せずにコンソール出力を確認します。
キーがないサーバーは、次のメッセージを表示して停止します。
This server does not have a license key specified. Please set the sv_licenseKey console variable to a key from https://keymaster.fivem.net/.このメッセージには、古い keymaster アドレスが表示されます。このアドレスは同じ Cfx.re ポータルに移動します。キーを設定してもサーバーが実行を拒否する場合、通常の原因は、キーに登録されている IP がこのマシンの IP と一致しなくなっていることです。
FiveM サーバーで開放が必要なポートはどれですか?
TCP(transmission control protocol)と UDP(user datagram protocol)の両方で、ポート 30120 が必要です。FiveM は 2 つのプロトコルで 1 つのポート番号を使用するため、両方を開放する必要があります。TCP だけを開放すると、症状が分かりにくくなります。ブラウザーでは http://your.ip:30120/info.json が応答するため、サーバーは正常に見えます。一方、ゲームクライアントは Failed to get info from server のまま停止して参加できません。クライアント自身のクエリとゲームトラフィックは UDP を使用するためです。
sudo ufw allow OpenSSH
sudo ufw allow 30120/tcp
sudo ufw allow 30120/udp
sudo ufw enable
sudo ufw status verboseファイアウォールを有効にする際は、別の SSH セッションを開いたままにしてください。VPS の ufw 基礎では、上記のルールだけで十分になるデフォルトの deny ポリシーについて説明しています。
ほとんどのプロバイダーは、ゲスト OS の外側でもネットワークファイアウォールを運用しています。これはシェルではなく、管理パネルから制御します。ufw のルールがあるだけでは、この層については何も証明できません。外部から TCP が応答するのにプレイヤーが接続できない場合は、誰かが接続を試みている間にネットワーク上のパケットを確認します。
sudo tcpdump -ni any udp port 30120パケットが到着しているなら、外側のファイアウォールは正常で、問題はサーバー内部にあります。何も到着しない場合は、サーバーの手前にある何らかの機器や設定がパケットを破棄しています。次にプロバイダーの管理パネルを確認してください。
txAdmin でサーバーを外部公開せずに管理する
txAdmin は、すでにダウンロードした artifact に含まれています。run.sh を +exec 引数なしで起動すると、TCP ポート 40120 で Web パネルが起動し、パネルの URL と有効期限の短い PIN がコンソールに表示されます。この PIN は Cfx.re アカウントとの連携に 1 回だけ使用します。以後は、作成された管理者アカウントでログインします。
txAdmin にはデフォルトパスワードがありません。そのため、変更し忘れた認証情報がリスクになるわけではありません。リスクの本質は、パネルがリモートコンソールであることです。サーバーの再起動、server.cfg の編集、サーバーデータのデプロイ、サーバーユーザー権限でのコマンド実行が可能です。40120 をインターネットから到達可能にすると、これらすべてを操作できるログインページが公開アドレスに置かれます。スキャナーは、公開されたパネルポートを数時間以内に検出します。ファイアウォールで 40120 を開放しないでください。自分のマシンから SSH トンネル経由で接続します。
ssh -N -L 40120:127.0.0.1:40120 fivem@YOUR_SERVER_IPその後、ブラウザーで http://127.0.0.1:40120 を開きます。パネルの通信は SSH 接続内を通過し、ポートは他のユーザーから到達できない状態に保たれます。
別の方法で解決しようとする前に、注意すべき点があります。txAdmin は TXHOST_INTERFACE(デフォルトは 0.0.0.0)を読み取り、バインドするインターフェースを決定します。ドキュメントには、同じ値が FXServer にも強制的に適用されると明記されています。これを 127.0.0.1 に設定してパネルを隠すと、ゲームサーバーも loopback にバインドされるため、プレイヤーがサーバーに接続できなくなります。パネルポートは、その変数ではなくファイアウォールで閉じてください。パネルを別のポートへ移すには TXHOST_TXA_PORT を設定します。この値には 30120 以外の任意の値を指定できます。古い +set txAdminPort convar は多くのガイドに登場しますが、txAdmin の公式ドキュメントでは deprecated とされ、将来の release では機能しなくなると説明されています。
ログアウト後もサーバーを実行し続ける
bash run.shは SSH セッションの終了とともに停止します。テスト中は tmux が適しています。tmux new -s fivemを実行してサーバーを起動し、Ctrl-b を押してから d を押してデタッチします。戻るにはtmux attach -t fivemを使用します。tmux セッションは再起動後も維持されないため、必要な処理は systemd unit に定義します。
/etc/systemd/system/fivem.serviceを記述します。
[Unit]
Description=FiveM FXServer
After=network-online.target
Wants=network-online.target
[Service]
Type=simple
User=fivem
Environment=HOME=/home/fivem
WorkingDirectory=/home/fivem/FXServer/server-data
ExecStart=/bin/bash /home/fivem/FXServer/server/run.sh +exec server.cfg
Restart=on-failure
RestartSec=10
[Install]
WantedBy=multi-user.targetsudo systemctl daemon-reload
sudo systemctl enable --now fivem
systemctl status fivem
journalctl -u fivem -fenable --nowには2つの役割があります。サービスを直ちに起動し、再起動後にサービスを復旧させます。手動で起動したサーバーは、次回の kernel update 後には停止しています。systemd service には入力可能な端末がないため、現在のコンソールはjournalctl -u fivem -fです。代わりに txAdmin でサーバーを管理する場合は、ExecStartから+exec server.cfgを削除し、WorkingDirectoryを/home/fivem/FXServer/serverに指定します。txAdmin 自体がゲームサーバーを起動し、run.shの隣にデータフォルダーを保持するためです。
バックアップ対象と保存場所
artifacts は再度ダウンロードしても 1 分で済むため、バックアップする必要はありません。バックアップが必要なのは、次の 4 つです。
~/FXServer/server-data/resources: インストール、購入、作成したすべての resource。server.cfg: 保存場所にかかわらず、管理者 principal を含むサーバー全体の設定。~/FXServer/server/txData: txAdmin の設定、管理者一覧、ログ。Linux artifact では、このフォルダーはrun.shの隣に作成されます。- framework が使用する MariaDB または MySQL データベース。キャラクター、所持金、車両、インベントリはここにのみ保存されるため、データベースの dump がない resource のバックアップからは、空のワールドしか復元できません。
mkdir -p ~/backups
mysqldump -u fivem -p --single-transaction fivem_db > ~/backups/fivem-$(date +%F).sqlサーバーと同じディスクに保存した dump はバックアップではありません。故障するのがそのディスクだからです。VPS からの restic バックアップを使い、定期的にサーバー外へ転送してください。
障害のパターンと表示される文字列
ローダーで Permission denied が発生する。 サーバーは、次のような行を表示して直ちに終了します。
run.sh: line 8: /home/fivem/FXServer/server/alpine/opt/cfx-server/ld-musl-x86_64.so.1: Permission deniedこれは、アーカイブを sudo で展開したためです。alpine/ 以下のすべてのファイルが root の所有になり、fivem ユーザーがその中のローダーを実行できません。sudo chown -R fivem:fivem /home/fivem/FXServer で所有者を修正するか、フォルダーを削除して fivem として再度展開してください。
tar がダウンロードしたファイルを開けない。 tar (child): xz: Cannot exec: No such file or directory は xz-utils パッケージが不足していることを示します。そのため、tar は .tar.xz アーカイブを展開できません。インストールしてから、もう一度展開してください。ダウンロードが異常に短時間で完了した場合は、通常、HTML のエラーページが fx.tar.xz として保存されています。tar は、そのファイルを破損したアーカイブとして報告します。
サーバーは稼働しているが、誰も参加できない。 最初に、次の順序でポートを確認してください。30120 の TCP と UDP の両方に対する ufw ルール、プロバイダー側のネットワークファイアウォール、ライセンスキーに登録された IP です。info.json に対して、サーバーの外部から curl を実行すると、ネットワークの問題かサーバーの問題かを 1 つのコマンドで切り分けられます。
プレイヤーが増えると tick time が上昇する。 txAdmin のパフォーマンスパネルには、サーバーの tick time が表示されます。プレイヤー数に応じて tick time が上昇し、CPU 全体の使用率が低く見える場合は、1 つの resource がメインスレッドを飽和させています。計算方法を覚えておいてください。4 vCPU のサーバーでは、1 つのコアを完全に使い切ると、top では CPU 全体の約 25 percent と表示されます。アイドル状態に見えても、実際にはそうではありません。resource を 1 つずつ停止し、tick time を監視して、負荷の原因を特定してください。
他のゲームサーバーとの比較
プレイ可能な FiveM サーバーには、高速な単一コアと、実際に実行する resource の一覧に対して十分なメモリが必要です。スロット数はこの 2 つで決まり、遅いコアを vCPU の数で補うことはできません。ゲームサーバー向け VPS の選定では、複数種類のサーバーを運用する場合のこのトレードオフを整理しています。VPS で Minecraft サーバーを運用する場合も基本的な構造は同じです。メインの tick loop が 1 つであるため、そこでも上限はコアごとの速度で決まります。
FAQ
FiveM サーバーにはどの程度の CPU と RAM が必要ですか?
複数の低速なコアより、1 つの高速なコアのほうが重要です。FXServer はゲームロジックを単一のメインスレッドで実行するためです。CPU モデルの公開されているシングルスレッドスコアを比較し、実機では sysbench cpu --threads=1 run で確認してください。vmstat で steal time がほぼ 0 であることも確認します。メモリについては、基本的な Cfx.re サーバーデータは数百 MB で動作します。一方、40 個または 50 個の resource とローカルデータベースを含む roleplay framework では 8 GB あれば余裕がありますが、4 GB 未満では不足します。これらは一般的なコミュニティの目安です。数値をそのまま信頼せず、ピーク時に free -m を確認してください。
プレイヤーは FiveM サーバーに参加するために GTA V を所有する必要がありますか?
はい。接続するすべてのプレイヤーは、Steam、Rockstar Games Launcher、または Epic Games で正規にライセンスされた GTA V のコピーと、無料の Cfx.re アカウントを所有している必要があります。FiveM クライアントは接続前にゲームの所有権を確認します。これを回避するサポートされた方法はありません。回避を試みるサーバーの運用も、Cfx.re が認める範囲外です。
FiveM サーバーではどのポートを開放する必要がありますか?
TCP と UDP の両方で port 30120 を開放します。info.json などの HTTP エンドポイントと resource のダウンロードには TCP を使用し、クライアントのゲームトラフィックには UDP を使用します。TCP だけを開放すると、サーバーはブラウザには応答する一方、プレイヤーには Failed to get info from server と表示される分かりにくい状態になります。txAdmin には TCP 40120 が必要ですが、この port はインターネットに公開しないでください。
txAdmin を port 40120 で到達可能な状態にしても安全ですか?
いいえ。txAdmin はサーバーを再起動し、設定を編集し、コマンドを実行できるリモートコンソールです。そのため、公開されたパネルはゲームサーバー全体の制御プレーンを公開することになります。デフォルトパスワードはありませんが、公開されたログインページは、検知できない認証情報攻撃を招きます。ファイアウォールで 40120 を閉じ、ssh -N -L 40120:127.0.0.1:40120 user@server を使用した SSH トンネル経由でパネルにアクセスしてから、http://127.0.0.1:40120 を開いてください。TXHOST_INTERFACE を使用して txAdmin を 127.0.0.1 に bind しないでください。この設定ではゲームサーバーも loopback に bind されるため、プレイヤーが接続できなくなります。
artifact build は固定すべきですか。それとも常に最新の recommended を使用すべきですか?
番号付きの build folder を固定してください。recommended の label は定期的に新しい build に移動します。そのため、recommended build を取得する script では、rebuild のたびに異なる binary が取得される可能性があります。また、前日に動作していたサーバーが、変更とは無関係な理由で redeploy 時に停止することもあります。テストした build number と commit hash を記録し、意図的に upgrade してください。以前の folder も disk 上に残しておき、systemd unit 内の 1 つの path を編集するだけで切り戻せるようにします。