SSD Nodes Learn Hosting plans →
指南 Matt Connor作者: Matt Connor

如何在VPS上搭建FiveM服务器

在 Ubuntu 上安装 FXServer,固定 artifact 构建版本并配置 Cfx.re 许可证密钥,同时开放 30120 的 TCP 和 UDP 端口,避免将 txAdmin 暴露到公网。

VPS 上的 FiveM 服务器需要什么

VPS 上的 FiveM 服务器需要一个非特权 Linux 用户、一个来自 Cfx.re 的 artifact 构建版本、一个许可证密钥,以及在 TCP 和 UDP 上都开放的一个端口。安装大约需要十分钟。本指南其余部分介绍决定服务器是否能正常游玩的因素:单个 CPU 核心的性能、资源所需的内存,以及绝不应直接暴露在公网地址上的管理面板。

有 3 项前置条件是固定的。服务器二进制文件称为 artifact,来自官方 Cfx.re 构建版本列表。许可证密钥来自 Cfx.re 门户 portal.cfx.re,该服务在旧版指南中称为 keymaster;密钥与使用它的计算机地址绑定。每位连接的玩家都需要在 Steam、Rockstar Games Launcher 或 Epic Games 上拥有自己合法购买的 GTA V(Grand Theft Auto V)副本,还需要一个免费的 Cfx.re 账户。客户端启动时会检查游戏所有权,因此使用其他方式构建的服务器无法运行。本指南不涉及任何形式的绕过内容。

托管服务器与在该主机上运行游戏是两项不同的工作。后者取决于您是否能在 VPS 上直接运行游戏,这是另一个问题,答案也不同。

为什么单核速度决定 FiveM 服务器的运行体验

FXServer 是 FiveM 的服务器二进制程序,游戏逻辑运行在一个主线程上。每个资源脚本、每个事件处理程序和每次状态更新,都要经过这个单一循环。额外的 CPU 核心可以帮助内核、数据库和网络栈运行,但无法拆分游戏循环。因此,一台单核速度较慢的 4 vCPU 服务器可能在负载下卡顿,而一台单核速度较快的 2 vCPU 服务器反而能保持流畅。

这与通常购买 VPS 时的习惯相反,因为人们往往首先关注核心数量。在决定付费前,先检查单核速度。先查看 CPU 型号:

lscpu | grep -E 'Model name|MHz'

然后查询该型号公布的单线程分数。PassMark 单线程评级和 Geekbench 单核分数都是公开数据,二者都衡量单个核心执行任务的能力,这正是此处需要关注的指标。随后,测量你实际获得的服务器:

sudo apt update && sudo apt install -y sysbench
sysbench cpu --cpu-max-prime=20000 --threads=1 run

读取 events per second 行。在两个候选服务商上运行相同的命令,就可以进行可靠比较,因为工作负载相同,并且都限制在一个核心上。可重复的 VPS 基准测试介绍了如何让不同服务器上的这些数据保持可比。

然后确认这个核心确实由你使用:

vmstat 1 5

最后一列 st 表示 steal time,即虚拟 CPU 已准备运行,但 hypervisor 让它等待的时间占比。如果该数值持续高于 1 或 2,说明你与繁忙的邻居实例共享物理核心,游戏循环会立即表现出橡皮筋效应。来自繁忙邻居实例的 Steal time介绍了如何读取这一列,以及应采取哪些措施。

内存需求取决于运行的资源,而不只是玩家位数。Cfx.re 提供的基础服务器数据只占用几百 MB。同一台服务器上运行包含四十或五十个资源的角色扮演框架,并运行 MariaDB 数据库,则是另一种情况:4 GB 是合理的最低配置,32 到 64 个玩家位时,8 GB 使用起来更宽裕。这些是社区部署方案公布的典型数据,应将其作为起点,并在真实玩家负载下监控 free -m

创建用户并安装依赖项

始终使用普通用户运行服务器,不要使用 root。原因有两个。对于任何面向互联网的服务,使用 root 都是不良做法。此外,Linux 构建版本运行在捆绑的 Alpine Linux 根文件系统中,因此由 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 构建服务器的 build_proot_linux 通道中。列表会将一个构建版本标记为当前推荐版本,该标签每隔几周就会移到新的构建版本。应改为固定使用带编号的目录。这样下个月重新构建服务器时,获得的仍是本月测试过的相同二进制文件,是否升级也由您主动决定。

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
ls

我在 August 2026 查看列表时,Build 25770 带有推荐标签。在浏览器中打开同一目录查看当前推荐版本,然后将该目录名填入 URL。目录名由构建编号和提交哈希组成。

