Skip to main content

Run a Deadworks server (Docker)

Run a Deadworks server on Linux in a Docker container. On Windows, see 1. Run a server instead.

note

Deadlock has no Linux dedicated server. The image runs the Windows server under Wine.

Requirements​

  • 64-bit Linux with Docker and Docker Compose
  • Storage: 40 GB
  • A Steam account that owns Deadlock, used to download the game
  • UDP port 27015 open

Installing the server​

  1. Create a folder and download the compose file and the example settings:

    mkdir deadworks && cd deadworks
    curl -fsSLO https://raw.githubusercontent.com/Deadworks-net/deadworks/main/docker/compose.yaml
    curl -fsSL -o .env https://raw.githubusercontent.com/Deadworks-net/deadworks/main/docker/.env.example
  2. Edit .env and set the Steam login:

    STEAM_USERNAME=myaccount
    STEAM_PASSWORD=mypassword
  3. Start the server:

    docker compose up -d
  4. Follow the log until it shows AuthStatus as OK. The first start downloads about 35 GB.

    docker compose logs -f
  5. Connect from the Deadlock console:

    connect <server ip>:27015

Steam Guard​

With the mobile authenticator, approve the login on your phone when the container starts.

With email codes, log in once by hand:

docker compose run --rm deadworks login

If STEAM_PASSWORD is empty, this command shows a QR code to scan with the Steam mobile app instead.

Files​

Docker creates these folders next to compose.yaml. They hold everything that is yours, so back them up. The Docker volumes hold only the game and the saved Steam login. You can download and enter those again.

FolderContents
pluginsPlugin .dll files
configsdeadworks.jsonc, plugin configs, server.cfg, and your admins and bans (permissions/, penalties/)
mapsCustom map .vpk files
logsThe admin action log (admin/)

Windows paths used elsewhere in these docs map to these folders:

WindowsDocker
game/bin/win64/managed/plugins/plugins/
game/bin/win64/configs/configs/
game/bin/win64/logs/logs/

Settings​

Settings are read from .env. Run docker compose up -d to apply changes.

SettingExampleDescription
STEAM_USERNAMEmyaccountSteam account used to download the game.
STEAM_PASSWORDmypasswordPassword for that account.
SERVER_NAMEMy ServerServer name.
SERVER_PORT27015Game port (UDP).
SERVER_MAPdl_midtownStarting map.
SERVER_PASSWORDsecretPassword required to join. Empty for none.
RCON_PASSWORDsecretRemote Console (RCON) password. Required only for remote RCON.
EXTRA_ARGS-ip 1.2.3.4Additional command-line parameters.
AUTO_UPDATE1Check for game updates on start. 0 to disable.
DEADWORKS_VERSIONlatestlatest, a release such as v0.4.16, or image to use the version included in the image.
PUID, PGID1000Owner of the files in plugins, configs, maps and logs.

server.cfg​

Other cvars go in configs/server.cfg, one per line. The server runs the file on every start.

note

Cheat cvars such as sv_cheats are reset on map load and have no effect in server.cfg. Set them from the console.

Console​

The next steps run commands in the server console. With Docker, run a command:

docker compose exec deadworks console status

Open an interactive console (Ctrl+D to exit):

docker compose exec deadworks console

Remote RCON​

RCON uses TCP on the game port. compose.yaml doesn't expose it by default. To enable it:

  1. Set RCON_PASSWORD in .env.
  2. Uncomment the tcp port in compose.yaml.
  3. Run docker compose up -d.

Updating​

The container updates the game and Deadworks when it starts. Restart it to update:

docker compose restart

To update the image:

docker compose pull
docker compose up -d
note

A game update can break Deadworks until a new version is released. The log shows Deadworks <version> does not support Deadlock build <build>. The container checks for a new release every 10 minutes and restarts the server when one is available.

Multiple servers​

Servers on the same machine share one copy of the game. Each additional server uses about 1 GB.

  1. Download compose.multi.yaml as compose.yaml:

    curl -fsSL -o compose.yaml https://raw.githubusercontent.com/Deadworks-net/deadworks/main/docker/compose.multi.yaml
  2. Start the servers:

    docker compose up -d

The file defines two servers, one and two. To add another, copy a block, change its name and port, and add the name under volumes: at the end of the file.

Each server has its own folders (one/plugins, one/configs, one/logs). All servers share maps. Use the server name in commands:

docker compose exec two console status
docker compose logs -f one
note

The container updates the game only while no server is using it. Restart all servers together with docker compose restart to update.

Using existing game files​

To use a Windows copy of Deadlock already on the machine, leave STEAM_USERNAME empty and replace the steam:/steam volume in compose.yaml:

- /path/to/Deadlock:/steam/game:ro

Firewall​

Open the game port in the machine's firewall. With ufw:

sudo ufw allow 27015/udp

Useful commands​

CommandDescription
docker compose up -dStart the server, or apply changes to .env.
docker compose downStop the server.
docker compose restartRestart and update.
docker compose logs -fFollow the log.
docker compose psShow status. healthy means the server is answering queries.
docker compose down -vStop the server and delete the downloaded game.

Troubleshooting​

download failed (see above). Check STEAM_USERNAME/STEAM_PASSWORD​

Check the login in .env. If the account uses email Steam Guard, see Steam Guard.

note

The container waits 10 minutes before trying again to avoid Steam rate limits.

no game files in /steam/game and STEAM_USERNAME is not set​

Set STEAM_USERNAME in .env, or see Using existing game files.

Deadworks does not support Deadlock build​

See Updating. No action is needed.

game files are in use by another server; skipping the update check​

Occurs when multiple servers share the game files. Restart all of them together to update.

Server is healthy but players cannot connect​

Check that UDP port 27015 is open on the machine and in your hosting provider's firewall.

Permission denied in plugins or configs​

Set PUID and PGID in .env to the output of id -u and id -g.

Server is not listed in the server browser​

Check that unlisted is not true under serverbrowser in configs/deadworks.jsonc.

Next​

2. Install plugins. Copy plugins into the plugins folder.