bolt Valebyte VPS from $4/mo — NVMe, 60s deploy.

Get a VPS arrow_forward

Source Dedicated Server (SRCDS) Setup: TF2, CS:S and GMod on Linux

calendar_month July 06, 2026 schedule 3 min read visibility 13 views
person
Valebyte Team
Source Dedicated Server (SRCDS) Setup: TF2, CS:S and GMod on Linux
summarize

TL;DR

  • SRCDS installs through SteamCMD with one command per game: app 232250 (TF2), 232330 (CS:S), 4020 (Garry's Mod).
  • Since 2018 public servers require a free GSLT token from steamcommunity.com/dev/managegameservers — without it players cannot find you.
  • Source is single-thread bound: per-core CPU speed matters far more than core count; 2 fast cores and 4 GB RAM run a full 24-slot server.
  • Open UDP/TCP 27015 (and 27020 for SourceTV); run the server as a non-root user under systemd for auto-restart.
  • A $25–59/mo dedicated box hosts several Source servers at once — the guide includes a working unit file.

A Source Dedicated Server (SRCDS) still powers Team Fortress 2, Counter-Strike: Source, Garry's Mod and every other Source-engine game, and in 2026 the setup is refreshingly stable: SteamCMD, one download command, a GSLT token, a systemd unit — done. The engine's real quirk is hardware-shaped: Source is single-thread bound, so a cheap machine with high per-core clocks beats an expensive many-core box every time. Here is the complete working setup, commands included.

What SRCDS needs from hardware

The Source engine simulates the world on one main thread. More cores do not make one server faster — they let you run more servers. Practical sizing from servers we host:

  • One 24-slot TF2/CS:S server: 2 cores at 3.5 GHz+, 2–4 GB RAM, any SSD. A $25–35/mo box is plenty.
  • GMod with heavy addons: RAM is the constraint — Wiremod/DarkRP servers eat 4–8 GB; disk grows with the addon collection.
  • A small community (3–5 game servers): one 6-core machine with high clocks, e.g. a Xeon-E 2136 (3.3–4.5 GHz) with 32 GB — $59/mo in our dedicated catalog — runs them all with room for a Mumble/TeamSpeak instance.

Latency matters more than throughput: a Source tick is small, but players feel every millisecond. Put the server where the players are — our stock covers Frankfurt, Warsaw, London, Chicago, Singapore and Sydney among 30+ cities.

Step 1: user and SteamCMD

sudo useradd -m -s /bin/bash srcds
sudo -iu srcds
mkdir ~/steamcmd && cd ~/steamcmd
curl -sSL https://steamcdn-a.akamaihd.net/client/installer/steamcmd_linux.tar.gz | tar xz
# 32-bit libs are required on a 64-bit host (Debian/Ubuntu):
sudo dpkg --add-architecture i386 && sudo apt update
sudo apt install -y lib32gcc-s1 lib32stdc++6

Step 2: install the game server

One command per game — only the app ID changes:

# Team Fortress 2
./steamcmd.sh +force_install_dir ~/tf2 +login anonymous +app_update 232250 validate +quit
# Counter-Strike: Source
./steamcmd.sh +force_install_dir ~/css +login anonymous +app_update 232330 validate +quit
# Garry's Mod
./steamcmd.sh +force_install_dir ~/gmod +login anonymous +app_update 4020 validate +quit

The TF2 download is ~15 GB, CS:S ~5 GB, GMod ~4 GB before addons. Re-running the same command updates the server — you will need it on every game patch day.

rocket_launch Quick pick

Need a dedicated server?

Compare prices from top providers. Configure and order in minutes.

Browse dedicated servers arrow_forward

Step 3: GSLT token (mandatory for public servers)

Since 2018 Valve requires a Game Server Login Token for servers that appear in the public browser. It is free: log in at steamcommunity.com/dev/managegameservers, create a token with the game's app ID (440 for TF2, 240 for CS:S, 4000 for GMod — note these are the game IDs, not the dedicated-server IDs above), then pass it at launch with +sv_setsteamaccount YOURTOKEN. Without it your server runs but stays invisible to the server browser, and clients get "insecure server" warnings. One token per server instance.

Step 4: launch line and systemd

A typical TF2 launch:

~/tf2/srcds_run -game tf +sv_pure 1 +map cp_badlands +maxplayers 24 \
  -port 27015 +sv_setsteamaccount YOURTOKEN -autoupdate

Wrap it in systemd so crashes and reboots handle themselves — /etc/systemd/system/tf2.service:

[Unit]
Description=TF2 SRCDS
After=network.target

[Service]
User=srcds
WorkingDirectory=/home/srcds/tf2
ExecStart=/home/srcds/tf2/srcds_run -game tf +map cp_badlands +maxplayers 24 -port 27015 +sv_setsteamaccount YOURTOKEN
Restart=on-failure
RestartSec=10

[Install]
WantedBy=multi-user.target

Then sudo systemctl enable --now tf2. Firewall: open UDP and TCP 27015 (game + RCON) and UDP 27020 if you use SourceTV. Each additional server instance on the same machine takes the next port (27016, 27017…).

Performance notes that actually matter

  • Tickrate is fixed per game (66 for TF2/CS:S) — the "-tickrate 128" flag does nothing on these titles, despite what older guides claim.
  • fps_max 300 in server.cfg is a sane ceiling; uncapped server FPS burns CPU for zero gameplay benefit.
  • Watch single-core saturation, not load average. If top shows one core pinned at 100% during 24-player fights, you need faster cores, not more of them.
  • GMod: precache addons on disk, not at join. A workshop collection served via FastDL or the workshop system prevents 5-minute join times.
rocket_launch Quick pick

Need a dedicated server?

Compare prices from top providers. Configure and order in minutes.

Browse dedicated servers arrow_forward

Picking the box

For one community server, any modern 4-core with 3.5 GHz+ clocks works — see the game hosting hardware guide for the broader sizing logic. For a multi-server community, prioritize per-core clocks and RAM headroom; our FiveM article covers the same trade-off from the GTA side. Commands verified on Debian 12 and Ubuntu 24.04, July 2026.

support_agent
Valebyte Support
Usually replies within minutes
Hi there!
Send us a message and we'll reply as soon as possible.