ls 现在应显示 run.sh 和一个 alpine 目录。该目录是关键所在:Linux 构建产物自带一个小型 Alpine 根文件系统,并使用 proot 在其中启动服务器。proot 是一种无需 root 权限即可模拟 chroot 的用户空间工具。因此,单个下载包无需发行版专用软件包,即可在 Ubuntu、Debian 和 Rocky 上运行。

现在克隆基础服务器数据,其中包含 server.cfg 启动时使用的默认资源:

git clone https://github.com/citizenfx/cfx-server-data.git ~/FXServer/server-data

获取许可证密钥并编写 server.cfg

使用 Cfx.re 账户登录 portal.cfx.re,并创建服务器密钥。门户会要求提供使用该密钥的计算机 IP 地址,密钥也会绑定到该地址。迁移到新的 VPS 时,应在门户中编辑密钥,而不是创建第二个密钥。编辑会立即生效,但 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.admin

sv_maxclients 接受 1 到 2048 之间的值。值为 32 或更高时,需要将 onesync 设置为 onlegacy;值高于 64 时还需要 on。OneSync 是服务器的状态感知模式,服务器只有启用该模式后才能超过基础游戏较小的玩家槽位数。关闭 OneSync 时将槽位设置为 128 并不会获得 128 个槽位,而是生成一份服务器会拒绝的配置。

sv_licenseKey 后面应直接填写密钥,不要加引号或尾随空格。FXServer 会按空白字符拆分该行,因此多出的任何字符都会导致验证失败,服务器也会拒绝启动。

该文件中有意省略了 rcon_password。只有设置该变量后才会启用 RCON(远程控制台),并且 RCON 会监听与游戏相同的 UDP 端口。在公网端口上配置 RCON 密码,相当于向服务器开放远程命令通道。除非有明确需求,否则不要设置该变量;如果确实需要,请使用长度较长且随机生成的密码。

sv_scriptHookAllowed 保持为 false。官方文档将其标记为不推荐,因为允许 Script Hook V 客户端会使服务器面临客户端滥用风险。

add_principal identifier.fivem:1 会向 Cfx.re 账户 ID 1 授予管理员权限。将 1 替换为您自己的数字 ID,否则您会把管理员权限授予其他人的账户,而自己没有管理员权限。

手动启动一次:

cd ~/FXServer/server-data
bash ~/FXServer/server/run.sh +exec server.cfg

从第二个 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(传输控制协议)和 UDP(用户数据报协议)。FiveM 对这两种协议使用同一个端口号,因此两者都必须开放。只开放 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 基础知识介绍了默认拒绝策略,因此仅配置上述规则即可。

大多数提供商还会在虚拟机外部运行网络防火墙,并通过控制面板而不是 shell 进行管理。ufw 规则无法证明外部防火墙已放行。TCP 可以从外部响应,但玩家仍然无法连接时,请在有人尝试连接的同时监控网络流量:

sudo tcpdump -ni any udp port 30120

如果能收到数据包,说明外部防火墙正常,故障位于服务器内部。如果完全没有数据包,说明服务器前方的某一层正在丢弃数据包,下一步应检查提供商的控制面板。

在不暴露服务器的情况下使用 txAdmin 管理服务器

txAdmin 已包含在您下载的 artifact 中。启动 run.sh 时不要添加 +exec 参数。它会在 TCP 端口 40120 上启动 Web 面板,然后在控制台输出面板 URL 和一个短期有效的 PIN。您只需使用该 PIN 关联一次 Cfx.re 账户,之后即可使用它创建的管理员账户登录。

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 官方文档已将其标记为弃用,并说明它将在未来版本中停止工作。

在退出登录后保持服务器运行

bash run.sh会随 SSH 会话结束。测试期间使用 tmux 即可:运行 tmux new -s fivem,启动服务器,按 Ctrl-b,然后按 d 退出连接;使用 tmux attach -t fivem重新连接。tmux 会话无法在重启后保留,因此需要长期运行的服务必须配置为 systemd 单元。

创建 /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.target
sudo systemctl daemon-reload
sudo systemctl enable --now fivem
systemctl status fivem
journalctl -u fivem -f

enable --now有两个作用:立即启动服务,并在重启后恢复服务。手动启动的服务器会在下一次内核更新后停止。现在 journalctl -u fivem -f就是您的控制台,因为 systemd 服务没有可供您输入命令的终端。如果改用 txAdmin 管理服务器,请从 ExecStart中移除 +exec server.cfg,并将 WorkingDirectory指向 /home/fivem/FXServer/server,因为 txAdmin 会自行启动游戏服务器,并将其数据目录放在 run.sh旁边。

