Icarus
Not enough ratings
Easy Linux Dedicated Server Guide
By AlphaObeisance
A straight forward Steam Guide for deploying an Icarus Dedicated Server on all Linux Servers & PCs.
5
2
8
   
Award
Favorite
Favorited
Unfavorite
= PREFACE =
________________________________________________________________


I’d like to preface by stating that I have personally contributed nothing to making this possible and am merely providing Steam front Documentation for installing an Icarus Dedicated Server via Nerodon’s preconfigured Docker deployment. Without the work of Nerodon and their contributors; this wouldn’t be as simple for me to write up for you; so thank you!

If you find this guide useful please rate it accordingly.
Without ratings, it's harder for other Linux users to find this guide. Help them out!

Questions, comments, corrections or concerns please feel free to comment below

________________________________________________________________
= HARDWARE / SOFTWARE =
You can install this on any Linux computer / virtual machine / container.

[Desktop Virtualization:] VMware Workstation[www.vmware.com]
[Servers:] Proxmox[www.proxmox.com]
________________________________________________________________

[My Server]
OS: Proxmox
Hardware:
Enterprise Dell R730xd
x2 Intel Xeon E5-2680 48 @ 3.30 GHz
220GB RAM

SYSTEM RESOURCES
[Icarus Server VM]
2 cores
2 ensures around 50% headroom mine runs 4 cores and utilizes around 24% CPU use avg
8GB RAM
avgs around 6.75GB ram regardless of 1-5 players I've tested with. Servers are well optimized.

________________________________________________________________

Ideally, we'll get Native Linux Dedicated Server support in the future; but until then this will have to do.

#LinuxIsTheServerShotcaller
Seriously RocketWerkz, Linux is taking over desktop, but it's owned the Server space for a hot second, there's a reason virtually every major corporation on the planet uses Linux to host their servers ;)
= INSTALLATION =
________________________________________________________________

Creating a dedicated server on Linux (Any Linux Distro) is quite simple and straight forward thanks to the use of Docker.

[Step 1:]
Download Docker

Arch Linux: sudo pacman -S docker docker-compose
Other Distros: https://docs.docker.com/engine/install/

[Step 2:]
Enable Docker


sudo systemctl enable --now docker

[Step 3:]
Pull nerodons docker container


sudo docker pull nerodon/icarus-dedicated

[Step 4:]
Run docker


sudo docker run -p 17777:17777/udp -p 27015:27015/udp -v data:/home/steam/.wine/drive_c/icarus -v game:/game/icarus -e SERVERNAME=AmazingServerName -e JOIN_PASSWORD=mypassword -e ADMIN_PASSWORD=mysupersecretpassword nerodon/icarus-dedicated:latest

________________________________________________________________

[NOTE:] Change AmazingServerName, mypassword, mysupersecretpassword to your desired values.
________________________________________________________________

[Step 5:]
Create docker-compose.yml (This sets up your basic server name and credentials)


mkdir ~/icarus-server
cd ~/icarus-server
touch docker-compose.yml
nano docker-compose.yml
________________________________________________________________

[NOTE:] if you dont have nano, welcome to 2024 ;) install it. Or fart dust with VIM. Whatever editor you prefer, even if it's something as painstaking and un-intuitive as VIM lol
________________________________________________________________

[EXAMPLE:]

version: "3.8"

services:

icarus:
container_name: icarus-dedicated
image: nerodon/icarus-dedicated:latest
hostname: icarus-dedicated
init: true
restart: "unless-stopped"
networks:
host:
ports:
- 17777:17777/udp
- 27015:27015/udp
volumes:
- data:/home/steam/.wine/drive_c/icarus
- game:/game/icarus
environment:
- SERVERNAME=AmazingServerName
- BRANCH=public
- PORT=17777
- QUERYPORT=27015
- JOIN_PASSWORD=mypassword
- ADMIN_PASSWORD=mysupersecretpassword
- STEAM_USERID=1000
- STEAM_GROUPID=1000
- STEAM_ASYNC_TIMEOUT=60

volumes:
data: {}
game: {}

networks:
host: {}

________________________________________________________________

[NOTE:] Change AmazingServerName, mypassword, mysupersecretpassword to your desired values.
Save and exit.
________________________________________________________________

[Make script executable]

chmod +x ~/icarus-server/icarus-monitor.sh

________________________________________________________________
= AUTOMATION / MONITORING =
I wanted to set up a bit of automation for my server; so I created a simple light weight monitor script that effectively checks to ensure the server is running. The script is executed in 5 second intervals.

[Step 1:]

#Create the monitor script

touch ~/icarus-server/icarus-monitor.sh
nano ~/icarus-server/icarus-monitor.sh

[Paste the following]

#!/bin/bash

while true; do
# Check if the container is running
if ! docker ps -q -f "name=icarus-dedicated" > /dev/null; then
# If the container is not running, start it
cd ~/icarus-server && docker-compose up -d
fi
# Wait for 5 seconds before checking again
sleep 5
done

[Save and exit.]

[Step 2:]
Create cron jobs to ensure server starts at boot and monitors server status to ensure always running.


[Open Crontab]
crontab -e

[Paste the following two strings]

