Sign inSign up

mornedhels/icarus-server

By mornedhels

Updated about 2 months ago

ICARUS-Dedicated-Server with autoupdate and prospect cleanup (supervisord)

Image
8

50K+

mornedhels/icarus-server repository overview

ICARUS-Dedicated-Server

Docker Pulls Docker Stars Docker Image Size (tag) GitHub

GitHub

Docker image for the game ICARUS. The image is based on the steamcmd image and uses supervisor to handle startup, automatic updates and cleanup.

Environment Variables

VariableDefaultConstraintsDescriptionWIP
SERVER_NAMEICARUS ServerstringThe name of the server
SERVER_PASSWORDstringThe password for the server
SERVER_ADMIN_PASSWORDstringThe password for the admin login
SERVER_MAX_PLAYERS8integerMax allowed players
SERVER_PORT17777integerThe game port for the server
SERVER_QUERYPORT27015integerThe steam query port for the server
SERVER_IPstring (ipv4)Server IP for the server empty check (update cron)
SERVER_SHUTDOWN_IF_NOT_JOINED300.000000floatNumber of seconds until started prospect returns to lobby mode
SERVER_SHUTDOWN_IF_EMPTY60.000000floatNumber of seconds until server returns to lobby mode after last prospector left
SERVER_ALLOW_NON_ADMINS_LAUNCHTruebooleanAllows all prospectors to select prospect in lobby mode
SERVER_ALLOW_NON_ADMINS_DELETEFalsebooleanAllows all prospectors to delete prospects in lobby mode
SERVER_RESUME_PROSPECTTruebooleanAfter a server restart, resume last prospect
GAME_BRANCHpublicstringSteam branch of the ICARUS server
ASYNC_TASK_TIMEOUT60integerSets AsyncTaskTimeout in Engine.ini
PUID4711integerThe UID to run server as
PGID4711integerThe GID to run server as
UPDATE_CRONstring (cron format)Update game server files cron (eg. */30 * * * * check for updates every 30 minutes)
UPDATE_SKIPfalsebooleanSkips Update on container startup (but still runs with command or if server files not found
CLEANUP_CRONstring (cron format)Cleanup old prospects cron (checks if all players left the prospect)
CLEANUP_DAYS1integerCleanup older prospects than x days (checks if all players left the prospect)
CLEANUP_DELETE_BACKUPSfalsebooleanRemove backup files from pruned prospects
CLEANUP_PRUNE_FOLDERprunedstringFolder for cleaned prospects (relative to Prospects folder)
CLEANUP_EXCLUDESstringExclude pattern (regex) for cleanup cron eg. world1|world2
STEAM_API_KEY (DEPRECATED)stringSteamApi key to authorize requests (needed for empty server check)
STEAMCMD_ARGS--beta "$GAME_BRANCH" validatestringAdditional steamcmd args for the updater

⚠️: Work in Progress

Additional Information
  • During the update process, the container temporarily requires more disk space (up to 2x the game size).
Hooks
VariableDescriptionWIP
BOOTSTRAP_HOOKCommand to run after general bootstrap
UPDATE_PRE_HOOKCommand to run before update
UPDATE_POST_HOOKCommand to run after update

The scripts will wait for the hook to resolve/return before continuing.

⚠️: Work in Progress

Ports

PortDescription
17777/udpGame port
27015/udpSteam query port

Volumes

VolumeDescription
/home/icarus/drive_c/icarusServer config files and saves
/opt/icarusGame files (steam download path)

Note: By default the volumes are created with the UID and GID 4711 (that user should not exist). To change this, set the environment variables PUID and PGID.

  • CPU: min 2 CPU (preferred high single core performance)
  • RAM: > 8 GB (16 GB recommended)
  • Disk: ~20 GB
  • Docker Host*: Linux, macOS

*Windows is not supported (see #46)

Usage

Docker Compose
version: "3"
services:
  icarus:
    image: mornedhels/icarus-server:latest
    container_name: icarus
    hostname: icarus
    restart: unless-stopped
    stop_grace_period: 90s
    ports:
      - "17777:17777/udp"
      - "27015:27015/udp"
    volumes:
      - ./data:/home/icarus/drive_c/icarus
      - ./game:/opt/icarus
    environment:
      - SERVER_NAME=ICARUS Server
      - SERVER_PASSWORD=secret
      - SERVER_ADMIN_PASSWORD=evenmoresecret
      - SERVER_PORT=17777
      - SERVER_QUERYPORT=27015
      - PUID=4711
      - PGID=4711

Note: The volumes are created next to the docker-compose.yml file. If you want to create the volumes, in the default location (eg. /var/lib/docker) you can use the following compose file:

version: "3"
services:
  icarus:
    image: mornedhels/icarus-server:latest
    container_name: icarus
    hostname: icarus
    restart: unless-stopped
    stop_grace_period: 90s
    ports:
      - "17777:17777/udp"
      - "27015:27015/udp"
    volumes:
      - data:/home/icarus/drive_c/icarus
      - game:/opt/icarus
    environment:
      - SERVER_NAME=ICARUS Server
      - SERVER_PASSWORD=secret
      - SERVER_ADMIN_PASSWORD=evenmoresecret
      - SERVER_PORT=17777
      - SERVER_QUERYPORT=27015
      - PUID=4711
      - PGID=4711

volumes:
  data:
  game:

Commands

  • Force Update:
    docker compose exec icarus supervisorctl start icarus-force-update
    
  • Load Prospect (⚠️: Work in Progress):
    docker compose exec icarus ./icarus-commands loadProspect <ProspectName>
    

Known Issues

  • OOM: Server logs 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) on docker host. Tested with 262144
      temporary:
        sysctl -w vm.max_map_count=262144
      
      permanent:
        echo "vm.max_map_count=262144" >> /etc/sysctl.conf && sysctl -p
      

Tag summary

Content type

Image

Digest

sha256:a3d932c10

Size

971.8 MB

Last updated

over 1 year ago

docker pull mornedhels/icarus-server