VPSでFiveMサーバーを構築する方法
UbuntuにFXServerを導入し、artifact buildを固定してCfx.reライセンスキーを設定します。TCPとUDPの30120を開放し、txAdminは公開インターネットから遮断する手順を解説します。
VPS 上の FiveM サーバーに必要なもの
VPS 上の FiveM サーバーには、権限を制限した Linux ユーザーが 1 つ、Cfx.re から取得した artifact build が 1 つ、ライセンスキーが 1 つ、そして TCP と UDP の両方で開放したポートが 1 つ必要です。インストールは約 10 分で完了します。このガイドでは、サーバーをプレイ可能な状態にできるかどうかを左右する要素を説明します。具体的には、単一 CPU コアの速度、resources に必要なメモリ、そして公開アドレスで決して開放してはならない管理パネルです。
固定の前提条件は 3 つあります。サーバーバイナリは artifact と呼ばれ、公式の Cfx.re build listing から取得します。ライセンスキーは、portal.cfx.re にある Cfx.re portal から取得します。これは古いガイドで keymaster と呼ばれているサービスです。キーは、使用するマシンのアドレスに紐付けられます。接続するすべてのプレイヤーは、Steam、Rockstar Games Launcher、または Epic Games にある GTA V (Grand Theft Auto V) の正規コピーと、無料の Cfx.re アカウントを各自用意する必要があります。クライアントは起動時にゲームの所有権を確認します。そのため、それ以外の方法で構築したサーバーは動作しません。また、いかなる種類の回避用コンテンツもここでは扱いません。
サーバーをホストすることと、そのマシンでゲームをプレイすることは別の作業です。後者は、VPS でゲーム自体を実行できるかどうかという別の問いであり、答えも異なります。
FiveM サーバーの体感を決めるのはシングルコア性能
FiveM サーバーのバイナリである FXServer は、ゲームロジックを1本のメインスレッドで実行します。すべての resource スクリプト、イベントハンドラー、状態更新が、その1つのループを通過します。追加のコアは、カーネル、データベース、ネットワークスタックには役立ちます。しかし、ゲームループを分割することはできません。そのため、低速なコアを使う4 vCPUのサーバーは負荷時にカクつく一方、高速なコアを使う2 vCPUのサーバーは滑らかに動作します。
これは、コア数を最も重視する一般的な VPS 選びとは逆の考え方です。契約する前に、コア単体の速度を確認してください。まず CPU モデルを確認します。
lscpu | grep -E 'Model name|MHz'次に、そのモデルの公開されているシングルスレッドスコアを調べます。PassMark のシングルスレッド評価と Geekbench のシングルコアスコアは、どちらも公開されており、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 の基本サーバーデータは数百メガバイトで動作します。40または50個の resource と MariaDB データベースを同じサーバーで実行する roleplay framework では、別の構成になります。4 GB は現実的な下限で、32から64スロットでは8 GBあれば余裕があります。これらはコミュニティ構成で公開されている一般的な値です。まずは目安として使用し、実際のプレイヤー負荷時に free -m を監視してください。
ユーザーを作成して依存関係をインストールする
サーバーは一般ユーザーで実行し、root では実行しないでください。理由は2つあります。インターネットに公開するサービスで root を使うのは、どのような場合でも望ましくありません。また、Linux artifact は同梱された Alpine Linux の root filesystem 内で実行されます。そのため、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 archive であるため xz-utils が必要です。また、ベースサーバーデータの clone には git を使用します。
固定した artifact build をダウンロードする
Linux build は Cfx.re artifact server の build_proot_linux channel にあります。Cfx.re server download page では、1 つの build に Recommended、より新しい build に Latest のラベルが付きます。これらのラベルは新しい release が公開されるたびに別の build へ移動します。代わりに、番号付きの folder を固定してください。翌月に server を再構築しても、今月テストしたものと同じ binary を取得できます。upgrade も意図的に実施する判断になります。
mkdir -p ~/FXServer/server
cd ~/FXServer/server
curl -fLO https://runtime.fivem.net/artifacts/fivem/build_proot_linux/master/35245-6efb47dff473c0e2a12fb50b08d74c0eb24a50d5/fx.tar.xz
tar xf fx.tar.xz
ls2026 年 10 月 9 日に確認した時点では、Build 35245 に Recommended のラベルが付いていました。Cfx.re server download page を開き、Linux を選択してください。現在の fx.tar.xz link から folder name をコピーし、URL に追加します。多くの guide が現在もリンクしている古い artifacts directory listing は、同じ page に redirect されます。
固定した build にも使用期限があります。Cfx.re は、次の Recommended artifact が公開されてから 6 週間まで、その Recommended artifact をサポートします。また、policy では、3 か月を超えたサポート対象外の server artifact には、server browser から join できないと定めています。古い build は動作し続けますが、player は browser から join できなくなります。そのため、build を永続的に固定するのではなく、upgrade を予定に入れてください。
ls には run.sh と alpine directory が表示されるはずです。この directory が重要です。Linux artifact には小さな Alpine root filesystem が含まれており、root 権限なしで chroot をエミュレートする userspace tool である proot を使って、その中で server を起動します。そのため、distribution 固有の package がなくても、1 回の download で Ubuntu、Debian、Rocky 上で実行できます。
ここで base server data を clone します。この data には server.cfg が起動する際に使う default resources が含まれています。
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 (remote console) は変数を設定した場合にのみ有効になり、ゲームと同じ UDP ポートで待ち受けます。公開ポート上の RCON パスワードは、サーバーへのリモートコマンド経路になります。明確な必要性がない限り設定しないでください。設定する場合は、長くランダムな値にします。
sv_scriptHookAllowed は false のままにします。公式ドキュメントでは非推奨とされています。Script Hook V クライアントを許可すると、クライアント側で悪用される可能性があるためです。
最後の 2 行は組み合わせて機能します。add_ace group.admin command allow により group.admin グループはすべてのコマンドを実行できます。add_principal identifier.fivem:1 group.admin により Cfx.re アカウント ID 1 はそのグループを継承し、管理者権限を取得します。記載されている構文は add_principal [child_principal] [parent_principal] です。そのため、両方の部分が必要です。アカウントだけを記述する add_principal 行には継承するグループがなく、権限は何も付与されません。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 サーバーで開放が必要なポートは?
30120 番ポートを、TCP (transmission control protocol) と UDP (user datagram protocol) の両方で開放します。FiveM は 2 つのプロトコルで同じポート番号を使用するため、両方が必要です。TCP だけを開放すると、分かりにくい症状が発生します。ブラウザーでは http://your.ip:30120/info.json が応答するため、サーバーは正常に見えます。しかし、クライアント自身のクエリとゲーム通信は UDP を使用するため、ゲームクライアントは Failed to get info from server のまま接続できません。
sudo ufw allow OpenSSH
sudo ufw allow 30120/tcp
sudo ufw allow 30120/udp
sudo ufw enable
sudo ufw status verboseファイアウォールを有効にする際は、2 つ目の SSH セッションを開いたままにしてください。VPS の ufw 基礎では、上記のルールだけで十分になるデフォルト拒否ポリシーについて説明しています。
多くのプロバイダーは、ゲスト OS の外側でもネットワークファイアウォールを運用しています。これはシェルではなく、管理パネルから制御します。ufw のルールを設定しても、その層が正しく設定されている証拠にはなりません。外部から TCP が応答するのにプレイヤーが接続できない場合は、誰かが接続を試みている間にネットワーク上のパケットを監視します。
sudo tcpdump -ni any udp port 30120パケットが到着していれば、外側のファイアウォールは正常で、問題はサーバー内部にあります。何も到着しなければ、サーバーの手前にある何らかの機器がパケットを破棄しています。次にプロバイダーの管理パネルを確認してください。
txAdmin でサーバーを外部公開せずに管理する
txAdmin は、すでにダウンロードした artifact に含まれています。+exec 引数を付けずに run.sh を起動すると、TCP port 40120 で Web パネルが起動し、パネルの URL と短時間だけ有効な PIN がコンソールに表示されます。この PIN は Cfx.re account のリンク時に 1 回だけ使用します。その後は、作成された admin account でログインします。
txAdmin には default password がありません。そのため、変更し忘れた credential がリスクになるわけではありません。リスクは、このパネルが remote console であることです。サーバーの再起動、server.cfg の編集、server data のデプロイ、server user としてのコマンド実行が可能です。40120 をインターネットから到達可能にすると、これらすべてを操作できる login page が public address に公開されます。スキャナーは、公開された panel port を数時間以内に検出します。ファイアウォールで 40120 を開けないでください。自分のマシンから SSH tunnel 経由でアクセスします。
ssh -N -L 40120:127.0.0.1:40120 fivem@YOUR_SERVER_IP次に、ブラウザーで http://127.0.0.1:40120 を開きます。パネルの通信は SSH connection 内を通過し、他のユーザーには port が閉じたままになります。
別の方法で解決しようとする前に、注意すべき点があります。txAdmin は TXHOST_INTERFACE(default 0.0.0.0)を読み取り、bind する interface を決定します。ドキュメントには、同じ値が FXServer にも強制的に適用されると明記されています。パネルを隠すために 127.0.0.1 を設定すると、game server も loopback に bind されるため、プレイヤーがサーバーに接続できなくなります。パネル port は、その変数ではなくファイアウォールで閉じてください。パネルを別の port に移すには 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 後には停止しています。journalctl -u fivem -fが現在のコンソールになります。systemd service には、入力できる terminal がないためです。代わりに txAdmin でサーバーを管理する場合は、ExecStartから+exec server.cfgを削除し、WorkingDirectoryを/home/fivem/FXServer/serverに指定します。txAdmin が game server 自体を起動し、そのデータフォルダーをrun.shの隣に保持するためです。
バックアップ対象と保存場所
成果物をバックアップする必要はありません。固定したビルドは 1 分で再ダウンロードできるためです。バックアップが必要なのは、次の 4 つだけです。
~/FXServer/server-data/resources: インストール、購入、または作成したすべてのリソース。server.cfg: 保存場所に関係なく、管理者プリンシパルを含むサーバー全体の設定。~/FXServer/server/txData: txAdmin の設定、管理者リスト、ログ。Linux 成果物では、このフォルダーはrun.shの隣に作成されます。- フレームワークが使用する場合は、MariaDB または MySQL のデータベース。キャラクター、所持金、車両、インベントリはそこにのみ保存されます。そのため、データベースダンプなしでリソースだけをバックアップすると、空のワールドしか復元できません。
mkdir -p ~/backups
mysqldump -u fivem -p --single-transaction fivem_db > ~/backups/fivem-$(date +%F).sqlサーバーと同じディスク上にあるダンプは、バックアップではありません。故障するのがそのディスクだからです。スケジュールに従ってサーバーの外部へ転送します。VPS から restic でバックアップは、そのための手段です。
障害の種類と表示される文字列
loader で 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 ユーザーが内部の loader を実行できません。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 パーセントとして表示されます。アイドル状態に見えても、実際にはアイドルではありません。resource を 1 つずつ停止し、tick time を監視して負荷の原因を特定します。
他のゲームサーバーとの比較
プレイ可能な FiveM サーバーには、高速な単一コアと、実際に実行する resource のリストに十分なメモリが必要です。スロット数はこの2つで決まり、vCPU の数を増やしても低速なコアは補えません。ゲームサーバー向け VPS の選び方では、複数のゲームを運用する構成でこのトレードオフを整理しています。VPS で Minecraft サーバーを運用する場合も基本は同じです。メインの tick ループが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 の両方で、ポート 30120 が必要です。info.json などの HTTP エンドポイントと resource のダウンロードには TCP を使用し、クライアントのゲームトラフィックには UDP を使用します。TCP だけを開放すると、ブラウザーにはサーバーが応答する一方で、プレイヤーには Failed to get info from server と表示される分かりにくい状態になります。txAdmin には TCP 40120 が必要ですが、このポートはインターネットから閉じたままにしてください。
txAdmin をポート 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 で待ち受けるため、プレイヤーが接続できなくなります。
artifact build は固定すべきですか。それとも常に最新の recommended を使用すべきですか?
番号付きの build フォルダーを固定してください。recommended のラベルは定期的に新しい build へ移動します。そのため、recommended build を取得するスクリプトでは、再構築のたびに異なるバイナリが配置される可能性があります。昨日動作していたサーバーが、変更とは無関係の理由で redeploy 時に壊れることもあります。テストした build 番号と commit hash を記録し、意図的にアップグレードしてください。以前のフォルダーもディスク上に残しておけば、systemd unit の 1 つのパスを編集するだけで切り戻せます。ただし、固定した build を長期間放置しないでください。Cfx.re のポリシーでは、3 か月を超えて古くなったサポート対象外の artifact は、サーバーブラウザーから参加できなくなります。サポート期間内にアップグレードしてください。