How to set up an Arma 3 server from scratch
Deploy a dedicated Arma 3 server, write server.cfg and basic.cfg, load mods with the -mod parameter, set up overhauls like Exile / Altis Life / Antistasi, download Workshop mods via SteamCMD, add a headless client for AI offloading, and fix the common errors.
- What you need first
- Deploy the server (1-click)
- Configure
server.cfg - Tune
basic.cfg(networking) - Mission files and rotations
- Loading mods โ the
-modparameter - Workshop mods via SteamCMD
- Exile, Altis Life, Antistasi
- Headless clients for AI offloading
- BattlEye anti-cheat
- Connect and test
- Common errors and fixes
What you need first
- An active Arma 3 plan on Fatality Servers โ see our Arma 3 hosting plans.
- A Steam copy of Arma 3 on each player's PC (required for clients).
- A Steam account for SteamCMD Workshop downloads โ login via the panel's SteamCMD prompt.
- RAM: 4 GB for vanilla 30-slot, 8 GB for medium-size modsets (ACE + CBA + RHS), 16 GB+ for heavy milsim or Exile servers with lots of persistence.
- Decent CPU. Arma 3's server is single-thread-bound, like most Arma games. High clock speed on one core matters far more than core count.
Deploy the server (1-click)
Our Arma 3 template runs SteamCMD to install the arma3server binary (App ID 233780), sets up the base directory structure, and ships a working default server.cfg.
-
Pick the Arma 3 template at checkout
On our Arma 3 hosting page, pick a plan sized for your slot count and mod load. Arma 3 is a bandwidth-hungry game โ all Fatality plans ship unmetered 1 Gbps, but pick a location near your players since latency drives hit-reg quality.
-
Wait for SteamCMD to download the server
Server files are ~15 GB. First install takes 4-8 minutes. Console shows
Success! App '233780' fully installed.when ready. -
First boot (no mods)
Start the server with a vanilla mission to verify it runs. Console shows
Host identity created.and thenServer started on port 2302when listening.
Configure server.cfg
The main config file. Located at:
arma3server/cfg/server.cfg
A working default you can paste and tweak:
// Identity
hostname = "[EU] My Arma 3 Server โ Antistasi, modded";
password = ""; // Blank = no join password
passwordAdmin = "change-me-strong"; // Admin login password (/#login)
serverCommandPassword = ""; // For scripted commands
// Player behaviour
maxPlayers = 40;
persistent = 1; // World persists across mission restarts
kickDuplicate = 1; // Kick duplicate GUIDs
verifySignatures = 2; // Mod signature validation (2 = strict; 0 = off)
disconnectTimeout = 30; // Seconds before disconnect
// Server info
motd[] = {
"Welcome to the server!",
"Teamkilling = permaban.",
"Discord: discord.gg/yourlink"
};
motdInterval = 5;
// Mission selection
class Missions {
class Mission01 {
template = "Antistasi.Altis"; // Mission file name (minus .pbo)
difficulty = "Regular";
};
};
// Voting
voteMissionPlayers = 3; // Players needed for a mission vote
voteThreshold = 0.5; // 50% vote majority
// File patching โ only enable if you know why
allowedFilePatching = 1; // 0 = none, 1 = HC only, 2 = all clients
// Logging
logFile = "server.log";
timeStampFormat = "short";
// BattlEye
BattlEye = 1; // Enable BE anti-cheat
// Headless client support (see section below)
headlessClients[] = {"127.0.0.1"};
localClient[] = {"127.0.0.1"};
The knobs that matter most for daily ops:
hostnameโ shown in the server browser. Include region + mission + "modded" tag so players can filter.passwordAdminโ lets you#login <pass>in-game to get admin access. Keep strong.verifySignatures = 2โ the strict setting rejects any mod without a matching.bikeyin the server'skeys/folder. Essential for public servers; turn off only for debugging.persistent = 1โ enables the server to keep running between missions. Required for Exile, Antistasi, and any persistence-based gamemode.allowedFilePatchingโ keep at 0 or 1 for public servers. Setting to 2 lets any client inject arbitrary SQF into the server and is effectively a cheater's invitation.
Signature checking saves you. verifySignatures = 2 plus the signed mod keys in keys/ is the single biggest anti-cheat-adjacent protection Arma 3 ships. Every reputable mod distributes a .bikey alongside its .pbo. Drop the key in keys/ and the mod's clients can connect; anything else gets rejected.
Tune basic.cfg (networking)
basic.cfg holds network tuning. Location: arma3server/cfg/basic.cfg. Defaults work for small servers; bigger servers with mods need tuning:
// Bandwidth targets
MinBandwidth = 4194304; // 4 Mbps minimum guaranteed per client
MaxBandwidth = 104857600; // 100 Mbps max per client (raise for high slot counts)
MinErrorToSend = 0.001; // Smaller value = more accurate client sync
MinErrorToSendNear = 0.01;
// Packet sizes
MaxMsgSend = 384; // Messages per frame (raise carefully)
MaxSizeGuaranteed = 512;
MaxSizeNonguaranteed = 256;
// Ticks
MaxCustomFileSize = 1310720; // Custom file limit (face textures, etc.)
class sockets {
maxPacketSize = 1400;
};
Bigger servers (40+ slots) with heavy scripts benefit from raising MaxMsgSend to 512-1024 and MaxBandwidth to 524288000 (500 Mbps). Too high breaks things โ start conservative, raise if you see "desync" warnings.
Mission files and rotations
Missions live as .pbo files in:
arma3server/mpmissions/
Upload mission .pbos via SFTP, then reference them in server.cfg's Missions class using the file name minus the .pbo extension and minus the map suffix.
Example: the file Antistasi.Altis.pbo is referenced as:
template = "Antistasi.Altis";
Rotating multiple missions
Add more classes inside Missions:
class Missions {
class Mission01 {
template = "Antistasi.Altis";
difficulty = "Regular";
};
class Mission02 {
template = "Liberation.Malden";
difficulty = "Regular";
};
};
When mission ends, server loads the next in the list. #missions and #reassign from admin chat let you jump between them manually.
Loading mods โ the -mod parameter
Arma 3 loads mods via startup command-line parameters, not a config file. The panel's Settings โ Startup Parameters field is where you wire them up.
Basic mod loading
-mod="@CBA_A3;@ace;@RHSUSAF;@RHSAFRF" \
-serverMod="@EnhancedMovement_Server" \
-config=cfg/server.cfg \
-cfg=cfg/basic.cfg \
-port=2302 \
-name=server
Notes:
- Mod folders are prefixed
@and separated by semicolons inside quotes -serverModis for server-side-only mods (not loaded on clients) โ signature verification ignores these- Order matters for some dependencies โ
CBA_A3usually goes first -port=2302is the default (game port). Our panel opens 2302-2306 UDP by default
Where mods live
Mod folders go directly in the server root:
arma3server/@CBA_A3/
arma3server/@ace/
arma3server/@RHSUSAF/
arma3server/keys/
โโโ cba_a3.bikey
โโโ ace.bikey
โโโ rhsusaf.bikey
The .bikey signature keys for each mod go in keys/. If a mod ships a .bikey, put it there or clients will fail signature verification.
Workshop mods via SteamCMD
Most mods live on the Steam Workshop. Two download paths:
Via SteamCMD (preferred)
From the panel's SteamCMD prompt (or via the file manager's terminal add-on):
login <your-steam-username>
# (enter password + Steam Guard if prompted)
workshop_download_item 107410 <workshop-id>
quit
Mods land in Steam/steamapps/workshop/content/107410/<id>/. Move them to your Arma 3 server root as @ModName/, and copy any .bikey files from the mod's keys/ subfolder into your server's top-level keys/.
Shortcut: the community tool ArmA 3 Sync and Swifty (both free) handle Workshop downloading, key management, and launch-parameter generation for you. If you're managing 30+ mods, either beats doing it by hand.
Shared community modpacks
Big communities often distribute a modpack as a single download or via Arma 3 Sync. This is the norm for milsim groups โ everyone runs exactly the same mod set, guaranteed by the community's distribution method.
Exile, Altis Life, Antistasi
Exile Mod (survival)
Persistent-world DayZ-style survival on Arma 3. Requires:
- The Exile server files (get from exilemod.com)
- MariaDB / MySQL for persistence (our panel provides one)
- Extension DLLs for DB access (
extDB3, included with Exile) - The Exile client mod loaded on every player's launcher
Setup is non-trivial โ budget a weekend. The Exile wiki has a line-by-line installer walkthrough. The DB schema is Exile_MySQL.sql; import it via phpMyAdmin in the panel.
Altis Life (roleplay)
Framework for cops/robbers/medic RP on Altis. Community is smaller than it was pre-FiveM but still alive. Setup pattern is similar to Exile โ MySQL for persistence, extension DLLs, framework-specific mission .pbo.
Antistasi (guerrilla warfare)
Most approachable of the three โ runs as a plain mission .pbo, no extra mods or database required. Persistent faction war where 3-10 players fight a dynamic enemy across Altis, Malden, Tanoa, or any modded map. Drop the .pbo in mpmissions/, set it as the active mission, start the server. Done.
Headless clients for AI offloading
Arma 3's server has a hard limit: it simulates AI on a single CPU thread. On a 40-slot milsim server with 200 AI, the server tick drops to 10 FPS and gameplay feels like treacle.
The fix: a headless client (HC) โ a second Arma 3 process that connects like a player, takes no slot, but runs AI locally. The mission script (if it supports HC) offloads AI groups to it. Result: server tick stays at 40+ FPS even with heavy AI loads.
-
Add HC IPs to
server.cfgIf running HC on the same box (common):
headlessClients[] = {"127.0.0.1"}; localClient[] = {"127.0.0.1"};For remote HC on another server, list its IP instead.
-
Start the HC process
A second
arma3serverbinary with these flags:./arma3server \ -client \ -connect=127.0.0.1 \ -port=2302 \ -password=<your-server-password-if-set> \ -mod="same-mod-list-as-server" \ -name=HC_01 -
Verify via admin chat
After both are running,
#login <admin-pass>in-game, then#playersโ you should seeHC_01listed as a player (it's a client from the server's perspective). Mission script handles the offloading logic.
Mission must support HC. Antistasi and most milsim missions have HC-offloading built in. If your mission doesn't, adding HC does nothing โ the server keeps running all AI locally. Check the mission's readme.
BattlEye anti-cheat
BattlEye is Arma 3's anti-cheat. Recommended on: leave it on for any public server.
// In server.cfg
BattlEye = 1;
BE config lives in arma3server/battleye/BEServer_x64.cfg. Typical content:
RConPassword = your-rcon-password
RConPort = 2302
MaxPing = 300
RestrictRCon = 1
BattlEye filters (optional, advanced)
For heavily modded servers, BE occasionally false-flags legitimate mod actions. The community maintains curated scripts.txt, createvehicle.txt, etc. filter files at github.com/AridGroup/A3_BE_Filters. Drop these into battleye/ to reduce false-positive kicks.
Connect and test
-
Launch Arma 3 with matching mods
Start Arma 3 via the launcher, enable the same mod set as your server. Load order should match where possible.
-
Join via the Multiplayer browser
Multiplayer โ Server Browser. Filter by name. Double-click to join. Or Direct Connect โ enter
YOUR-IP:2302. -
Log in as admin
Chat input:
#login your-admin-password. You're now admin โ#missions,#kick,#ban,#shutdownall work.
Common errors and fixes
"Bad CD Key" / "Session lost"
Arma 3 anti-piracy kicked the client. Usually a legitimate client glitch โ have the player verify files via Steam and retry. If persistent, the player's Steam / BE state is desynced; a full game reinstall fixes it.
"Signature check failed" on join
verifySignatures = 2 is rejecting the player's mod set. Either:
- The mod's
.bikeyisn't in the server'skeys/folder โ copy it - The player is running a different build than the server โ sync mod versions
- A mod has been re-signed and old keys don't match โ re-download keys
Server shows in browser but won't connect
- BattlEye isn't loaded on either side โ restart both server and client with BE explicitly on
- The server's ports (2302-2306 UDP) are blocked โ our panel handles this, but a custom firewall might not
- Version mismatch โ update the client via Steam or pin the server to the older version via SteamCMD's
app_update 233780 -beta <branch>
Server tick drops under AI load
Classic "server FPS dies when 200 AI spawn". Fix: add a headless client (see Headless clients). If you can't, the next-best options are reducing AI count in the mission, turning off some AI behaviour modules (ACEX AI), or upgrading to a higher-clock CPU.
Workshop mod downloaded but won't load
Check:
- Folder is named with a leading
@(e.g.@CBA_A3) - Folder is in the server root, not in a
workshop/subdirectory .bikeyfile from the mod is inkeys/-modparameter in the startup command lists the mod
Exile / Altis Life DB connection errors
Check your extDB3-conf.ini MySQL connection string โ host, user, password, database name. MariaDB 10.x and MySQL 8.x both work with the latest extDB3; if you're on an older Exile build, you may need to match extDB2. Exile wiki has a compatibility table.
Admin commands don't work after #login
The admin password in server.cfg is set but the server never reloaded. Full server restart applies the config change. #login with an old password silently fails.
Stuck on something specific? Email support with your server IP, mod list, and the last 50 lines of your Arma 3 server console โ we'll usually have an answer within the hour.