Arma Reforger Linux Server Setup Guide: Ubuntu & Debian Installation
Running an Arma Reforger dedicated server on Linux provides superior performance, stability, and cost-effectiveness compared to Windows. This comprehensive guide covers complete installation, configuration, and optimization for Ubuntu and Debian-based systems.
Why Run Arma Reforger Server on Linux?
Linux offers significant advantages for hosting Arma Reforger servers.
Benefits of Linux for Arma Reforger Servers
Performance:
- ✅ Lower RAM usage (2-3GB less than Windows)
- ✅ Better CPU efficiency (5-10% more FPS)
- ✅ Faster disk I/O
- ✅ No Windows Update disruptions
Stability:
- ✅ Uptime measured in months, not days
- ✅ No forced reboots
- ✅ Better memory management
- ✅ Fewer background processes
Cost:
- ✅ No Windows Server license ($800+)
- ✅ Lower resource requirements
- ✅ Cheaper VPS hosting
- ✅ Free and open-source
Remote Management:
- ✅ SSH access from anywhere
- ✅ Screen/tmux for persistent sessions
- ✅ Automated scripts and cron jobs
- ✅ Lower network overhead
Supported Linux Distributions
Officially tested:
- Ubuntu 20.04 LTS, 22.04 LTS, 24.04 LTS
- Debian 10, 11, 12
- CentOS Stream 8/9 (limited support)
Recommended: Ubuntu 22.04 LTS or Debian 12 for best compatibility with Arma Reforger.
Prerequisites
System Requirements
Minimum for Arma Reforger Server:
- CPU: 4 cores @ 3.0 GHz
- RAM: 8 GB
- Storage: 20 GB SSD
- Network: 10 Mbps upload
- OS: Ubuntu 20.04+ or Debian 10+
Recommended for 32-player Arma Reforger server:
- CPU: 6-8 cores @ 3.5+ GHz
- RAM: 16 GB
- Storage: 40 GB NVMe SSD
- Network: 100 Mbps upload
- OS: Ubuntu 22.04 LTS
Required Knowledge
- Basic Linux command line
- SSH connections
- Text editing (nano/vim)
- File permissions
Don't worry—we'll cover everything step by step!
Initial Setup
Update system packages:
sudo apt update && sudo apt upgrade -y
Install required dependencies:
sudo apt install -y \
lib32gcc-s1 \
lib32stdc++6 \
curl \
wget \
tar \
screen
Create dedicated user (security best practice):
sudo useradd -m -s /bin/bash arma
sudo passwd arma
Switch to arma user:
sudo su - arma
All following commands run as the arma user unless specified otherwise.
Installing SteamCMD
SteamCMD is required to download and update Arma Reforger server files.
Method 1: Manual Installation (Recommended)
Create SteamCMD directory:
mkdir -p ~/steamcmd
cd ~/steamcmd
Download SteamCMD:
wget https://steamcdn-a.akamaihd.net/client/installer/steamcmd_linux.tar.gz
Extract:
tar -xvzf steamcmd_linux.tar.gz
Run SteamCMD (first time downloads updates):
./steamcmd.sh
You'll see:
Steam>
Exit for now:
quit
Method 2: Package Manager
Ubuntu/Debian (alternative method):
# Add multiverse repository
sudo add-apt-repository multiverse
sudo dpkg --add-architecture i386
sudo apt update
# Install SteamCMD
sudo apt install steamcmd -y
Creates symlink at /usr/games/steamcmd
Downloading Arma Reforger Server Files
Creating Installation Directory
mkdir -p ~/arma-reforger-server
cd ~
Downloading via SteamCMD
Create download script ~/download-server.sh:
#!/bin/bash
~/steamcmd/steamcmd.sh \
+force_install_dir ~/arma-reforger-server \
+login anonymous \
+app_update 1874900 validate \
+quit
Make executable:
chmod +x ~/download-server.sh
Run download (may take 10-20 minutes):
./download-server.sh
Verify installation:
ls -la ~/arma-reforger-server/
Should contain:
ArmaReforgerServer(executable)ServerProfile/directory- Various game files
File Permissions
Make server executable:
chmod +x ~/arma-reforger-server/ArmaReforgerServer
Alternative Installation: LinuxGSM
LinuxGSM (Linux Game Server Manager) provides an easy way to manage Arma Reforger servers with built-in monitoring, updates, and alerts.
Installing LinuxGSM
Install dependencies:
sudo dpkg --add-architecture i386
sudo apt update
sudo apt install curl wget file tar bzip2 gzip unzip bsdmainutils python3 util-linux ca-certificates binutils bc jq tmux netcat lib32gcc-s1 lib32stdc++6 steamcmd
Create user and download LinuxGSM:
sudo useradd -m -s /bin/bash armarserver
sudo su - armarserver
curl -Lo linuxgsm.sh https://linuxgsm.sh && chmod +x linuxgsm.sh && bash linuxgsm.sh armarserver
Install the server:
./armarserver install
LinuxGSM Commands
./armarserver start # Start server
./armarserver stop # Stop server
./armarserver restart # Restart server
./armarserver monitor # Check if running
./armarserver update # Update game files
./armarserver details # Show server info
LinuxGSM Monitoring & Auto-Updates
LinuxGSM can monitor your server and restart it if it crashes. Set up cronjobs:
crontab -e
Add monitoring (every 5 minutes):
*/5 * * * * /home/armarserver/armarserver monitor > /dev/null 2>&1
Add daily update check:
0 5 * * * /home/armarserver/armarserver update > /dev/null 2>&1
LinuxGSM for Experimental Version
To use the experimental server branch, add to your LinuxGSM config:
Edit lgsm/config-lgsm/armarserver/armarserver.cfg:
appid="1890870"
Then validate files:
./armarserver validate
Alternative Installation: Docker
Docker provides isolated, reproducible server environments. This is useful for running multiple servers or quick deployment.
Docker Prerequisites
Install Docker:
curl -fsSL https://get.docker.com | sh
sudo usermod -aG docker $USER
Log out and back in for group changes to take effect.
Community Docker Image
A community-maintained Docker image is available: https://github.com/acemod/docker-reforger
Quick start with Docker Compose:
version: '3.8'
services:
arma-reforger:
image: acemod/docker-reforger:latest
container_name: arma-reforger
restart: unless-stopped
ports:
- "2001:2001/udp"
- "17777:17777/udp"
volumes:
- ./config:/reforger/Configs
- ./profile:/reforger/profile
environment:
- ARMA_CONFIG=/reforger/Configs/config.json
- ARMA_LIMITFPS=60
Manual Docker Setup (Ubuntu 18.04 Base)
For more control, build your own container:
Pull Ubuntu image:
docker pull ubuntu:22.04
Run container with ports and volumes:
docker container run -t -d \
-p 2001:2001/udp \
-p 17777:17777/udp \
-v /home/arma/server_data:/home/server \
--name arma-reforger \
ubuntu:22.04
Connect to container:
docker exec -it arma-reforger /bin/bash
Install dependencies inside container:
apt-get update
apt-get install -y libcurl4 net-tools libssl3 ca-certificates
Then follow the SteamCMD installation steps above inside the container.
Docker Networking Note
Docker containers use their own IP by default, which can cause issues with server browser registration.
Solutions:
- Use host networking:
--network host - Set
gameHostRegisterBindAddressin config.json to your host's IP - Use "IP Connect" in-game with your server's external IP
Docker Addon Download Fix
If you get curl errors when downloading large mods in Docker:
Curl error=Failed writing received data to disk/application
error curl_easy_perform, code: 23
Solution: Set addon temp directory in your startup command:
./ArmaReforgerServer -addonTempDir ./tmp -config config.json
Ensure the container has write permissions to that directory.
Creating Arma Reforger Server Configuration
Generate Config.json
Create your Arma Reforger server config:
Create config directory:
mkdir -p ~/arma-reforger-server/ServerProfile
cd ~/arma-reforger-server/ServerProfile
Create config.json:
nano config.json
Paste basic config:
{
"bindAddress": "",
"bindPort": 2001,
"publicAddress": "",
"publicPort": 2001,
"game": {
"name": "My Arma Reforger Linux Server",
"password": "",
"passwordAdmin": "YourAdminPassword123",
"scenarioId": "{ECC61978EDCC2B5A}Missions/23_Campaign.conf",
"maxPlayers": 32,
"visible": true,
"crossPlatform": true,
"gameProperties": {
"serverMaxViewDistance": 2000,
"networkViewDistance": 1000,
"battlEye": true,
"fastValidation": true
}
}
}
Save: Ctrl+O, Enter, Ctrl+X
Validate JSON before starting:
python3 -m json.tool config.json
If valid, outputs formatted JSON. If errors, shows line number.
Pro tip: Use our JSON Config Generator to create config with visual interface!
Configuring Linux Firewall
Open required ports for Arma Reforger server connectivity.
Using UFW (Ubuntu/Debian)
Enable UFW (if not already):
sudo ufw enable
Allow SSH (don't lock yourself out!):
sudo ufw allow 22/tcp
Allow Arma Reforger ports:
# Game port (required)
sudo ufw allow 2001/udp
sudo ufw allow 2001/tcp
# A2S query port (optional, recommended)
sudo ufw allow 17777/udp
# RCON (only if using remote admin)
sudo ufw allow 19999/tcp
Verify rules:
sudo ufw status numbered
Using iptables (Advanced)
# Game port
sudo iptables -A INPUT -p udp --dport 2001 -j ACCEPT
sudo iptables -A INPUT -p tcp --dport 2001 -j ACCEPT
# A2S query
sudo iptables -A INPUT -p udp --dport 17777 -j ACCEPT
# RCON (optional)
sudo iptables -A INPUT -p tcp --dport 19999 -j ACCEPT
# Save rules
sudo iptables-save | sudo tee /etc/iptables/rules.v4
See our Port Forwarding Guide for detailed networking setup.
Testing Arma Reforger Server
Manual Launch
First test (foreground):
cd ~/arma-reforger-server
./ArmaReforgerServer \
-config ServerProfile/config.json \
-profile ServerProfile \
-logStats 60 \
-maxFPS 30
Watch for:
[INFO] Loading configuration from config.json
[INFO] Server name: My Arma Reforger Linux Server
[INFO] BattlEye initialized successfully
[INFO] Registering server with backend...
[INFO] Server registered successfully
[INFO] Server ready for connections
Test connection:
- Open Arma Reforger game client
- Search for your server name
- Try connecting
Stop server: Ctrl+C
Using Screen (Persistent Session)
Screen allows Arma Reforger server to run after disconnecting from SSH.
Start server in screen:
screen -S arma-server
cd ~/arma-reforger-server
./ArmaReforgerServer -config ServerProfile/config.json -profile ServerProfile
Detach from screen: Ctrl+A, then D
Reattach to screen:
screen -r arma-server
List screens:
screen -ls
Kill screen session:
screen -X -S arma-server quit
Setting Up Systemd Service (Recommended)
Systemd allows Arma Reforger server to start automatically on boot and restart on crashes.
Creating Service File
Exit arma user (need root):
exit
Create service file:
sudo nano /etc/systemd/system/arma-reforger.service
Paste configuration:
[Unit]
Description=Arma Reforger Dedicated Server
After=network.target
[Service]
Type=simple
User=arma
WorkingDirectory=/home/arma/arma-reforger-server
ExecStart=/home/arma/arma-reforger-server/ArmaReforgerServer \
-config ServerProfile/config.json \
-profile ServerProfile \
-logStats 60 \
-maxFPS 30
Restart=on-failure
RestartSec=10
StandardOutput=journal
StandardError=journal
SyslogIdentifier=arma-reforger
[Install]
WantedBy=multi-user.target
Save: Ctrl+O, Enter, Ctrl+X
Managing Systemd Service
Reload systemd:
sudo systemctl daemon-reload
Start Arma Reforger server:
sudo systemctl start arma-reforger
Check status:
sudo systemctl status arma-reforger
Should show: Active: active (running)
Enable auto-start on boot:
sudo systemctl enable arma-reforger
Stop server:
sudo systemctl stop arma-reforger
Restart server:
sudo systemctl restart arma-reforger
View logs (real-time):
journalctl -u arma-reforger -f
View last 100 lines:
journalctl -u arma-reforger -n 100
Updating Arma Reforger Server
Regular updates are critical for security, performance, and new features.
Manual Update
Stop server:
sudo systemctl stop arma-reforger
Run update script (as arma user):
sudo su - arma
~/download-server.sh
Restart server:
exit
sudo systemctl start arma-reforger
Automated Update Script
Create update script ~/update-server.sh:
#!/bin/bash
# Arma Reforger Server Auto-Update Script
echo "Stopping Arma Reforger server..."
sudo systemctl stop arma-reforger
echo "Updating server files..."
~/steamcmd/steamcmd.sh \
+force_install_dir ~/arma-reforger-server \
+login anonymous \
+app_update 1874900 validate \
+quit
echo "Starting Arma Reforger server..."
sudo systemctl start arma-reforger
echo "Update complete!"
sudo systemctl status arma-reforger
Make executable:
chmod +x ~/update-server.sh
Run update:
./update-server.sh
Scheduled Updates (Cron)
Edit crontab:
crontab -e
Add weekly update (Sundays at 3 AM):
0 3 * * 0 /home/arma/update-server.sh >> /home/arma/update.log 2>&1
Add daily restart (4 AM):
0 4 * * * /usr/bin/systemctl restart arma-reforger
Monitoring and Logs
Server Logs
Arma Reforger console logs:
ls -la ~/arma-reforger-server/ServerProfile/logs/
View latest log:
tail -f ~/arma-reforger-server/ServerProfile/logs/console_*.log
Search for errors:
grep -i "error" ~/arma-reforger-server/ServerProfile/logs/console_*.log
Systemd Journal Logs
View all Arma Reforger logs:
journalctl -u arma-reforger
Last hour:
journalctl -u arma-reforger --since "1 hour ago"
Follow in real-time:
journalctl -u arma-reforger -f
Performance Monitoring
CPU and RAM usage:
htop
Look for ArmaReforgerServer process.
Real-time stats:
watch -n 5 'ps aux | grep ArmaReforgerServer'
Disk usage:
df -h ~/arma-reforger-server/
Network connections:
sudo netstat -tupln | grep 2001
Backup and Restore
Manual Backup
Backup entire server:
cd ~
tar -czf arma-backup-$(date +%Y%m%d-%H%M%S).tar.gz arma-reforger-server/
Backup config only:
cp ~/arma-reforger-server/ServerProfile/config.json ~/config-backup-$(date +%Y%m%d).json
Automated Backup Script
Create backup script ~/backup-server.sh:
#!/bin/bash
BACKUP_DIR=~/backups
mkdir -p $BACKUP_DIR
# Remove backups older than 7 days
find $BACKUP_DIR -name "arma-*.tar.gz" -mtime +7 -delete
# Create new backup
tar -czf $BACKUP_DIR/arma-backup-$(date +%Y%m%d-%H%M%S).tar.gz \
~/arma-reforger-server/ServerProfile/
echo "Backup complete: $(ls -lh $BACKUP_DIR | tail -1)"
Make executable:
chmod +x ~/backup-server.sh
Schedule daily backup (3 AM):
crontab -e
# Add:
0 3 * * * /home/arma/backup-server.sh >> /home/arma/backup.log 2>&1
Restore from Backup
# Stop server
sudo systemctl stop arma-reforger
# Extract backup
cd ~
tar -xzf backups/arma-backup-TIMESTAMP.tar.gz
# Restart server
sudo systemctl start arma-reforger
Optimization for Linux
CPU Affinity
Pin Arma Reforger server to specific CPU cores:
Edit systemd service:
sudo nano /etc/systemd/system/arma-reforger.service
Add under [Service]:
CPUAffinity=0-3
This uses CPU cores 0-3 only.
Reload and restart:
sudo systemctl daemon-reload
sudo systemctl restart arma-reforger
Memory Management
Increase swappiness (if low on RAM):
sudo sysctl vm.swappiness=10
Make permanent:
echo "vm.swappiness=10" | sudo tee -a /etc/sysctl.conf
Network Optimization
Increase network buffer sizes:
sudo sysctl -w net.core.rmem_max=16777216
sudo sysctl -w net.core.wmem_max=16777216
Make permanent:
echo "net.core.rmem_max=16777216" | sudo tee -a /etc/sysctl.conf
echo "net.core.wmem_max=16777216" | sudo tee -a /etc/sysctl.conf
Disk I/O Optimization
For SSD servers, enable TRIM:
sudo systemctl enable fstrim.timer
sudo systemctl start fstrim.timer
Troubleshooting Linux Arma Reforger Server
Issue 1: Server Won't Start
Check systemd status:
sudo systemctl status arma-reforger
Check journal logs:
journalctl -u arma-reforger -n 50
Common causes:
- Invalid config.json syntax
- Missing file permissions
- Port already in use
- Missing dependencies
Solutions:
# Validate config
python3 -m json.tool ~/arma-reforger-server/ServerProfile/config.json
# Check permissions
ls -la ~/arma-reforger-server/ArmaReforgerServer
# Check if port in use
sudo netstat -tupln | grep 2001
# Reinstall dependencies
sudo apt install --reinstall lib32gcc-s1 lib32stdc++6
Issue 2: Server Crashes Randomly
Check system resources:
free -h # RAM usage
df -h # Disk space
Enable core dumps:
ulimit -c unlimited
Check crash logs:
ls -la ~/arma-reforger-server/ServerProfile/*.dmp
Solutions:
- Increase RAM if swap being used heavily
- Free disk space (need 5GB+ free)
- Update server files
- Check for memory leaks in mods
Issue 3: High CPU Usage
Monitor in real-time:
htop
Solutions:
- Limit server FPS:
-maxFPS 30 - Reduce AI limit in config
- Lower view distances
- Remove performance-heavy mods
See our Optimization Guide for detailed performance tips.
Issue 4: Players Can't Connect
Check firewall:
sudo ufw status
Check if server listening:
sudo netstat -tupln | grep 2001
Test from outside:
- https://www.yougetsignal.com/tools/open-ports/
- Enter your public IP and port 2001
Solutions:
- Open ports in firewall (see Firewall section)
- Check router port forwarding
- Verify
publicAddressin config - Check server logs for backend registration
Advanced: Running Multiple Arma Reforger Servers
You can run multiple Arma Reforger server instances on one Linux machine.
Requirements per Server
- 4+ CPU cores
- 8 GB RAM
- Unique port (2001, 2002, 2003...)
Setup Multiple Servers
Create second server directory:
mkdir -p ~/arma-reforger-server-2
Copy files:
cp -r ~/arma-reforger-server/* ~/arma-reforger-server-2/
Create separate config with different port:
{
"bindPort": 2002,
"publicPort": 2002,
...
}
Create second systemd service:
sudo cp /etc/systemd/system/arma-reforger.service /etc/systemd/system/arma-reforger-2.service
Edit to use new directory and port.
Open additional port:
sudo ufw allow 2002/udp
sudo ufw allow 2002/tcp
Security Best Practices
- ✅ Use dedicated user (not root)
- ✅ Keep system updated:
sudo apt update && sudo apt upgrade - ✅ Configure firewall (only open necessary ports)
- ✅ Use SSH keys instead of passwords
- ✅ Disable root SSH login
- ✅ Enable automatic security updates
- ✅ Regular backups (automated daily)
- ✅ Monitor logs for suspicious activity
- ✅ Strong admin passwords in config
- ✅ Limit RCON access by IP if possible
Helpful Resources
- Arma Reforger Server Setup Guide
- Config Generator
- Port Forwarding Guide
- Optimization Guide
- RCON Setup
- Official Docs
Last Updated: January 2026
Don't want to manage Linux servers yourself? Get fully managed Arma Reforger servers at xGaming Server with 30% OFF your first month!
Ready to configure your Linux server? Generate your config now!