#Initialize-Icarus-Server
@reboot cd ~/icarus-server && docker-compose up -d
#Icarus-Server-Monitor
@reboot sleep 180 && nohup ~/check_icarus_server.sh &

[Save, exit, reboot]
= TROUBLESHOOTING =
________________________________________________________________

Now Nerodons github page for the icarus-dedicated docker container says there is a Known Issue regarding an out of memory error. I have not personally had this issue; but just in case here you go.

[Known Issues Out of memory error:]
Freeing x bytes from backup pool to handle out of memory and Fatal error: [File: Unknown] [Line: 197] \nRan out of memory allocating 0 bytes with alignment 0\n but system has enough memory.

[Solution:] Increase maximum number of memory map areas (vm.max_map_count) tested with 262144

[temporary:]
sysctl -w vm.max_map_count=262144[/b]
[permanent:]
echo "vm.max_map_count=262144" >> /etc/sysctl.conf && sysctl -p

________________________________________________________________
= NOTES =
Successful Server Setup:

SOURCE:]nerodon/icarus-dedicated[hub.docker.com]


Using this process, I successfully set up a standard 8-player dedicated server for my family to play on.

Challenges with Customizing Server Settings:

Despite knowing the server directory(?),

/home/steam/.wine/drive_c/icarus/Saved/Config/WindowsServer/ServerSettings.ini

I haven't been able to effectively customize server settings beyond server name, password, and admin password.

Examples of settings I struggle with:
Increasing player count from 8 to 20.
Adjusting server timeout and lobby settings.

Acknowledgment of Personal Knowledge Gap:

I recognize this is due to my own lack of understanding.
I'm seeking guidance on how to make these customizations persist.

MOST IMPORTANT!:
I use Arch... BTW! ;)
38 Comments
AlphaObeisance  [author] Feb 1 @ 10:15am 
@nzeu no problem. I should probably update this guide as I've learned a lot more about Linux and SysAdmin since then so there are optimizations to be made; but I've been running my ICARUS server like this ever since and it's done me well.
nzeu Jan 31 @ 11:38pm 
Thank you for the guide kind sir. I've been setting up a headless VM for the server and it has been quite the ride, this saves me a lot of additional headache.
47 - 1 Jan 7 @ 7:23pm 
Why don't you have periodic server restarts to clean up and or back up? and wouldnt checking and auto running the server every 5 seconds interrupt bringing it down for editing?
Karm Jan 5 @ 3:24am 
So in conclusion:
- Your yaml-file only works with docker compose up (use the flag -d to detach from stdout, but if can be done later. I like to watch the output a bit before pressind 'd' to detach)
- The volumes are stored in the working directories of 'docker compose': Use docker info to see the Docker Root Dir
- In my case (Ubuntu Server 24.04 LTS) Working Root Dir: /var/lib/docker. That means that the savefiles are in /var/lib/docker/volumes/data/_data/Saved/PlayerData/DedicatedServer#

To-Do:
- Figure out if I can change the docker working dir to the Home-folder. Just to be able to save files in a better spot, with Wine32 actually working. But it doesn't feel important, not sure if I will ever be bothered.
Karm Jan 5 @ 3:24am 
After much much trial and error:
- I also looked at this Tutorial [pimylifeup.com]
- compose.yaml file is only used with docker compose , but you are using docker run so your yaml-file doesn't do anything.
- Your onliner worked, but docker compose did not. Why?
- The mounted folders cannot be defined to anything other than game: or data: , if I used anything else then Wine32 would not run properly in the docker container.
Karm Jan 4 @ 2:55pm 
Btw, for server settings: Look in the folder...

~/icarus-server/data/Saved/Config/WindowsServer/ServerSettings.ini

It's one of the two Docker mounts.
Karm Jan 4 @ 2:48pm 
Hey. Great tutorial. And so I needed to start getting used to docker for my Ubuntu Server.

I succeeded in running it once without the yaml file. All was find, but they wanted to change difficulty and I couldn't find the settings...

So I did it proper.

*Suddenly, it did not work*

After a while I found "no Wine32"... And after a long time I saw the issue, I think. I don't have an X-server, the installation is trying to create windows and tray icons first time but failing.

Any ideas?
RFC1920 Jan 4 @ 1:22pm 
vim kicks nano's ass. vim kicked nano's granddad pico's ass, too :)
Grolnok the Omnivore Dec 9, 2025 @ 1:55pm 
Improved instructions if there is ever an issue updating (Seems common for me, Ubuntu - 24.04.3 LTS)


(make sure the server is currently online)

1.) Cd to folder (cd icarus-server/)
2.) Remove the .acf file locking SteamCMD from updating:
From outside the container:
docker exec -it icarus-dedicated rm -f /game/icarus/steamapps/appmanifest_2089300.acf

3.) Restart the server
docker-compose down
docker-compose up -d

Logs if needed
docker logs -f icarus-dedicated
AlphaObeisance  [author] Dec 9, 2025 @ 12:33pm 
I appreciate your kind words Mr.Muffin. I'm glad this guide is still useful! No sooner than I built another server after speaking with John, my workstation's motherboard crapped out on me haha so I'm just kind of sittin idle while I wait.

Happy gamin