如何在 VPS 上搭建 FiveM 服务器
在 Ubuntu 上安装 FXServer,固定 artifact 构建版本并添加 Cfx.re 许可证密钥,同时在 TCP 和 UDP 开放 30120,避免将 txAdmin 暴露到公网。
VPS 上的 FiveM 服务器需要什么
VPS 上的 FiveM 服务器需要一个非特权 Linux 用户、一个来自 Cfx.re 的 artifact 构建版本、一个许可证密钥,以及在 TCP 和 UDP 上都开放的一个端口。安装大约需要十分钟。本指南的其余部分介绍决定服务器是否可正常游玩的因素:单个 CPU 核心的速度、资源所需的内存,以及不应在公网地址上开放的管理面板。
有 3 项前置条件是固定的。服务器二进制文件称为 artifacts,来自官方 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 的服务器二进制程序,游戏逻辑运行在一个主线程上。每个资源脚本、每个事件处理程序和每次状态更新都要经过这个单一循环。额外的核心可以帮助内核、数据库和网络堆栈,但不能拆分游戏循环。因此,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介绍了如何读取这一列,以及如何处理该问题。
内存需求取决于运行的资源,而不只是 slot 数量。Cfx.re 提供的基础服务器数据只占用几百 MB。同一台主机上运行包含四十或五十个资源的 roleplay 框架和 MariaDB 数据库时,情况就不同了:4 GB 是合理的最低配置,在 32 到 64 个 slot 下,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 artifact server 的 build_proot_linux channel 中。Cfx.re server download page 会将一个构建版本标记为 Recommended,将更新的版本标记为 Latest;发布新版本后,这两个标签都会移动到新的构建版本。请改为固定使用带编号的目录。这样下个月重新构建服务器时,得到的仍是本月测试过的同一个二进制文件,升级也会变成一项经过明确决定的操作。
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
ls我在 2026 年 10 月 9 日查看 Cfx.re server download page 时,Build 35245 带有 Recommended 标签。打开该页面,选择 Linux,然后从当前的 fx.tar.xz 链接中复制目录名称,并将其填入 URL。目录名称由构建编号和 commit hash 组成。许多教程仍然链接到旧的 artifacts 目录列表,但现在该链接会重定向到同一个页面。
固定版本也有使用期限。Cfx.re 会支持某个 Recommended artifact,直到下一个候选版本发布后的六周;其政策还规定,超过三个月的不受支持 server artifact 将无法通过 server browser 加入。过时的构建版本仍会运行,但玩家无法再通过浏览器加入,因此应将升级安排到日历中,而不是永久固定版本。
ls 现在应显示 run.sh 和一个 alpine 目录。这个目录是关键所在:Linux artifact 自带一个小型 Alpine root filesystem,并使用 proot 在其中启动服务器。proot 是一种 userspace 工具,可在不需要 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.adminsv_maxclients接受 1 到 2048 之间的值。值为 32 或更高时,需要将 onesync 设置为 on 或 legacy;值超过 64 时,还需要 on。OneSync 是服务器的状态感知模式,可让服务器突破基础游戏较小的玩家槽位数限制。关闭 OneSync 时将槽位数设为 128 并不会提供 128 个槽位,而是会生成一份服务器拒绝的配置。
sv_licenseKey后面直接写密钥,不要加引号,也不要添加尾随空格。FXServer 会按空白字符拆分该行,因此多出的任何字符都会导致验证失败,服务器也会拒绝启动。
该文件中有意省略了 rcon_password。只有设置此变量时,才会启用 RCON(远程控制台);启用后,它会监听与游戏相同的 UDP 端口。在公网端口上开放 RCON 密码,相当于向服务器提供远程命令通道。除非确有明确需求,否则不要设置它;如果必须使用,请设置长度足够且随机的密码。
sv_scriptHookAllowed保持为 false。官方文档将其标记为不推荐,因为允许 Script Hook V 客户端会使服务器面临客户端侧滥用风险。
最后两行需要配合使用。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,否则您会把管理员权限授予其他人的帐户,而自己没有任何权限。
手动启动一次:
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 地址已不再与此计算机匹配。
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.targetsudo systemctl daemon-reload
sudo systemctl enable --now fivem
systemctl status fivem
journalctl -u fivem -fenable --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.xz;tar 会将其报告为损坏的归档。
服务器正在运行,但没有人能加入。首先按以下顺序检查端口:30120 上 TCP 和 UDP 的 ufw 规则、服务商自己的网络防火墙,以及许可证密钥登记的 IP。使用 curl 从服务器外部检查 info.json,即可通过一条命令区分网络问题和服务器问题。
玩家加入后,Tick 时间不断上升。txAdmin 的性能面板会显示服务器 Tick 时间。如果 Tick 时间随玩家数量上升,而总体 CPU 使用率看起来很低,说明某个资源占满了主线程。请记住计算方式:在 4 vCPU 服务器上,一个完全占用的 CPU 核心在 top 中约显示为总 CPU 使用率的 25 percent;这看起来像是空闲状态,实际并非如此。一次停止一个资源,并监控 Tick 时间,以找出消耗资源的对象。
与其他游戏服务器进行容量规划
可运行的 FiveM 服务器需要高性能的单核,以及足够的内存来支持实际运行的资源列表。玩家数上限取决于这两项配置,增加 vCPU 数量无法弥补单核速度不足。选择用于游戏服务器的 VPS 介绍了如何为混合型服务器集群权衡这些因素,在 VPS 上运行 Minecraft 服务器 的底层情况也类似:服务器只有一个主要 tick 循环,因此单核速度同样决定其性能上限。
FAQ
FiveM 服务器需要多少 CPU 和 RAM?
相比多个低速核心,一个高速核心更重要,因为 FXServer 在单个主线程上运行游戏逻辑。先比较 CPU 型号公布的单线程评分,然后在服务器上使用 sysbench cpu --threads=1 run 确认,并检查 vmstat 显示的 steal time 接近 0。内存方面,基础 Cfx.re 服务器数据只需几百 MB;包含四十或五十个资源并运行本地数据库的 roleplay 框架,使用 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,导致玩家无法连接。
应固定 artifact 构建版本,还是始终使用最新推荐版本?
应固定编号构建目录。推荐标签会定期指向新的构建版本,因此,获取推荐版本的脚本可能在每次重建时提供不同的二进制文件;昨天正常运行的服务器也可能在重新部署后因与你的更改无关的原因发生故障。记录已测试的构建编号和 commit hash,有计划地升级,并将之前的目录保留在磁盘上。这样只需修改 systemd unit 中的一条路径即可切回旧版本。不过,不要让固定版本长期过时:根据 Cfx.re 的政策,超过三个月且不受支持的 artifact 将无法从服务器浏览器加入,因此应在支持期限内升级。