Sign inSign up

k4rian/srcds

By k4rian

•Updated over 2 years ago

A base Docker image for Valve's Source Dedicated Server (srcds).

Image
Networking
0

1.7K

k4rian/srcds repository overview

docker-srcds logo

A base Docker image for Valve's Source Dedicated Server⁠ (srcds) based on Debian⁠ (bookworm-slim) used to setup and run any Source Dedicated Server including Counter-Strike: Source (CSS), Left 4 Dead 1/2, Team Fortress 2, Garry's Mod and more.


Docker TagVersionPlatformDescription
latest⁠1.1amd64Base image
sftp⁠1.1amd64Base image with SFTP support
latest-buster⁠1.0amd64Base image (Buster) (Deprecated)
sftp-buster⁠1.0amd64Base image with SFTP support (Buster) (Deprecated)

⁠Environment variables

Some environment variables can be tweaked when creating a container to define the server application to interact with:

VariableDefault valueDescription
APPID232370Steam application identifier (used by steamcmd).
APPNAMEhl2mpGame name acronym (used by srcds).
STEAMACC_USERNAMEanonymous(Optional) Steam account username.
STEAMACC_PASSWORD(Optional) Steam account password (NOT recommended, see the section below).

Default values will setup a Half-Life 2: Deathmatch Dedicated Server.

⁠Steam account authentication

Some server applications require a valid Steam account in order for the files to be downloaded/updated and, in some cases, the corresponding game to be purchased/added on the said account.
The credentials can be provided using environment variables or a Docker secret (password only).

It is strongly recommended to create a new account (or use a secondary one) with a dedicated email and Steam Guard disabled. Do NOT use your main account!

See the Dedicated Servers List⁠ on the Valve Developer Wiki for more information about each server requirements.

The STEAMACC_USERNAME environment variable holds the Steam account username.

The (clear, unencrypted) Steam account password can be defined by:

  • Bind mount a text file containing the password into the container.

    • The mountpoint path has to be /run/secrets/srcds.
    • This is the recommended method. See the fourth example usage⁠ in the section below.
  • Using the STEAMACC_PASSWORD environment variable when creating the container.

    • This method is NOT recommended for production since all environment variables are visible via docker inspect to any user that can use the docker command.

⁠Startup script arguments

A convenient script has been added to interact with steamcmd and srcds in various ways. It will intercept the first passed argument and do the following:

  • -s|-start
    • Starts the server using srcds_run
    • Will fail if the server files haven't previously been downloaded
  • -u|-update
    • Downloads/updates the server files using steamcmd
  • -v|-validate
    • Downloads/updates and validate the server files using steamcmd
  • -to|takeown
    • Recursively changes ownership of all server files to the steam user
    • Useful if you have altered any file permission outside the container file system
  • -c|-steamcmd
    • Invokes steamcmd directly without interacting with srcds
  • [none]
    • Downloads/updates the server files if they haven't previously been downloaded
    • Starts the server in auto-update mode (using -autoupdate, -steam_dir and -steamcmd_script arguments)

⁠Usage

Example 1:
Setup and run a Counter-Strike: Source public server:
— Since no recognized argument is passed to the startup script, the server will start using the auto-update feature and also auto-restart if it crashes

docker run -d \
  --name css-serv \
  --net=host \
  -e APPID=232330 \
  -e APPNAME=cstrike \
  -i k4rian/srcds \
  -console \
  -secure \
  -port 27015 \
  -maxplayers 10 \
  +map de_dust2

Example 2:
Download and validate the Left 4 Dead 2 Dedicated Server files to a named volume for further use:
— The container will be deleted immediately after the task is completed
— Notice the -validate argument passed to the startup script

docker run --rm \
  -e APPID=222860 \
  -e APPNAME=left4dead2 \
  -v l4d2serv_data:/home/steam/gameserver \
  -i k4rian/srcds \
  -validate

Now we can create a named container to start the server (in co-op mode) using the previously created volume:
— Since the -start argument is given, the startup script won't trigger any update

docker run -d \
  --name l4d2serv \
  --net=host \
  -e APPID=222860 \
  -e APPNAME=left4dead2 \
  -v l4d2serv_data:/home/steam/gameserver \
  -i k4rian/srcds \
  -start \
  -console \
  -secure \
  -port 27015 \
  +map c1m1_hotel \
  +maxplayers 4

If we want to perform a manually update (without validating the files), we can use an ephemeral container to handle the task:
— The container will be deleted immediately after the task is completed
— Notice the -update argument passed to the startup script

docker run --rm \
  -e APPID=222860 \
  -e APPNAME=left4dead2 \
  -v l4d2serv_data:/home/steam/gameserver \
  -i k4rian/srcds \
  -update

Finally, if the server has permission issues with some files, we can use an ephemeral container again to recursively change ownership of all server files:
— The container will be deleted immediately after the task is completed
— Notice the -takeown argument passed to the startup script

docker run --rm \
  -v l4d2serv_data:/home/steam/gameserver \
  -i k4rian/srcds \
  -takeown

Example 3:
Setup and run a Team Fortress 2 Dedicated Server and store all the files inside a named volume created on the fly:
— The startup script will perform a update check (without validation) on each start
— You need a valid GSLT⁠ token to make the server reachable

docker run -d \
  --name tf2serv \
  --net=host \
  -e APPID=232250 \
  -e APPNAME=tf \
  -v tf2serv_data:/home/steam/gameserver \
  -i k4rian/srcds \
  -console \
  -secure \
  -timeout 0 \
  -port 27015 \
  +randommap \
  +maxplayers 24 \
  +sv_pure 1 \
  +sv_setsteamaccount {GSLT_TOKEN}

Example 4:
Setup and run a No More Room In Hell Dedicated Server using a valid Steam account:
— In this example, the password is stored in the secret.txt file located in the current working directory.
— The game has to be present on the Steam account or the installation will fail

docker run -d \
  --name nmrihserv \
  --net=host \
  -e APPID=317670 \
  -e APPNAME=nmrih \
  -e STEAMACC_USERNAME="{VALID_STEAM_USERNAME}" \
  -v "$(pwd)"/secret.txt:/run/secrets/srcds:ro \
  -v nmrihserv_data:/home/steam/gameserver \
  -i k4rian/srcds \
  -console \
  -secure \
  -maxplayers 8 \
  -port 27015 \
  +map nmo_broadway

⁠Using Compose

See compose/README.md⁠

⁠Common Issues

See COMMON_ISSUES.md⁠

⁠Manual build

Requirements:
— Docker >= 18.09.0
— Git (optional)

Like any Docker image the building process is pretty straightforward:

  • Clone (or download) the GitHub repository to an empty folder on your local machine:
git clone https://github.com/K4rian/docker-srcds.git .
  • Then run the following command inside the newly created folder:
docker build --no-cache -t k4rian/srcds:latest .

⁠License

MIT⁠

Tag summary

Content type

Image

Digest

sha256:57ad03acd…

Size

44.5 MB

Last updated

over 2 years ago

docker pull k4rian/srcds