Cách chạy server FiveM trên VPS Ubuntu
Cài FXServer trên Ubuntu, ghim artifact build, thêm Cfx.re licence key, mở port 30120 TCP và UDP, đồng thời không đưa txAdmin ra Internet public.
Một máy chủ FiveM trên VPS cần gì
Một máy chủ FiveM trên VPS gồm một Linux user không có quyền đặc biệt, một artifact build từ Cfx.re, một licence key và một port mở trên cả TCP lẫn UDP. Cài đặt mất khoảng mười phút. Phần còn lại của hướng dẫn này tập trung vào những yếu tố quyết định máy chủ có thể chơi ổn định hay không: tốc độ của một CPU core, lượng memory mà các resource cần và một management panel tuyệt đối không được để mở trên địa chỉ public.
Có 3 yêu cầu bắt buộc. Các binary của máy chủ, được gọi là artifact, đến từ danh sách build chính thức của Cfx.re. Licence key lấy từ portal Cfx.re tại portal.cfx.re, tức dịch vụ mà các hướng dẫn cũ gọi là keymaster. Key này gắn với địa chỉ của máy dùng nó. Mỗi player kết nối đều cần một bản GTA V (Grand Theft Auto V) hợp lệ của riêng họ trên Steam, Rockstar Games Launcher hoặc Epic Games, cùng một tài khoản Cfx.re miễn phí. Client kiểm tra quyền sở hữu game khi khởi động, vì vậy máy chủ dựa trên bất kỳ thứ gì khác sẽ không hoạt động. Hướng dẫn này không đề cập đến bất kỳ nội dung workaround nào.
Host máy chủ là một công việc khác với việc chơi game trên chính máy đó. Vấn đề bạn có thể chạy chính game trên VPS hay không là một câu hỏi riêng và có câu trả lời khác.
Vì sao tốc độ một core quyết định cảm giác vận hành của server FiveM
FXServer, binary server của FiveM, chạy logic game trên một main thread. Mọi resource script, event handler và state update đều đi qua loop duy nhất đó. Core bổ sung giúp kernel, database và network stack. Chúng không chia nhỏ game loop. Vì vậy, một máy 4 vCPU có core chậm sẽ bị giật khi tải cao, trong khi máy 2 vCPU có core nhanh vẫn hoạt động mượt.
Điều này đảo ngược thói quen chọn VPS thông thường, trong đó số core là thông số nổi bật nhất. Hãy kiểm tra tốc độ trên mỗi core trước khi trả tiền. Bắt đầu bằng model CPU:
lscpu | grep -E 'Model name|MHz'Sau đó tra điểm single-thread được công bố cho model đó. Điểm PassMark single thread và điểm Geekbench single-core đều là dữ liệu công khai. Cả hai đều đo hiệu năng của một core khi xử lý công việc. Đây mới là con số quan trọng trong trường hợp này. Tiếp theo, hãy đo chính máy bạn được cấp:
sudo apt update && sudo apt install -y sysbench
sysbench cpu --cpu-max-prime=20000 --threads=1 runĐọc dòng events per second. Chạy cùng command trên 2 nhà cung cấp ứng viên để so sánh công bằng, vì workload giống nhau và chỉ chạy trên một core. Chạy benchmark VPS có thể lặp lại giải thích cách giữ cho các con số này có thể so sánh giữa các máy.
Sau đó kiểm tra xem core đó có thực sự dành cho bạn không:
vmstat 1 5Cột cuối cùng, st, là steal time: tỷ lệ thời gian vCPU của bạn đã sẵn sàng chạy nhưng hypervisor buộc nó phải chờ. Giá trị ổn định trên 1 hoặc 2 nghĩa là bạn đang dùng chung một physical core với các máy lân cận có tải cao. Game loop sẽ lập tức bị ảnh hưởng và gây hiện tượng rubber banding. Steal time do máy lân cận gây nhiễu giải thích cách đọc cột này và cách xử lý.
Dung lượng memory phụ thuộc vào các resource bạn chạy, không chỉ phụ thuộc vào số slot. Dữ liệu server cơ bản từ Cfx.re chỉ dùng vài trăm megabyte. Một roleplay framework có 40 hoặc 50 resource cùng với database MariaDB trên cùng máy là một cấu hình khác: 4 GB là mức tối thiểu hợp lý, còn 8 GB sẽ thoải mái ở mức 32 đến 64 slot. Đây là các con số điển hình được những setup trong cộng đồng công bố. Hãy xem chúng như điểm bắt đầu và theo dõi free -m khi có tải player thực tế.
Tạo user và cài dependency
Chạy server bằng một user thông thường, tuyệt đối không dùng root. Có 2 lý do. Dùng root là thói quen không an toàn trên mọi service public Internet. Ngoài ra, artifact Linux chạy bên trong một root filesystem Alpine Linux được đóng gói, nên các file được root giải nén không thể được user khác thực thi. Đây là nguyên nhân phổ biến nhất khiến một bản cài mới không khởi động được.
sudo adduser --disabled-password --gecos "" fivem
sudo apt update
sudo apt install -y git xz-utils curl tcpdump
sudo -iu fivemMọi thao tác bên dưới đều chạy bằng user fivem. Cần có xz-utils vì file tải xuống là archive .tar.xz, còn git được dùng để clone dữ liệu server cơ sở.
Tải một build artifact cố định
Build Linux nằm trong channel build_proot_linux của artifact server Cfx.re. Trang download server của Cfx.re đánh dấu một build là Recommended và build mới hơn là Latest; cả hai nhãn này sẽ chuyển sang các build mới khi có release. Thay vào đó, hãy cố định thư mục được đánh số. Khi rebuild server vào tháng sau, bạn sẽ nhận đúng binary đã kiểm thử trong tháng này, và việc upgrade trở thành quyết định có chủ đích.
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
lsBuild 35245 mang nhãn Recommended khi tôi kiểm tra trang download server của Cfx.re vào ngày 9 October 2026. Mở trang đó, chọn Linux và sao chép tên thư mục từ link fx.tar.xz hiện tại vào URL. Tên này gồm build number và commit hash. Danh sách thư mục artifacts cũ mà nhiều hướng dẫn vẫn liên kết đến hiện redirect về cùng trang đó.
Build được cố định vẫn có thời hạn sử dụng. Cfx.re hỗ trợ một artifact Recommended cho đến 6 tuần sau khi artifact tiếp theo được phát hành. Chính sách của họ nêu rằng các server artifact không còn được hỗ trợ và cũ hơn 3 tháng sẽ không thể được join từ server browser. Build cũ vẫn chạy, nhưng người chơi không thể join từ browser nữa. Vì vậy, hãy lên lịch upgrade thay vì cố định build vô thời hạn.
ls bây giờ phải hiển thị run.sh và một thư mục alpine. Thư mục đó là phần cốt lõi: Linux artifact tự chứa một root filesystem Alpine nhỏ và khởi động server bên trong filesystem đó bằng proot, một công cụ userspace mô phỏng chroot mà không cần quyền root. Vì vậy, một download có thể chạy trên Ubuntu, Debian và Rocky mà không cần các package riêng cho từng distribution.
Bây giờ hãy clone server data cơ sở. Data này chứa các resource mặc định mà server.cfg của bạn sẽ khởi động:
git clone https://github.com/citizenfx/cfx-server-data.git ~/FXServer/server-dataLấy licence key và ghi server.cfg
Đăng nhập tại portal.cfx.re bằng tài khoản Cfx.re của bạn và tạo server key. Portal yêu cầu địa chỉ IP của máy sẽ sử dụng key, và key được gắn với địa chỉ đó. Chuyển sang VPS mới nghĩa là sửa key trong portal, không phải tạo key thứ hai. Thay đổi có hiệu lực ngay, nhưng FXServer chỉ xác thực lại khi khởi động lại.
Ghi ~/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 nhận giá trị từ 1 đến 2048. Giá trị từ 32 trở lên yêu cầu onesync được đặt thành on hoặc legacy, còn giá trị trên 64 yêu cầu on. OneSync là chế độ nhận biết trạng thái của server. Đây là thành phần cho phép server vượt qua số slot nhỏ của game gốc. Đặt 128 slot khi tắt OneSync không tạo ra 128 slot. Thay vào đó, bạn sẽ có một cấu hình bị server từ chối.
sv_licenseKey nhận key không có dấu ngoặc kép và không có khoảng trắng ở cuối. FXServer tách dòng đó theo khoảng trắng. Vì vậy, chỉ một ký tự thừa cũng làm hỏng quá trình xác thực và khiến server không khởi động.
rcon_password cố ý bị thiếu trong file đó. RCON (remote console) chỉ được bật khi biến này được đặt, và khi đó nó sẽ lắng nghe trên cùng UDP port với game. RCON password trên một public port là một kênh remote command đi vào server của bạn. Để biến này không được đặt trừ khi bạn có nhu cầu cụ thể. Nếu cần dùng, hãy đặt password dài và ngẫu nhiên.
sv_scriptHookAllowed giữ nguyên false. Tài liệu chính thức đánh dấu tùy chọn này là không được khuyến nghị, vì cho phép client Script Hook V có thể khiến server bị lạm dụng từ phía client.
Hai dòng cuối hoạt động cùng nhau. add_ace group.admin command allow cho phép nhóm group.admin chạy mọi command, còn add_principal identifier.fivem:1 group.admin khiến Cfx.re account ID 1 kế thừa từ nhóm đó. Đây là cơ chế cấp quyền admin cho account. Cú pháp được tài liệu hóa là add_principal [child_principal] [parent_principal], nên cả hai phần đều bắt buộc: một dòng add_principal chỉ ghi tên account sẽ không có group để kế thừa và không cấp quyền nào. Thay 1 bằng numeric ID của bạn. Nếu không, bạn đã cấp quyền admin cho account của người khác và không cấp quyền cho chính mình.
Khởi động một lần bằng tay:
cd ~/FXServer/server-data
bash ~/FXServer/server/run.sh +exec server.cfgTừ một SSH session thứ hai, yêu cầu server tự báo trạng thái:
curl -s http://127.0.0.1:30120/info.json | head -c 200JSON chứa tên các biến và resource của server cho biết FXServer đã bind và đang trả lời. Connection refused nghĩa là server chưa bind được port, vì vậy hãy đọc output trên console thay vì đoán nguyên nhân.
Server không có key sẽ in nội dung này rồi dừng:
This server does not have a license key specified. Please set the sv_licenseKey console variable to a key from https://keymaster.fivem.net/.Thông báo vẫn ghi địa chỉ keymaster cũ. Địa chỉ đó dẫn đến cùng portal Cfx.re. Nếu key đã được đặt nhưng server vẫn từ chối chạy, nguyên nhân thường gặp là địa chỉ IP đăng ký với key không còn khớp với máy này.
Cần mở những cổng nào cho server FiveM?
Cổng 30120, trên cả TCP (transmission control protocol) và UDP (user datagram protocol). FiveM dùng cùng một số cổng cho hai protocol và cần cả hai. Chỉ mở TCP sẽ tạo ra triệu chứng khó hiểu: http://your.ip:30120/info.json trả lời trong trình duyệt, nên server có vẻ hoạt động bình thường, nhưng game client vẫn đứng ở Failed to get info from server và không bao giờ kết nối được, vì query của client và game traffic đều chạy qua UDP.
sudo ufw allow OpenSSH
sudo ufw allow 30120/tcp
sudo ufw allow 30120/udp
sudo ufw enable
sudo ufw status verboseHãy giữ một phiên SSH thứ hai mở trong khi bật firewall. Tổng quan về ufw cho VPS giải thích chính sách deny mặc định, nhờ đó các rule ở trên đã đủ để hoạt động độc lập.
Hầu hết provider cũng chạy một network firewall bên ngoài guest, được điều khiển từ panel thay vì shell. Một rule của ufw không chứng minh được layer đó đang cho phép traffic. Khi TCP trả lời từ bên ngoài nhưng người chơi vẫn không thể kết nối, hãy monitor network traffic trong lúc có người thử kết nối:
sudo tcpdump -ni any udp port 30120Nếu packet đến được server, outer firewall hoạt động bình thường và lỗi nằm bên trong server. Nếu không có packet nào, một thành phần phía trước server đang drop chúng. Khi đó, hãy kiểm tra panel của provider.
Quản lý server bằng txAdmin mà không public panel
txAdmin có sẵn trong artifact bạn đã tải xuống. Khởi động run.sh mà không có tham số +exec. Lệnh này mở web panel trên TCP port 40120, sau đó in URL của panel và một PIN có thời hạn ngắn ra console. Bạn dùng PIN đó một lần để liên kết tài khoản Cfx.re. Sau đó, bạn đăng nhập bằng admin account mà txAdmin tạo.
txAdmin không có password mặc định. Vì vậy, rủi ro không nằm ở một credential mà bạn quên đổi. Rủi ro nằm ở chính panel này: đó là một remote console. Nó có thể restart server, chỉnh sửa server.cfg, deploy server data và chạy command dưới server user của bạn. Nếu để 40120 có thể truy cập từ Internet, bạn sẽ public một login page cho toàn bộ các chức năng đó. Các scanner thường tìm thấy những panel port đang mở chỉ trong vài giờ. Không mở 40120 trên firewall. Hãy truy cập panel qua SSH tunnel từ máy của bạn:
ssh -N -L 40120:127.0.0.1:40120 fivem@YOUR_SERVER_IPSau đó mở http://127.0.0.1:40120 trong browser. Traffic của panel chạy bên trong SSH connection. Port này vẫn đóng với mọi máy khác.
Có một bẫy bạn nên biết trước khi thử xử lý theo cách khác. txAdmin đọc TXHOST_INTERFACE (mặc định là 0.0.0.0) để quyết định interface sẽ bind. Documentation nêu rõ cùng giá trị đó cũng được áp dụng cho FXServer. Nếu đặt thành 127.0.0.1 để ẩn panel, bạn đồng thời bind game server vào loopback. Khi đó không player nào có thể truy cập server. Hãy đóng panel port bằng firewall, không dùng biến đó. Để chuyển panel sang port khác, đặt TXHOST_TXA_PORT. Giá trị này chấp nhận mọi port ngoại trừ 30120. Convar cũ +set txAdminPort xuất hiện trong nhiều guide. Documentation của txAdmin đánh dấu nó là deprecated và cho biết nó sẽ ngừng hoạt động trong một release tương lai.
Giữ server chạy sau khi đăng xuất
bash run.sh sẽ dừng cùng phiên SSH của bạn. tmux phù hợp khi đang kiểm thử: chạy tmux new -s fivem, khởi động server, nhấn Ctrl-b rồi d để detach, và dùng tmux attach -t fivem để quay lại. Một tmux session không tồn tại sau khi reboot, vì vậy mọi thứ cần chạy lâu dài phải được đặt trong một systemd unit.
Tạo /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 thực hiện 2 việc: khởi động service ngay lập tức và khởi động lại service sau reboot. Server được khởi động thủ công sẽ dừng sau lần cập nhật kernel tiếp theo. journalctl -u fivem -f là console của bạn lúc này, vì systemd service không có terminal để bạn nhập lệnh. Nếu bạn quản lý server qua txAdmin, hãy xóa +exec server.cfg khỏi ExecStart và trỏ WorkingDirectory đến /home/fivem/FXServer/server, vì txAdmin tự khởi động game server và giữ thư mục dữ liệu của nó bên cạnh run.sh.
Những gì cần backup và vị trí lưu trữ
Không cần backup các artifact, vì bạn có thể tải lại build đã pin trong một phút. Có 4 thứ chỉ bạn sở hữu.
~/FXServer/server-data/resources: mọi resource bạn đã cài đặt, mua hoặc tự viết.server.cfg, ở bất kỳ vị trí nào: toàn bộ cấu hình server, bao gồm các admin principal của bạn.~/FXServer/server/txData: cấu hình, danh sách admin và log của txAdmin. Với artifact Linux, thư mục này được tạo bên cạnhrun.sh.- Database MariaDB hoặc MySQL, nếu framework của bạn sử dụng database. Character, tiền, phương tiện và inventory được lưu tại đó, không ở nơi nào khác. Vì vậy, backup resource mà không có database dump sẽ khôi phục một thế giới trống.
mkdir -p ~/backups
mysqldump -u fivem -p --single-transaction fivem_db > ~/backups/fivem-$(date +%F).sqlMột dump nằm trên cùng disk với server không phải là backup, vì chính disk đó có thể hỏng. Hãy định kỳ đẩy bản backup ra khỏi máy chủ. Đây là mục đích của restic backup từ một VPS.
Các dạng lỗi và chuỗi bạn sẽ thấy
Không có quyền trên loader. Server thoát ngay lập tức với một dòng tương tự:
run.sh: line 8: /home/fivem/FXServer/server/alpine/opt/cfx-server/ld-musl-x86_64.so.1: Permission deniedĐiều này xảy ra vì archive được giải nén bằng sudo, nên mọi thứ bên trong alpine/ đều thuộc về root và user fivem không thể thực thi loader trong đó. Sửa ownership bằng sudo chown -R fivem:fivem /home/fivem/FXServer, hoặc xóa thư mục rồi giải nén lại bằng fivem.
tar từ chối mở file download. tar (child): xz: Cannot exec: No such file or directory có nghĩa là thiếu package xz-utils, nên tar không thể giải nén archive .tar.xz. Cài package đó rồi giải nén lại. Một download hoàn tất quá nhanh thường là trang lỗi HTML được lưu thành fx.tar.xz, và tar sẽ báo đó là archive bị hỏng.
Server chạy nhưng không ai kết nối được. Kiểm tra các port trước, theo thứ tự này: rule ufw cho cả TCP và UDP trên 30120, firewall mạng riêng của provider, rồi IP đã đăng ký với licence key. Chạy curl đối chiếu với info.json từ bên ngoài máy chủ sẽ phân biệt vấn đề mạng với vấn đề của server chỉ bằng một command.
Tick time tăng khi người chơi tham gia. Panel hiệu năng của txAdmin hiển thị tick time của server. Khi tick time tăng theo số người chơi nhưng mức sử dụng CPU tổng thể vẫn thấp, một resource đang làm bão hòa main thread. Hãy nhớ phép tính này: trên máy có 4 vCPU, một core chạy 100% sẽ hiển thị khoảng 25 phần trăm CPU tổng trong top, trông có vẻ nhàn nhưng thực tế không phải vậy. Dừng từng resource một và theo dõi tick time để tìm resource gây tốn tài nguyên.
So sánh cấu hình này với các game server khác
Một FiveM server có thể chơi được cần một core đơn nhanh và đủ memory cho danh sách resource bạn thực sự chạy. Số slot phụ thuộc vào 2 yếu tố đó, và thêm vCPU không thể khắc phục một core chậm. Chọn VPS cho game server phân tích sự đánh đổi này khi bạn vận hành nhiều loại server, còn chạy Minecraft server trên VPS cũng có cùng đặc điểm bên dưới: chỉ có một vòng lặp tick chính, nên tốc độ mỗi core cũng quyết định giới hạn ở đó.
FAQ
Server FiveM cần bao nhiêu CPU và RAM?
Một core nhanh quan trọng hơn nhiều core chậm, vì FXServer chạy game logic trên một main thread duy nhất. So sánh single thread score được công bố của model CPU, sau đó xác nhận trực tiếp trên máy bằng sysbench cpu --threads=1 run và kiểm tra để vmstat cho thấy steal time gần bằng 0. Về memory, dữ liệu server Cfx.re cơ bản chỉ dùng vài trăm megabyte, còn roleplay framework có bốn mươi hoặc năm mươi resource cùng một database cục bộ sẽ chạy ổn với 8 GB và chật vật dưới 4 GB. Đây chỉ là các con số phổ biến trong cộng đồng, nên hãy theo dõi free -m vào lúc peak thay vì tin hoàn toàn vào chúng.
Người chơi có cần sở hữu GTA V để vào server FiveM của tôi không?
Có. Mỗi người chơi kết nối phải có bản GTA V hợp pháp, được cấp license trên Steam, Rockstar Games Launcher hoặc Epic Games, cùng một tài khoản Cfx.re miễn phí. FiveM client kiểm tra quyền sở hữu game trước khi cho phép kết nối. Không có cách được hỗ trợ nào để vượt qua yêu cầu này, và việc chạy server cố né yêu cầu đó nằm ngoài phạm vi cho phép của Cfx.re.
Server FiveM cần mở những port nào?
Cần mở port 30120 trên cả TCP và UDP. Các HTTP endpoint như info.json và việc tải resource dùng TCP, còn game traffic của client dùng UDP. Chỉ mở TCP sẽ tạo ra trường hợp khó hiểu: server phản hồi khi truy cập bằng browser nhưng người chơi lại thấy Failed to get info from server. txAdmin cần TCP 40120, và port này nên được đóng với Internet.
Để txAdmin có thể truy cập trên port 40120 có an toàn không?
Không. txAdmin là remote console có thể restart server, sửa configuration và chạy command, nên panel bị expose cũng đồng nghĩa với việc toàn bộ control plane của game server bị expose. txAdmin không có password mặc định, nhưng một login page public sẽ mời gọi các cuộc tấn công vào credential mà bạn không thể nhìn thấy. Hãy đóng 40120 trong firewall và truy cập panel qua SSH tunnel bằng ssh -N -L 40120:127.0.0.1:40120 user@server, sau đó mở http://127.0.0.1:40120 trong browser. Không bind txAdmin vào 127.0.0.1 bằng TXHOST_INTERFACE, vì setting đó cũng buộc game server dùng loopback và không người chơi nào có thể kết nối.
Tôi nên pin artifact build hay luôn dùng bản recommended mới nhất?
Hãy pin numbered build folder. Label recommended thường xuyên chuyển sang build mới, nên script fetch build recommended có thể cung cấp một binary khác ở mỗi lần rebuild. Khi đó, server đã chạy được hôm qua có thể bị lỗi sau redeploy dù bạn không thay đổi gì. Ghi lại build number và commit hash đã kiểm thử, chủ động upgrade, đồng thời giữ folder trước đó trên disk để có thể quay lại bằng cách sửa một path trong systemd unit. Tuy nhiên, đừng để pin bị stale: policy của Cfx.re khiến các artifact không còn được hỗ trợ, cũ hơn ba tháng, không thể join từ server browser, vì vậy hãy upgrade trong support window.