要备份什么,以及数据存放在哪里

无需备份构建产物,因为您可以在一分钟内重新下载固定版本的构建产物。以下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 备份就是用于此目的的工具。

故障模式及您将看到的字符串

加载器权限被拒绝。 服务器会立即退出,并显示类似以下内容的一行:

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.xztar 会将其报告为损坏的归档文件。

服务器正在运行,但没有人能加入。 首先按以下顺序检查端口:针对 30120 上 TCP 和 UDP 的 ufw 规则,然后检查服务提供商自己的网络防火墙,最后检查许可证密钥登记的 IP。通过在服务器外部使用 curl 检查 info.json,可以用一条命令区分网络问题和服务器问题。

玩家加入后,tick 时间不断上升。 txAdmin 的性能面板会显示服务器 tick 时间。当 tick 时间随玩家数量上升,而总体 CPU 使用率看起来很低时,说明某个资源正在占满主线程。请记住这个计算方式:在一台 4 vCPU 服务器上,单个核心完全占用时,在 top 中显示的总 CPU 使用率大约为 25 percent;这看起来像是空闲,实际并不是。逐个停止资源,并监控 tick 时间,以找出消耗资源的项目。

与其他游戏服务器的配置规模比较

可正常运行的 FiveM 服务器需要高性能的单核 CPU,以及足够容纳实际运行资源列表的内存。玩家槽位数取决于这两项配置,增加 vCPU 数量无法弥补单核性能不足。选择游戏服务器 VPS 介绍了如何为混合游戏服务器集群权衡这些因素;在 VPS 上运行 Minecraft 服务器 的基本情况也相同:服务器只有一个主要 tick 循环,因此单核速度同样决定其性能上限。

FAQ

FiveM 服务器需要多少 CPU 和 RAM?

相比多个较慢的核心,一个高性能核心更重要,因为 FXServer 会在单个主线程上运行游戏逻辑。先比较 CPU 型号公布的单线程得分,然后在服务器上使用 sysbench cpu --threads=1 run 确认,并检查 vmstat 显示的 steal time 是否接近 0。内存方面,基础 Cfx.re 服务器数据只需几百 MB;运行包含四十或五十个资源的角色扮演框架并搭配本地数据库时,8 GB 通常足够,低于 4 GB 则会比较紧张。这些只是社区中的典型数据,因此应在峰值时监控 free -m,不要完全依赖这些数值。

玩家是否必须拥有 GTA V 才能加入我的 FiveM 服务器?

是。每名连接的玩家都必须在 Steam、Rockstar Games Launcher 或 Epic Games 上拥有合法授权的 GTA V 副本,并拥有免费的 Cfx.re 账户。FiveM 客户端会在建立连接前检查游戏所有权。没有受支持的绕过方式;运行试图绕过该检查的服务器也不符合 Cfx.re 的规定。

FiveM 服务器需要开放哪些端口?

TCP 和 UDP 都需要开放 30120。HTTP 端点(例如 info.json)和资源下载使用 TCP,客户端的游戏流量使用 UDP。只开放 TCP 会导致一种容易混淆的情况:服务器可以响应浏览器请求,但玩家会看到 Failed to get info from server。txAdmin 需要使用 TCP 40120,但该端口不应对互联网开放。

将 txAdmin 保持在 40120 端口上并允许访问是否安全?

不安全。txAdmin 是一个远程控制台,可以重启服务器、编辑配置和运行命令,因此暴露该面板就等于暴露整个游戏服务器的控制平面。虽然默认没有密码,但公开的登录页面会招致你无法察觉的凭据攻击。应在防火墙中关闭 40120,通过 SSH 隧道和 ssh -N -L 40120:127.0.0.1:40120 user@server 访问面板,然后打开 http://127.0.0.1:40120。不要使用 TXHOST_INTERFACE 将 txAdmin 绑定到 127.0.0.1,因为该设置也会强制游戏服务器监听 loopback,玩家将无法连接。

应固定带编号的 build 文件夹。recommended 标签会定期指向新的 build,因此,获取 recommended build 的脚本可能在每次重建时提供不同的二进制文件;昨天还能运行的服务器,也可能在重新部署时因与你的更改无关的原因发生故障。记录经过测试的 build number 和 commit hash,有计划地升级,并将之前的文件夹保留在磁盘上。这样只需修改 systemd unit 中的一处路径即可切换回旧版本。

#fivem#game-server#txadmin#single-thread#vps