Use case · Game server

Arma Reforger dedicated server on bare metal: install, config, ports

An Arma Reforger dedicated server is the ArmaReforgerServer binary, installed with SteamCMD as app 1874900 (1890870 for experimental) under an anonymous login, started with a JSON file passed to -config, and reached by players on UDP 2001. Bohemia's wiki documents two more default ports, 17777 for Steam (A2S) queries and 19999 for RCON, and strongly recommends capping the server with -maxFPS between 60 and 120.

See the game servers

What Bohemia documents, and what it does not

ItemValue on Bohemia's wiki
InstallSteamCMD, login anonymous, app_update 1874900
Experimental branchapp 1890870
BinaryArmaReforgerServer on Linux, ArmaReforgerServer.exe on Windows
Linux guidetested on Ubuntu
Configurationone JSON file, keys case-sensitive, passed with -config
Frame cap-maxFPS in the 60-120 range, heavily recommended
PlayersmaxPlayers 1-128, default 64
NetworkIPv4; IPv6 is not supported

The wiki gives no minimum CPU, memory or disk figure for the server itself. The only resource numbers in its hosting guide belong to a Docker Desktop walkthrough, which assigns 4 cores and 6 GB of memory to Docker before starting a container. Treat that as one tested setup, not a requirement.

The reason for the frame cap is stated plainly: without -maxFPS, the server can try to use every resource available. Set it before you judge how big a machine you need, or the process will look busier than the game requires.

Settings that move the load

Since Bohemia publishes no per-player figure, size from the settings you choose and then measure. Each of these is documented in the server config reference:

SettingRange or defaultEffect
maxPlayers1-128, default 64Connected clients to replicate to
aiLimitdefault -1 (no limit)Ceiling on AI characters the scenario may spawn
serverMaxViewDistance500-10000, default 1600Maximum view distance the server allows clients
networkViewDistance500-5000, default 1500Streaming range of replicated entities
disableNavmeshStreamingunset by defaultLoads whole navmeshes into memory; up to hundreds of MB depending on terrain

Start the server with -logStats 10000 and it writes a line every 10 seconds with server FPS, frame time, memory in kB, and the player, AI and vehicle counts. Run a full evening of your real scenario with it on, and size the next machine from those lines rather than from a guess.

Why a whole machine

The server runs the scenario's AI, vehicles and projectiles for everyone connected, so its frame time is what your players feel. On a bare metal game server no other tenant shares the cores, the memory bus or the disk, and the server page puts the gain over virtual machines at up to 30% in compute and I/O. A frame cap you set is the only cap on the process.

  • Network. Every server has an unmetered port, 1 Gbps on 10 of the 18 configurable lines and 500 Mbps on the other 8, with nothing counting the traffic. The machines sit on our own network, AS19624, in New York, Miami, San Francisco, Amsterdam and Bucharest.
  • Address. One IPv4 is included with every server, which is what Reforger needs: the game has no IPv6 support.
  • Location. Put the server near most of your players. Ping each city's test IP from the locations page, or trace a route from our looking glass, before you order.
  • Recovery. Rack servers and blades come with an out-of-band controller (HPE iLO, Dell iDRAC or a Supermicro BMC): browser console, power control and virtual media for your own ISO, published once you add a console login.

A ready machine is live about 30 minutes after the order is approved; a build to your own specification takes 4-24 hours. Ubuntu, the distribution the Linux guide was tested on, installs in one click from the Linux server range.

Installing on Ubuntu

  1. Enable multiverse and 32-bit packages, then install SteamCMD from the distribution, as Valve's SteamCMD page describes.
  2. Create a steam user and do everything below as that user. Valve's page calls SteamCMD under the root account a security risk.
  3. Download the server with an anonymous login. Re-run the same line to update it; validate checks the files.
  4. Write the config file (next section), then start the server with a profile directory, where logs and downloaded mods are kept by default.
  5. Wrap the start command in a systemd unit, as the hosting guide suggests, so a crash brings it straight back up.
sudo add-apt-repository multiverse; sudo dpkg --add-architecture i386; sudo apt update
sudo apt install steamcmd
sudo useradd -m steam
sudo -u steam -s
cd /home/steam

# install or update (1890870 = experimental)
/usr/games/steamcmd +force_install_dir /home/steam/armaR +login anonymous +app_update 1874900 validate +quit

# start
mkdir -p /home/steam/.config/ArmaReforgerServer
cd /home/steam/armaR
./ArmaReforgerServer -config /home/steam/.config/ArmaReforgerServer/config.json \
  -profile /home/steam/.config/ArmaReforgerServer -maxFPS 60

