Skip to content

About

Enshrouded Dedicated Server with autoupdate (supervisord)

Resources

Stars

286 stars

Watchers

4 watching

Forks

Repository files navigation

Enshrouded-Dedicated-Server

Docker Pulls Docker Stars Docker Image Size (tag) GitHub

GitHub

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

Environment Variables

Variable Required Default Contraints Description WIP
SERVER_NAME Enshrouded Server string The name of the server ️
SERVER_SLOT_COUNT 16 integer (1-16) Max allowed concurrent players
SERVER_TAGS [] JSON array of strings Server filter tags; unset or empty preserves existing tags, [] clears them
SERVER_QUERYPORT 15637 integer The steam query port for the server
SERVER_IP 0.0.0.0 string (ipv4) Server IP for internal network configuration
SERVER_SAVE_DIR ./savegame string Folder for savegames (relative and absolute paths are supported)
SERVER_LOG_DIR ./logs string Folder for logs (relative and absolute paths are supported)
SERVER_VOICE_CHAT_MODE Proximity Proximity | Global This setting allows switching between the proximity voice chat and the global, server-wide voice chat
SERVER_ENABLE_VOICE_CHAT false boolean (true, false) This setting allows switching voice chat completely off or enabling it.
SERVER_ENABLE_TEXT_CHAT false boolean (true, false) This setting allows switching text chat completely off or enabling it.
PUID 4711 integer The UID to run server as (file permission)
PGID 4711 integer The GID to run server as (file permission)
UPDATE_CRON string (cron format) Update game server files cron (eg. */30 * * * * check for updates every 30 minutes)
UPDATE_CHECK_PLAYERS false boolean (true, false) Skip updates when players are connected or their status cannot be determined
BACKUP_CRON string (cron format) Backup game server files cron (eg. */15 * * * * backup saves every 15 minutes) - don't set cron under 10 minutes
BACKUP_DIR ./backups string Folder for backups (relative and absolute paths are supported)
BACKUP_MAX_COUNT 0 integer Number of backups to keep (0 means infinite)
RESTART_CRON string (cron format) Restart game server cron (eg. 0 3 * * * restart server daily at 3)
RESTART_CHECK_PLAYERS false boolean (true, false) Skip restarts when players are connected or their status cannot be determined
GAME_BRANCH public string Steam branch (eg. testing) of the Enshrouded server
STEAMCMD_ARGS validate string Additional steamcmd args for the updater
SERVER_PASSWORD ⚠️DEPRECATED string ⚠️ DEPRECATED: The password for the server (Enshrouded ignores this value - use Server Roles instead)
Server Roles further informations can be found following the link
Server Difficulty further informations can be found following the link

The listed SERVER_ variables map to server configuration fields. Difficulty variables prefixed with SERVER_GS_ are automatically mapped as described in the difficulty guide (see Enshrouded Docs).

⚠️: Work in Progress

Additional Information

  • During the update process, the container temporarily requires more disk space (up to 2x the game size).
  • When UPDATE_CHECK_PLAYERS or RESTART_CHECK_PLAYERS is true, the corresponding operation requires a successful empty-player check. Query failures (including timeouts or missing Python dependencies) log a warning and defer the operation unless Supervisor explicitly confirms that the game process is stopped (STOPPED, EXITED, or FATAL). This exception allows initial installation and stopped-server updates. Supervisor errors or transitional states do not count as a stopped server. Set the corresponding flag to false to disable player protection. If both deprecated variables STEAM_API_PUBLIC_IP and STEAM_API_KEY are set, the legacy behavior still enables player protection regardless of these flags.
  • Server role configuration can be done via the enshrouded_server.json file directly or the SERVER_ROLE_<index>_XYZ environment vars. The file is located in the game/server folder. More information can be found in the official documentation.

Server Tags

Set SERVER_TAGS to a JSON array of strings to help players find the server using filters in the Join menu:

environment:
  SERVER_TAGS: '["LookingForPlayers","English","BaseBuilding"]'

The game's default is []. Leaving the variable unset or empty preserves the current tags value in enshrouded_server.json; setting it to [] explicitly clears the tags. Invalid JSON or values other than an array of strings stop bootstrap with an error without changing the configuration.

Currently documented tags are LookingForPlayers, English, German, French, Italian, Japanese, Korean, Polish, Portuguese, Russian, Spanish, Thai, Turkish, Ukrainian, Chinese, Taiwanese, BaseBuilding, Exploration, and Roleplay. The script validates the array's structure rather than hard-coding this list.

Bans

Manage bans in-game through the Social tab, or stop the server before manually editing bannedAccounts in game/server/enshrouded_server.json. Preserve the game's existing entries and schema. There is no ban-management environment variable.

