Sign inSign up

mornedhels/icarus-server

By mornedhels

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