Run a Deadworks server (Docker)
Run a Deadworks server on Linux in a Docker container. On Windows, see 1. Run a server instead.
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
27015open
Installing the server
-
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 -
Edit
.envand set the Steam login:STEAM_USERNAME=myaccount
STEAM_PASSWORD=mypassword -
Start the server:
docker compose up -d -
Follow the log until it shows
AuthStatusasOK. The first start downloads about 35 GB.docker compose logs -f -
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.
| Folder | Contents |
|---|---|
plugins | Plugin .dll files |
configs | deadworks.jsonc, plugin configs, server.cfg, and your admins and bans (permissions/, penalties/) |
maps | Custom map .vpk files |
logs | The admin action log (admin/) |
Windows paths used elsewhere in these docs map to these folders:
| Windows | Docker |
|---|---|
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.
| Setting | Example | Description |
|---|---|---|
STEAM_USERNAME | myaccount | Steam account used to download the game. |
STEAM_PASSWORD | mypassword | Password for that account. |
SERVER_NAME | My Server | Server name. |
SERVER_PORT | 27015 | Game port (UDP). |
SERVER_MAP | dl_midtown | Starting map. |
SERVER_PASSWORD | secret | Password required to join. Empty for none. |
RCON_PASSWORD | secret | Remote Console (RCON) password. Required only for remote RCON. |
EXTRA_ARGS | -ip 1.2.3.4 | Additional command-line parameters. |
AUTO_UPDATE | 1 | Check for game updates on start. 0 to disable. |
DEADWORKS_VERSION | latest | latest, a release such as v0.4.16, or image to use the version included in the image. |
PUID, PGID | 1000 | Owner 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.
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:
- Set
RCON_PASSWORDin.env. - Uncomment the
tcpport incompose.yaml. - 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
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.
-
Download
compose.multi.yamlascompose.yaml:curl -fsSL -o compose.yaml https://raw.githubusercontent.com/Deadworks-net/deadworks/main/docker/compose.multi.yaml -
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
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
| Command | Description |
|---|---|
docker compose up -d | Start the server, or apply changes to .env. |
docker compose down | Stop the server. |
docker compose restart | Restart and update. |
docker compose logs -f | Follow the log. |
docker compose ps | Show status. healthy means the server is answering queries. |
docker compose down -v | Stop 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.
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.