Hooks

Variable Description WIP
BOOTSTRAP_HOOK Command to run after general bootstrap
UPDATE_PRE_HOOK Command to run before update
UPDATE_POST_HOOK Command to run after update
BACKUP_PRE_HOOK Command to run before backup & cleanup
BACKUP_POST_HOOK Command to run after backup & cleanup
RESTART_PRE_HOOK Command to run before server restart
RESTART_POST_HOOK Command to run after server restart

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

⚠️: Work in Progress

Image Tags

Tag Virtualization Description
latest proton Latest image based on proton
<version> proton Pinned image based on proton (>= 1.x.x)
stable-proton proton Same as latest image
<version>-proton proton Pinned image based on proton
stable-wine wine Latest image based on wine
<version>-wine wine Pinned image based on wine
dev-proton proton Dev build based on proton
dev-wine wine Dev build based on wine
dev-wine-staging wine Dev build based on wine (staging branch)

Ports (default)

Port Description
15637/udp Steam query port

Volumes

Volume Description
/opt/enshrouded Game 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.

Recommended System Requirements

  • CPU: >= 6 cores
  • RAM: >= 16 GB
  • Disk: >= 30 GB (preferably SSD)

Official Docs

Usage

Docker

docker run -d --name enshrouded \
  --hostname enshrouded \
  --restart=unless-stopped \
  -p 15637:15637/udp \
  -v ./game:/opt/enshrouded \
  -e SERVER_NAME="Enshrouded Server" \
  -e UPDATE_CRON="*/30 * * * *" \
  -e PUID=4711 \
  -e PGID=4711 \
  mornedhels/enshrouded-server:latest

Docker Compose

services:
  enshrouded:
    image: mornedhels/enshrouded-server:latest
    container_name: enshrouded
    hostname: enshrouded
    restart: unless-stopped
    stop_grace_period: 90s
    ports:
      - "15637:15637/udp"
    volumes:
      - ./game:/opt/enshrouded
    # only add ntsync device if your kernel supports it (6.14 or newer)
    devices:
      - /dev/ntsync:/dev/ntsync
    environment:
      - SERVER_NAME=Enshrouded Server
      - UPDATE_CRON=*/30 * * * *
      - 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:

services:
  enshrouded:
    image: mornedhels/enshrouded-server:latest
    container_name: enshrouded
    hostname: enshrouded
    restart: unless-stopped
    stop_grace_period: 90s
    ports:
      - "15637:15637/udp"
    volumes:
      - game:/opt/enshrouded
    # only add ntsync device if your kernel supports it (6.14 or newer)
    devices:
      - /dev/ntsync:/dev/ntsync
    environment:
      - SERVER_NAME=Enshrouded Server
      - UPDATE_CRON=*/30 * * * *
      - PUID=4711
      - PGID=4711

volumes:
  game:

Security Hardening

For information on how to run the Enshrouded server more securely, please refer to the Security Hardening guide.

Backup

The image includes a backup script that creates a zip file of the last saved game state. To enable backups, set the BACKUP_CRON environment variable. To limit the number of backups, set the BACKUP_MAX_COUNT environment variable.

To restore a backup, stop the server and simply extract the zip file to the savegame folder and start the server up again. If you want to keep the current savegame, make sure to make a backup before deleting or overwriting the files.

Warning

Verify the permissions of the extracted files. The files should be owned by the user with the UID and GID set in the environment variables. If the image is running in privileged mode, the files will be automatically chowned to the given UID and GID.

Commands

  • Force Update:
    docker compose exec enshrouded supervisorctl start enshrouded-force-update
  • Reset Server Roles: (Restarts the whole docker container) ⚠️
    docker compose exec enshrouded supervisorctl start enshrouded-reset-roles
  • Restart Enshrouded Server: (can be used for periodic restarts)
    docker compose exec enshrouded supervisorctl restart enshrouded-server

Known Issues

  • The server doesn't start (not logging 'HostOnline' (up)!) or the update fails with following error:
    Error! App '2278520' state is 0x202 after update job.
    
    This means there is probably something wrong with your file permissions, or you don't have enough disk space left. Make sure the UID and GID are correct and the files are owned by the correct user.
  • The (auto-)update fails with the following error:
    Error! App '2278520' state is 0x6 after update job.
    
    Officially this means the updater has no connection to the content servers.
    But there could also be something wrong with the steam appmanifest (#119). To fix this, you can use the force update command.

About

Enshrouded Dedicated Server with autoupdate (supervisord)

Resources

Stars

286 stars

Watchers

4 watching

Forks

Releases

Used by

Contributors

Languages