To host an Arma 3 server on your own VPS, install SteamCMD, log in with a real Steam account (an anonymous login fails for app 233780 with “No subscription”), download the server, write server.cfg and basic.cfg, open UDP ports 2302 to 2306 and start arma3server_x64 with -config, -cfg and your -mod list. One fast CPU core matters more than many.
This guide covers Linux (Debian 12 or 13, Ubuntu 24.04) and Windows Server, mods and their keys, headless clients, restarts and backups, and which plan size fits. It follows Bohemia Interactive’s server documentation and current SteamCMD behaviour as of October 2026. Searching for an Arma Reforger server? That is a different game with its own server software and a JSON config; none of the steps below apply to it.
| Item | Value |
|---|---|
| SteamCMD app ID | 233780, Steam account login (anonymous fails) |
| Creator DLC content | Branch creatordlc: -beta creatordlc |
| Game port | UDP 2302, set with -port= |
| Other ports | UDP 2303 Steam query, 2304 Steam, 2305 reserved, 2306 BattlEye |
| Binary | arma3server_x64 on Linux, arma3server_x64.exe on Windows |
| Config files | server.cfg via -config=, basic.cfg via -cfg= |
| Missions | .pbo files in the mpmissions folder |
| Mods | -mod= for everyone, -serverMod= for the server only |
How much CPU and RAM does an Arma 3 server need?
CPU first. The server simulates the mission, the AI included, largely on one main thread, so a high clock on one core decides how many AI groups and players it carries. Its frame rate is capped at 50 by default, per Bohemia’s startup parameter docs (-limitFPS changes the cap); when the server FPS falls into the low teens or below, AI turns sluggish and players see desync, however much RAM is free. Log in as admin in game with #login PASSWORD and type #monitor 5 to see server FPS and memory every five seconds. Moving AI to headless clients, covered below, is the standard way past that ceiling.
Memory depends on the mod set. We found no official figure from Bohemia, so these are our starting points:
| Server | RAM for the server | vCores |
|---|---|---|
| Vanilla or light mods, small group | 3 to 4 GB | 2 to 3 |
| Unit operations with a large mod set (CBA, ACE and asset packs) | 6 to 8 GB | 4 to 6 |
| Each headless client on the same machine | add 2 to 4 GB | add 1 to 2 |
On Windows, add about 2 GB for the operating system. On Linux, use the 64-bit arma3server_x64; a 32-bit process runs out of address space with big mod sets.
How do I install an Arma 3 server on Linux?
App 233780 needs a logged-in Steam account. Use a separate account for the server: Steam allows one active login per account, so the server’s logins can sign your own game client out, and SteamCMD caches the login on the machine. If SteamCMD still answers “No subscription” with that account, use one that owns Arma 3; downloading Workshop mods with SteamCMD needs such an account anyway, per the LinuxGSM documentation.
- 1Install dependencies and create the user
Debian · Ubuntu sudo apt update sudo apt install -y curl ca-certificates lib32gcc-s1 nano sudo useradd --system --create-home --home-dir /opt/arma3 --shell /usr/sbin/nologin arma3 - 2Install SteamCMD
Debian · Ubuntu sudo -u arma3 -H mkdir -p /opt/arma3/steamcmd sudo -u arma3 -H sh -c 'curl -fsSL https://steamcdn-a.akamaihd.net/client/installer/steamcmd_linux.tar.gz | tar -xz -C /opt/arma3/steamcmd' - 3Log in once and download the server
The first login asks for the password and, with Steam Guard on, a code from email or the app. Later runs reuse the cached login, which the update in the systemd unit below relies on:
Debian · Ubuntu sudo -u arma3 -H /opt/arma3/steamcmd/steamcmd.sh \ +force_install_dir /opt/arma3/server \ +login YOUR_STEAM_USER +app_update 233780 validate +quit # Creator DLC servers: +app_update 233780 -beta creatordlc validate - 4Create the folders the server uses
Debian · Ubuntu sudo -u arma3 mkdir -p /opt/arma3/profiles /opt/arma3/server/mpmissions /opt/arma3/server/keys
How do I set it up on Windows Server?
The same server runs on a Windows VPS, which suits admins who prefer a desktop and Windows-only mod tooling. Connect over RDP, open PowerShell as Administrator and run:
New-Item -ItemType Directory -Force -Path C:\steamcmd | Out-Null
Invoke-WebRequest https://steamcdn-a.akamaihd.net/client/installer/steamcmd.zip -OutFile C:\steamcmd\steamcmd.zip
Expand-Archive C:\steamcmd\steamcmd.zip -DestinationPath C:\steamcmd -Force
C:\steamcmd\steamcmd.exe +force_install_dir C:\arma3 +login YOUR_STEAM_USER +app_update 233780 validate +quit
New-NetFirewallRule -DisplayName 'Arma 3 2302-2306/UDP' -Direction Inbound -Protocol UDP -LocalPort 2302-2306 -Action AllowC:\arma3\arma3server_x64.exe -port=2302 -config=C:\arma3\server.cfg -cfg=C:\arma3\basic.cfg -profiles=C:\arma3\profiles -name=server "-mod=@cba_a3;@ace"The config files below are the same on both systems. A Task Scheduler task that runs the start line at boot, plus the firewall rule above, is the Windows equivalent of the systemd unit further down.
server.cfg: name, passwords, signatures and missions
hostname = "My Arma 3 server";
password = ""; // empty for a public server
passwordAdmin = "a-long-random-admin-password";
serverCommandPassword = "another-long-random-string";
maxPlayers = 32;
persistent = 1; // keep the mission running when everyone leaves
kickDuplicate = 1;
verifySignatures = 2; // only accept mods signed with a key in keys/
BattlEye = 1;
disableVoN = 0;
motd[] = { "Welcome", "Rules: no team killing" };
motdInterval = 5;
class Missions
{
class Mission1
{
template = "MyMission.Altis"; // mpmissions/MyMission.Altis.pbo, without .pbo
difficulty = "Regular";
};
};Drop the mission .pbo into mpmissions and name it in template without the extension. Leave the Missions class out and the server waits for an admin to pick a mission from the list. verifySignatures = 2 is what keeps players from joining with mods you do not run: their files must be signed with a key you placed in keys.
basic.cfg: network settings
basic.cfg tunes how much data the server sends per frame. Bohemia’s wiki documents the defaults; start from them and change one value at a time, only when #monitor shows the server held back by bandwidth rather than CPU:
MaxMsgSend = 128; // packets per frame (wiki default 128)
MaxSizeGuaranteed = 512; // bytes (default 512)
MaxSizeNonguaranteed = 256; // bytes (default 256)
MinBandwidth = 131072; // bits per second the server can count on (default)
MaxBandwidth = 100000000; // set to roughly your real uplink, here 100 Mbit/s
MinErrorToSend = 0.001;
MinErrorToSendNear = 0.01;Which ports does an Arma 3 server use?
| Port | Protocol | Used for |
|---|---|---|
2302 | UDP | Game traffic and voice (the -port value) |
2303 | UDP | Steam query, port + 1 |
2304 | UDP | Steam port, port + 2 |
2305 | UDP | Reserved for VON, port + 3 |
2306 | UDP | BattlEye, port + 4 |
All five move together with -port. For a second server on the same machine, leave a gap of 100 (2402 to 2406) as community setups do. Allow SSH first:
sudo apt install -y ufw # preinstalled on Ubuntu
sudo ufw allow 22/tcp # your SSH port, first
sudo ufw allow 2302:2306/udp comment 'Arma 3'
sudo ufw enableThe UFW guide covers default-deny rules in more depth.
How do I add mods: -mod, -serverMod and keys
-mod=lists mods every player must also run, separated by semicolons, for example-mod=@cba_a3;@ace. On Linux, quote the whole argument so the shell does not read the semicolon as the end of a command.-serverMod=lists mods only the server loads (admin tools, server-side scripts), which clients neither need nor see.- Copy each client mod’s
.bikeyfile into the server’skeysfolder. Without it,verifySignatureskicks everyone who runs that mod.
Workshop mods on a Linux server
Download them with the same SteamCMD account (it must own Arma 3); 107410 is the game’s app ID and the second number is the item ID from the mod’s Workshop URL, here CBA_A3:
sudo -u arma3 -H /opt/arma3/steamcmd/steamcmd.sh +force_install_dir /opt/arma3/server \
+login YOUR_STEAM_USER +workshop_download_item 107410 450814997 validate +quit
sudo -u arma3 ln -s /opt/arma3/server/steamapps/workshop/content/107410/450814997 /opt/arma3/server/@cba_a3Check where SteamCMD put the files: it prints the path when the download succeeds, and the link has to point there if it differs. The Linux server also expects mod file and folder names in lower case, which many Workshop uploads are not. This renames everything inside a mod folder, copies its keys and hands the keys to the server user; the two find lines were run on Debian 12 with GNU findutils 4.9.0 against a mock mod folder:
sudo find /opt/arma3/server/@cba_a3/ -depth -name '*[A-Z]*' -execdir sh -c 'mv -n -- "$1" "$(printf %s "$1" | tr "[:upper:]" "[:lower:]")"' _ {} \;
sudo find /opt/arma3/server/@cba_a3/ -iname '*.bikey' -exec cp {} /opt/arma3/server/keys/ \;
sudo chown -R arma3:arma3 /opt/arma3/server/keysRun it again after every mod update, because SteamCMD restores the original names. Mods that ship native extensions need a Linux build of them (.so files); a mod with only Windows .dll extensions works on a Windows server only.
Headless clients: moving AI off the server
A headless client is a second Arma 3 process without graphics that joins the server like a player and takes over AI that the mission hands to it, so the AI runs on another core. It is the same arma3server_x64 binary started as a client. Three things have to line up:
- server.cfg allows it:
headlessClients[] = { "127.0.0.1" };andlocalClient[] = { "127.0.0.1" };for a headless client on the same machine. - The mission has a Headless Client slot (placed in the editor as a virtual entity) and a script or mod that moves AI groups to it. Without that, the headless client joins and does nothing.
- The start line loads exactly the same
-modlist as the server:
cd /opt/arma3/server
./arma3server_x64 -client -connect=127.0.0.1 -port=2302 -password=SERVER_PASSWORD \
-profiles=/opt/arma3/profiles -name=hc1 '-mod=@cba_a3;@ace'Give each headless client its own systemd unit modelled on the one below. Two or three are common on a busy server; each costs a core and a few gigabytes.
How do I run it as a service, with updates and restarts?
A start script keeps the mod list readable and out of the unit file’s quoting rules:
sudo tee /opt/arma3/start.sh >/dev/null <<'EOF'
#!/bin/sh
cd /opt/arma3/server || exit 1
exec ./arma3server_x64 -name=server -port=2302 \
-config=/opt/arma3/server.cfg -cfg=/opt/arma3/basic.cfg \
-profiles=/opt/arma3/profiles \
'-mod=@cba_a3;@ace'
EOF
sudo chown arma3:arma3 /opt/arma3/start.sh
sudo chmod 750 /opt/arma3/start.sh[Unit]
Description=Arma 3 dedicated server
Wants=network-online.target
After=network-online.target
[Service]
Type=simple
User=arma3
Group=arma3
# update with the cached login before every start; "-" lets a failed update fall through
ExecStartPre=-/opt/arma3/steamcmd/steamcmd.sh +force_install_dir /opt/arma3/server +login YOUR_STEAM_USER +app_update 233780 +quit
ExecStart=/opt/arma3/start.sh
TimeoutStartSec=900
Restart=on-failure
RestartSec=15
[Install]
WantedBy=multi-user.targetsudo systemctl daemon-reload
sudo systemctl enable --now arma3
sudo journalctl -u arma3 -f
# many communities restart daily; this one at 05:00
(sudo crontab -l 2>/dev/null; echo "0 5 * * * /usr/bin/systemctl restart arma3") | sudo crontab -On Linux the server writes what Windows puts in its .rpt log file to the console instead, so under systemd journalctl -u arma3 is the server log; read it first when a mission does not load. On Windows the .rpt lands in the profiles folder. The systemd service guide explains each line of the unit.
What should I back up?
The server install comes back with SteamCMD. What you cannot download again is your configuration and mission state: server.cfg, basic.cfg, start.sh, the profiles folder (missions that save progress with profileNamespace keep it in the server profile there), mpmissions and keys:
mkdir -p /opt/arma3/backups
tar -czf /opt/arma3/backups/arma3-$(date +%F).tar.gz -C /opt/arma3 \
server.cfg basic.cfg start.sh profiles server/mpmissions server/keys
ls -1t /opt/arma3/backups/arma3-*.tar.gz | tail -n +15 | xargs -r rm --Persistence mods that write to a database need a database dump as well. Copy the archives to another machine; a backup on the same disk does not survive the disk.
Why can’t players join, or why is the server slow?
| Symptom | Confirm with | Fix |
|---|---|---|
No subscription | SteamCMD output | Log in with a Steam account instead of anonymous; one that owns Arma 3 if it persists |
| Not in the server browser | sudo ss -ulpn | grep arma3 | Open UDP 2302 to 2306; the browser uses the query port 2303 |
| Players kicked for signatures | The server log (journal or .rpt) names the file | Copy that mod's .bikey into keys, or remove the mod from the client |
| Mod not loaded on Linux | The server log shows a missing addon | Lower-case the mod folder and its files; quote the -mod argument |
| AI slow, rubber-banding | #monitor 5 | Server FPS low: fewer AI, a headless client, or a faster core |
Which VPS plan fits an Arma 3 server?
Pick by single-core speed first. Our Hi-CPU KVM line runs on AMD EPYC with ECC memory and is aimed at software whose main loop leans on one or two threads, as Arma’s does. Our Standard KVM line (Intel, DDR4 ECC) carries more vCores and RAM per price step, which helps once you add headless clients:
| Server | Hi-CPU KVM | Standard KVM |
|---|---|---|
| Small group, vanilla or light mods | HI-CPU 3: 3 vCores, 6 GB | STANDARD KVM 2: 4 vCores, 8 GB |
| Unit operations, large mod set | HI-CPU 5: 6 vCores, 12 GB | STANDARD KVM 4: 8 vCores, 16 GB |
| Server plus two headless clients | HI-CPU 6: 8 vCores, 16 GB | STANDARD KVM 5: 12 vCores, 24 GB |
vCores are shared virtual cores, not reserved physical ones. Every plan sits behind always-on DDoS filtering, and Windows Server 2022 or 2019 can be picked at order time on a time-limited evaluation licence until you activate your own key. You can pay by card, PayPal or crypto. Stock differs between Amsterdam and Frankfurt, so check the product page for your location; our gaming VPS page sizes other popular games on both lines.
Frequently asked
Can you download the Arma 3 server with an anonymous SteamCMD login?
No. As of October 2026 an anonymous login for app 233780 fails with No subscription. Log in with a Steam account, ideally a separate one for the server, because Steam allows one active login per account. Downloading Workshop mods through SteamCMD needs an account that owns Arma 3.
Which ports does an Arma 3 server need?
UDP 2302 to 2306 by default: 2302 for game traffic and voice, 2303 for the Steam query, 2304 for Steam, 2305 reserved for VON and 2306 for BattlEye. All five shift together with -port. For a second server on the same machine, leave a gap of 100, for example 2402 to 2406.
Why is my Arma 3 server laggy when most CPU cores are idle?
The mission and its AI run largely on one main thread, so one busy core limits the server while the others wait. Log in as admin and type #monitor 5 to see the server FPS, which is capped at 50 by default. Fewer AI, a headless client or a faster core helps; more RAM does not.
What is the difference between -mod and -serverMod in Arma 3?
-mod lists mods every player must run as well, and with verifySignatures = 2 the server checks their files against the keys in its keys folder. -serverMod lists mods only the server loads, such as admin tools or server-side scripts, which clients neither need nor see.