To find a scenario's path, run the binary once with -listScenarios; it prints the .conf paths to the log. Workshop scenarios are listed only when no scenario is being loaded, so run it without -config.

The config file

Bohemia's reference recommends leaving bindAddress, bindPort and publicAddress out: the socket binds to all interfaces and the backend detects the public address. The a2s and rcon blocks each need an address; use the server's own IPv4.

{
  "publicPort": 2001,
  "a2s": { "address": "198.51.100.20", "port": 17777 },
  "rcon": {
    "address": "198.51.100.20",
    "port": 19999,
    "password": "ChangeThisNoSpaces",
    "permission": "admin"
  },
  "game": {
    "name": "Everon Conflict - EU",
    "password": "",
    "passwordAdmin": "AnotherSecretNoSpaces",
    "scenarioId": "{ECC61978EDCC2B5A}Missions/23_Campaign.conf",
    "maxPlayers": 64,
    "visible": true,
    "gameProperties": { "fastValidation": true, "battlEye": true },
    "mods": [
      { "modId": "59727DAE364DEADB", "name": "WeaponSwitching" }
    ]
  }
}
  • fastValidation must stay true on any server reached over the internet.
  • Spaces are not allowed in passwordAdmin or in the RCON password; the RCON one needs at least 3 characters and RCON does not start without it. Players with the admin password type #login followed by it in chat.
  • admins takes up to 20 identity or Steam IDs who can log in without the password.
  • The file holds both secrets, so chmod 600 config.json and keep it out of shared folders.

Workshop mods

Mods are entries in game.mods. modId is the mod's GUID from its Workshop page; name is only a comment; version is optional and, when left out, the latest release is used. The server downloads the listed mods from the Workshop, into the profile folder unless -addonDownloadDir points elsewhere, and clients download and activate them when they join.

Since 1.2.1 each entry can carry required. With false, a mod that cannot be downloaded is dropped from the list with a warning in the log instead of stopping the server. In the game client's mod manager, the JSON tab copies your enabled mods as a ready-made list.

Crossplay: crossPlatform: true adds PC, Xbox and PlayStation to supportedPlatforms, but PlayStation is not added on a modded server. A vanilla server is either PC only or PC with all consoles.

Ports and the firewall

PortProtocolPurposeOpen to
2001UDPGame traffic (publicPort)Everyone
17777UDPSteam A2S queriesEveryone, if you want query tools to see it
19999UDPRCONYour own address only

RCON speaks a UDP protocol and its permission can be admin or monitor, the second limited to commands that change nothing. Limit it at the firewall as well: with ufw, ufw allow 2001/udp, ufw allow 17777/udp, and ufw allow from 203.0.113.7 to any port 19999 proto udp, where 203.0.113.7 stands for your own IP. Allow SSH first (ufw allow OpenSSH, ideally limited to your own address) before you run ufw enable, or you will lock yourself out of the machine. BattlEye is on by default (battlEye: true); leave its BEServer_x64.cfg alone apart from appending lines, because Bohemia warns that edited values break it.

When this is the wrong setup

  • A few friends on PC for an evening can run a session from inside the game (Multiplayer, Host tab). Player hosting is PC only, and the host's machine has to stay on.
  • If you want someone else to install and patch the game for you, this page assumes the opposite: you have root on the machine and you own the updates.

Questions

Which SteamCMD app ID installs the Reforger server?

1874900 for the stable server and 1890870 for the experimental branch. Both download with login anonymous, so the server needs no Steam account. Run app_update 1874900 validate again to update.

What ports must be open?

UDP 2001 for players. The wiki also lists 17777 for A2S (Steam query) and 19999 for RCON. If you change publicPort, open that number instead, and keep RCON restricted to your own address.

How many players can one server take?

maxPlayers accepts 1 to 128 and defaults to 64. The hardware needed for a full server depends on the scenario, the AI count and the view distances, which is why the -logStats output is worth reading before you raise the limit.

Does the Linux server run Workshop mods?

Yes. List each mod's GUID in game.mods and the server fetches it from the Workshop at start; clients get the same mods when they join. Downloaded mods go to the profile folder by default.

Can console players join?

Set crossPlatform to true and Xbox and PlayStation are added to the accepted platforms. On a modded server PlayStation is left out, so a modded crossplay server is PC and Xbox.

How fast is a machine ready?

A racked server is live about 30 minutes after the order is approved. A machine built to your own specification takes 4-24 hours. Installing Reforger itself is one SteamCMD command after that.

Put your Reforger server on its own machine

Whole servers on an unmetered port, on our own network in five cities, with root and Ubuntu in one click.

See the game servers

Related on Server Room

Other use cases