Arma 3 ยท Server setup

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

  • 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.

  1. 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.

  2. 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.

  3. First boot (no mods)

    Start the server with a vanilla mission to verify it runs. Console shows Host identity created. and then Server started on port 2302 when 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 .bikey in the server's keys/ 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
  • -serverMod is for server-side-only mods (not loaded on clients) โ€” signature verification ignores these
  • Order matters for some dependencies โ€” CBA_A3 usually goes first
  • -port=2302 is 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.

  1. Add HC IPs to server.cfg

    If 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.

  2. Start the HC process

    A second arma3server binary 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
  3. Verify via admin chat

    After both are running, #login <admin-pass> in-game, then #players โ€” you should see HC_01 listed 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

  1. 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.

  2. Join via the Multiplayer browser

    Multiplayer โ†’ Server Browser. Filter by name. Double-click to join. Or Direct Connect โ†’ enter YOUR-IP:2302.

  3. Log in as admin

    Chat input: #login your-admin-password. You're now admin โ€” #missions, #kick, #ban, #shutdown all 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 .bikey isn't in the server's keys/ 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
  • .bikey file from the mod is in keys/
  • -mod parameter 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.