How to Install a Counter-Strike 2 Dedicated Server on Ubuntu 24.04 VPS
Running your own Counter-Strike 2 dedicated server puts you in full control of tick rate, map rotation, plugin stack, and who you play with. Whether you are hosting a low-latency public server for your Discord, running competitive 5v5 scrims with custom configs, or building a community around workshop maps and retake modes, a self-hosted CS2 server on a properly sized VPS will outperform almost anything Valve matchmaking can give you. This guide walks you through provisioning SteamCMD, installing the CS2 dedicated server (app id 730), generating a Game Server Login Token (GSLT), layering Metamod:Source and CounterStrikeSharp for plugins, and running everything under systemd so it survives reboots.
Want a production-ready CS2 host with DDoS protection baked in? Our CloudCore Business VPS ships with 4 vCPU, 8 GB RAM, NVMe storage, and a low-latency European network — exactly what a 10-slot 128-tick CS2 server needs. Deploy in minutes and follow this guide.
Table of Contents
steam UserWhy Self-Host a Counter-Strike 2 Server?
Self-hosting solves problems official matchmaking cannot. On Valve's servers you get a fixed 64-tick experience, no choice of region peers, and no ability to run plugins or custom maps. With your own dedicated box you decide everything:
- Higher tick rate and lower latency — Run 128-tick (or experiment with Valve's sub-tick internals) on a VPS located in the same region as your players. A well-peered European or North American VPS regularly delivers sub-20 ms ping for your entire group, which makes a noticeable difference on peekers-advantage-sensitive duels.
- Custom public and competitive modes — Host a casual 5v5 competitive server, a 10-player retake server, a surf or bhop community, or a practice range. Your rules, your maps, your config.
- Workshop maps and rotations — Subscribe to any Steam Workshop CS2 map collection, auto-download maps for connecting clients, and rotate through them on timer or vote.
- Plugin ecosystem — Layer Metamod:Source and CounterStrikeSharp to run admin menus, stats, retake logic, !ws knife/glove commands, warmup tooling, pause/unpause, coaching slots, GOTV demo uploaders, and more.
- Match orchestration — Drop in MatchZy or Get5 to turn any server into a fully automated scrim/pug/league host with knife rounds, side switches, pause limits, stats JSON, and demo uploads.
- Privacy and password control — Private slot for your friends, SourceTV for spectators, no Valve anti-cheat bans leaking your gameplay data to third parties.
- Predictable, flat-rate cost — A CS2 server runs comfortably on a single VPS for less than most people spend on Prime subscriptions and skins per month. No per-hour cloud billing surprises.
Use Cases at a Glance
| Use Case | Tick Rate | Slots | Suggested Plugins |
|---|---|---|---|
| Public community (MM-style) | 64 | 10-12 | Metamod + CSS + admin menu |
| Competitive 5v5 scrims | 128 | 12 (10 + 2 coach) | Metamod + CSS + MatchZy or Get5 |
| Retakes | 128 | 10 | Metamod + CSS + RetakesPlugin |
| DM / warmup / aim | 128 | 16 | Metamod + CSS + MultiAddonManager |
| Surf / KZ / bhop | 128 | 32 | Metamod + CSS + timer plugin |
System Requirements
CS2 is more demanding than CS:GO was. Budget accordingly:
- CPU: 4 vCPU with high single-thread performance. CS2's simulation is still largely single-thread-bound, so clock speed and IPC matter more than core count. Avoid oversubscribed shared CPU instances.
- RAM: 8 GB minimum for a single instance with workshop maps. The server itself uses 2-3 GB, but workshop map downloads, GOTV, and plugins chew through more over time.
- Disk: 50 GB NVMe. The CS2 dedicated server install is ~35 GB after updates. Demos and logs add up fast on an active server.
- Network: A stable, low-latency connection with at least 100 Mbps symmetric. CS2 uses only a few Mbps per player, but jitter and packet loss ruin the experience instantly. Pick a VPS region close to your players.
- OS: Ubuntu 24.04 LTS (this guide). Debian 12 works with minor changes.
Recommended Plan: CloudCore Business>
For a 10-slot 128-tick competitive CS2 server with plugins, workshop maps, and GOTV, we recommend our CloudCore Business VPS:>
- 4 vCPU cores (high-clock)
- 8 GB RAM
- 100 GB NVMe SSD
- 1 Gbps network with DDoS protection>
This leaves enough headroom for Metamod + CounterStrikeSharp + MatchZy, plus a second SourceTV relay if you want to stream casts without hurting server tick.
Prerequisites
Before you begin, make sure you have:
- A VPS running Ubuntu 24.04 LTS with root or sudo access
- SSH access to your server
- A Steam account to generate a Game Server Login Token (the account must have no VAC bans and must be at least Steam Guard enabled)
- Open UDP port 27015 on both your VPS firewall and any upstream provider firewall
- ~40 GB of free disk space for the CS2 install plus workshop maps
ssh root@your-server-ipStep 1: Update the System and Install Dependencies
Refresh the package index and install the 32-bit compatibility libraries SteamCMD and CS2 need. Even though CS2 is 64-bit, SteamCMD itself is 32-bit.
sudo dpkg --add-architecture i386
sudo apt update && sudo apt upgrade -y
sudo apt install -y \
curl wget tar unzip ca-certificates lib32gcc-s1 \
libncurses6:i386 libstdc++6:i386 libcurl4-gnutls-dev:i386 \
software-properties-common screen nano jqExpected output (abbreviated):
Setting up lib32gcc-s1 (13.2.0-...)
Setting up libcurl4-gnutls-dev:i386 (...)
...
0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.If the kernel was upgraded, reboot:
sudo rebootStep 2: Create a Dedicated steam User
Never run game servers as root. Create an unprivileged steam user — CS2 will live entirely inside its home directory.
sudo useradd -m -s /bin/bash steam
sudo passwd steamSwitch to the new user:
sudo -iu steamFrom now on, all SteamCMD and CS2 commands in this guide run as steam unless stated otherwise.
Step 3: Install SteamCMD
SteamCMD is Valve's command-line client that downloads and updates any Steam game or dedicated server. It logs in anonymously for server installs — no personal Steam credentials required.
Create a directory structure and download the Linux tarball:
mkdir -p ~/steamcmd ~/cs2 ~/backups
cd ~/steamcmd
curl -sSL https://steamcdn-a.akamaihd.net/client/installer/steamcmd_linux.tar.gz | tar -xzVerify the binary is present and runnable:
./steamcmd.sh +quitExpected output:
Redirecting stderr to '/home/steam/Steam/logs/stderr.txt'
[ 0%] Checking for available updates...
[----] Verifying installation...
...
Loading Steam API...OK
Steam>The first run downloads the latest SteamCMD updates, then exits cleanly. You now have ~/steamcmd/steamcmd.sh ready to use.
Step 4: Download the CS2 Dedicated Server (App ID 730)
Counter-Strike 2 and its dedicated server share app id 730. Unlike CS:GO which used a separate app id (740) for the server, CS2 installs the dedicated server through the same app id as the client, using anonymous Steam login.
Run SteamCMD and install CS2 into ~/cs2:
~/steamcmd/steamcmd.sh \
+force_install_dir /home/steam/cs2 \
+login anonymous \
+app_update 730 validate \
+quitExpected output:
Logging in user 'anonymous' to Steam Public...OK
Waiting for client config... OK
Waiting for user info... OK
Update state (0x3) reconfiguring, progress: 0.00 (0 / 0)
Update state (0x5) validating, progress: 0.12 (...)
Update state (0x61) downloading, progress: 14.22 (5234567890 / 36812345678)
...
Success! App '730' fully installed.The first install downloads ~35 GB and usually takes 5-20 minutes depending on your VPS bandwidth. Subsequent app_update runs only download the delta for the latest patch.
Confirm the server binary is in place:
ls -lh ~/cs2/game/bin/linuxsteamrt64/cs2You should see the cs2 executable (tens of MB). This is the process you will launch.
Step 5: Generate a GSLT (Game Server Login Token)
A Game Server Login Token (GSLT) lets your dedicated server appear on the official server browser and accept players connecting through the internet rather than only LAN. Without a GSLT, only LAN clients can connect.
730
- Memo: e.g. cs2-server-01
You can create up to 1000 tokens per Steam account. If the server violates Valve's rules (cheat hosting, abuse) the token gets revoked, not your main account.
You will pass this token to CS2 with +sv_setsteamaccount YOUR_TOKEN in the start script.
Step 6: Create the Start Script and server.cfg
Now wire up a reusable launch script and the canonical server.cfg that CS2 executes after each map change.
server.cfg
mkdir -p ~/cs2/game/csgo/cfg
nano ~/cs2/game/csgo/cfg/server.cfgPaste a solid public competitive baseline:
// ---- Server identity ---- hostname "My CS2 Server | EU 128t" sv_password "" // "" = public rcon_password "CHANGE_ME_LONG_RANDOM_STRING" sv_contact "[email protected]" sv_region 3 // 3 = Europe, 0 = US East, 1 = US West, 5 = Asia// ---- Networking / rate ---- sv_minrate 786432 sv_maxrate 0 sv_mincmdrate 64 sv_maxcmdrate 128 sv_minupdaterate 64 sv_maxupdaterate 128 fps_max 400
// ---- Gameplay ---- mp_autoteambalance 1 mp_limitteams 2 mp_friendlyfire 0 mp_roundtime 1.92 mp_roundtime_defuse 1.92 mp_freezetime 15 mp_maxrounds 24 mp_overtime_enable 1 mp_overtime_maxrounds 6 mp_warmup_pausetimer 0
// ---- GOTV / demos ---- tv_enable 1 tv_delay 105 tv_port 27020 tv_maxclients 10 tv_autorecord 1
// ---- Logging ---- log on sv_logfile 1 sv_logecho 1 sv_logflush 0
Save and exit (Ctrl+O, Enter, Ctrl+X).
Start script
nano ~/cs2/start.sh#!/usr/bin/env bashCS2 dedicated server launcher
cd /home/steam/cs2/game/bin/linuxsteamrt64GSLT="PASTE_YOUR_GSLT_HERE" API_KEY="" # optional Steam Web API key for workshop PORT=27015 TVPORT=27020 SLOTS=12 MAP="de_mirage"
exec ./cs2 -dedicated \ -console \ -usercon \ +ip 0.0.0.0 \ -port ${PORT} \ +tv_port ${TVPORT} \ +maxplayers ${SLOTS} \ +game_type 0 +game_mode 1 \ +map ${MAP} \ +sv_setsteamaccount ${GSLT} \ +sv_logfile 1 \ +sv_logecho 1 \ -tickrate 128 \ -authkey ${API_KEY}
Make it executable and replace the placeholders:
chmod +x ~/cs2/start.shKey flags explained:
-dedicated— run headless, no client window-usercon— enable RCON over the game port-tickrate 128— CS2 respects this flag on community servers+game_type 0 +game_mode 1— classic competitive (5v5)+sv_setsteamaccount— your GSLT from Step 5-authkey— optional Steam Web API key from steamcommunity.com/dev/apikey, required for some workshop features and MatchZy uploads
screen session to confirm everything works:screen -S cs2
~/cs2/start.shYou should see map load logs ending with something like:
Server is hibernating
Connection to Steam servers successful.
Public IP is X.X.X.X.
Assigned anonymous gameserver Steam ID [G:1:123456].
GS Token is Valid.
VAC secure mode is activated.Detach the screen with Ctrl+A D. Reattach later with screen -r cs2. We will replace screen with systemd in Step 12.
Step 7: Open the Firewall (UDP 27015)
CS2 uses UDP (not TCP) for game traffic. The default port is 27015, with GOTV on 27020. If you have UFW enabled, allow them:
# Run as root / sudo user, not as steam
exit # drop out of the steam shell first
sudo ufw allow 27015/udp comment "CS2 game"
sudo ufw allow 27020/udp comment "CS2 GOTV"
sudo ufw reload
sudo ufw statusExpected output:
Status: active
To Action From -- ------ ---- 22/tcp ALLOW Anywhere 27015/udp (CS2 game) ALLOW Anywhere 27020/udp (CS2 GOTV) ALLOW Anywhere
If your VPS provider has an upstream firewall (Hetzner Cloud firewall, OVH edge filter, DM network ACLs), open the same UDP ports there as well. Connecting players will get "Server not responding" if any layer in between drops UDP.
Verify from outside the server — from your local machine:
nc -u -v -z your-server-ip 27015UDP scans are not 100% reliable, so the definitive test is joining the server in the CS2 client:
Open the console (~) in CS2:
connect your-server-ip:27015Step 8: Install Metamod:Source
Metamod:Source is the plugin loader that sits between the Source 2 engine and higher-level frameworks. Almost every CS2 plugin (including CounterStrikeSharp) needs Metamod first.
Switch back to the steam user:
sudo -iu steamDownload the latest Metamod:Source 2.0 dev build for CS2 (check https://www.sourcemm.net/downloads.php?branch=dev for the newest version):
cd /tmp
wget https://mms.alliedmods.net/mmsdrop/2.0/mmsource-2.0.0-git1333-linux.tar.gz
tar -xzf mmsource-2.0.0-git1333-linux.tar.gz -C ~/cs2/game/csgo/Metamod needs to be loaded by the engine. Edit the gameinfo:
nano ~/cs2/game/csgo/gameinfo.giFind the FileSystem -> SearchPaths block and add the Metamod line before the existing Game csgo line:
FileSystem { SearchPaths { Game_LowViolence csgo_lv // Perfect World content overrideGame csgo/addons/metamod // <-- ADD THIS LINE Game csgo Game csgo_imported Game csgo_core Game core
Mod csgo AddonRoot csgo_addons } }
Save and exit. Restart the CS2 server and check Metamod loads:
screen -r cs2 # or restart the systemd service once you have one
In the CS2 console:
meta versionExpected output:
Metamod:Source version 2.0.0-git1333
Plugin interface version: 16:14
SourceHook version: 5:5
Loaded as: Source Engine plugin
Compiled on: ...
Built from: https://github.com/alliedmodders/metamod-source/commit/...If meta version returns "Unknown command", the gameinfo edit did not apply — double-check indentation and the path.
Step 9: Install CounterStrikeSharp for C# Plugins
CounterStrikeSharp (CSS) is the modern plugin framework for CS2. It lets developers write plugins in C# (.NET) instead of SourcePawn, which is why almost every major community plugin for CS2 — admin menus, MatchZy, retakes, GOTV uploaders — ships as a CSS plugin.
Download the latest CSS runtime release (pick with-runtime on Linux) from https://github.com/roflmuffin/CounterStrikeSharp/releases:
cd /tmp
wget https://github.com/roflmuffin/CounterStrikeSharp/releases/latest/download/counterstrikesharp-with-runtime-build-XXX-linux-XXXXXXXX.zip \
-O css.zip
unzip css.zip -d ~/cs2/game/csgo/This creates:
~/cs2/game/csgo/addons/counterstrikesharp/— framework core~/cs2/game/csgo/addons/metamod/counterstrikesharp.vdf— Metamod registration
meta list
css_plugins listExpected output:
Listing 1 plugin:
[01] CounterStrikeSharp (1.0.XXX) by roflmuffinDrop-in plugins
Plugin DLLs go into ~/cs2/game/csgo/addons/counterstrikesharp/plugins/<PluginName>/<PluginName>.dll. A handful worth installing right away:
- CS2-SimpleAdmin — admin menu, bans, kicks, mutes, backed by MySQL or SQLite.
- MultiAddonManager — forces clients to download multiple workshop addons (required for most custom map servers).
- CS2-Retakes — retakes gamemode with spawn manager and bomb plant logic.
- Mapchooser-Extended — end-of-map voting and rotation.
css_plugins reloadStep 10: Add Match Orchestration with MatchZy or Get5
For competitive 5v5 scrims, pugs, and leagues, raw CS2 + admin plugins are not enough — you need a match orchestrator that handles knife rounds, side switches, pause/unpause limits, coach slots, stats export, and demo uploads.
Two options dominate:
MatchZy (recommended for most)
MatchZy is a modern CSS-based plugin with a clean config, built-in stats JSON, Get5-compatible match schemas, and an active maintainer. Install:
cd ~/cs2/game/csgo/addons/counterstrikesharp/plugins
wget https://github.com/shobhit-pathak/MatchZy/releases/latest/download/MatchZy-vX.Y.Z.zip -O matchzy.zip
unzip matchzy.zipConfigure configs/plugins/MatchZy/config.json with your match mode, demo upload endpoint, and API key. Start a pug:
!ready # each player types in team chat
.setup # admin command to begin setupGet5 (classic, still widely used)
Get5 has a longer lineage from CS:GO and is the reference implementation for most league platforms. A CS2 port exists under the same org. Choose Get5 if your league platform (like G5V) requires it.
Step 11: Subscribe to Workshop Maps and Build a Rotation
CS2 supports Steam Workshop maps via host_workshop_map and host_workshop_collection. Find a collection on the CS2 Workshop and copy the numeric ID from its URL.
Change the start map in start.sh to a workshop map:
+host_workshop_map 3070290247 # example: a de_mirage remakeOr boot into a full collection and pick randomly:
+host_workshop_collection 3070290000For servers running more than one workshop map, install MultiAddonManager (see Step 9) and declare the addons in ~/cs2/game/csgo/cfg/multiaddonmanager/multiaddonmanager.cfg:
mm_extra_addons "3070290247,3070290248,3070290249"
mm_extra_addons_timeout 10Simple map rotation
Create ~/cs2/game/csgo/cfg/mapcycle.txt:
de_mirage
de_inferno
de_dust2
de_nuke
de_overpass
de_ancient
de_anubisAnd in server.cfg add:
mapcyclefile "mapcycle.txt"CS2 will cycle through these maps when matches end. For voting-based rotation, use Mapchooser-Extended.
Step 12: Run CS2 as a systemd Service
screen is fine for testing but not for production. Wrap CS2 in a systemd unit so it auto-starts on boot, auto-restarts on crash, and streams logs to journalctl.
As root, create the unit file:
sudo nano /etc/systemd/system/cs2.service[Unit] Description=Counter-Strike 2 Dedicated Server After=network-online.target Wants=network-online.target[Service] Type=simple User=steam Group=steam WorkingDirectory=/home/steam/cs2 ExecStart=/home/steam/cs2/start.sh Restart=on-failure RestartSec=10 KillSignal=SIGINT TimeoutStopSec=30 LimitNOFILE=65535
Hardening
NoNewPrivileges=yes PrivateTmp=yes ProtectSystem=full ProtectHome=read-only ReadWritePaths=/home/steam
[Install] WantedBy=multi-user.target
Enable and start:
sudo systemctl daemon-reload
sudo systemctl enable --now cs2
sudo systemctl status cs2Expected output:
● cs2.service - Counter-Strike 2 Dedicated Server
Loaded: loaded (/etc/systemd/system/cs2.service; enabled)
Active: active (running) since ...
Main PID: 12345 (start.sh)
Tasks: 18
Memory: 2.4G
CGroup: /system.slice/cs2.service
├─12345 /bin/bash /home/steam/cs2/start.sh
└─12346 ./cs2 -dedicated -console ...Stream live logs:
sudo journalctl -u cs2 -fStep 13: Update Script and Backups
CS2 patches ship frequently. Automate the update flow and back up configs/demos.
Update script
sudo -iu steam
nano ~/cs2/update.sh#!/usr/bin/env bash set -euo pipefailecho "[cs2-update] Stopping CS2..." sudo systemctl stop cs2
echo "[cs2-update] Running SteamCMD app_update 730..." /home/steam/steamcmd/steamcmd.sh \ +force_install_dir /home/steam/cs2 \ +login anonymous \ +app_update 730 validate \ +quit
echo "[cs2-update] Starting CS2..." sudo systemctl start cs2 echo "[cs2-update] Done."
chmod +x ~/cs2/update.shGive the steam user passwordless sudo for only the two systemctl commands:
# As root
echo 'steam ALL=(root) NOPASSWD: /bin/systemctl start cs2, /bin/systemctl stop cs2' \
| sudo tee /etc/sudoers.d/steam-cs2
sudo chmod 440 /etc/sudoers.d/steam-cs2Optional: run it weekly via cron (crontab -e as steam):
0 6 3 /home/steam/cs2/update.sh >> /home/steam/cs2/update.log 2>&1Config + demo backups
nano ~/cs2/backup.sh#!/usr/bin/env bash
set -euo pipefail
STAMP=$(date +%Y%m%d-%H%M%S)
DEST="/home/steam/backups/cs2-${STAMP}.tar.gz"tar -czf "${DEST}" \
-C /home/steam/cs2/game/csgo \
cfg addons/counterstrikesharp/configs addons/counterstrikesharp/plugins \
/home/steam/cs2/game/csgo/*.dem 2>/dev/null || true
Keep only the last 14 backups
ls -1t /home/steam/backups/cs2-*.tar.gz | tail -n +15 | xargs -r rm -f
echo "Backup written to ${DEST}"chmod +x ~/cs2/backup.sh crontab -e # add:
0 5 * /home/steam/cs2/backup.sh >> /home/steam/cs2/backup.log 2>&1
For off-server backups, push the tarballs to rclone-compatible object storage nightly.
Troubleshooting
| Problem | Cause | Solution |
|---|---|---|
GS Token is Invalid on startup | Wrong, expired, or revoked GSLT | Regenerate at steamcommunity.com/dev/managegameservers, paste the new token into start.sh, systemctl restart cs2. Make sure the Steam account has no VAC bans. |
| Players see "Server not responding" | Firewall dropping UDP 27015 | Verify sudo ufw status shows UDP 27015 allowed, and that your VPS provider's upstream firewall also allows it. Test with nc -u -v your-ip 27015. |
| Workshop map never finishes downloading for clients | Missing authkey or single-addon server with extra maps | Generate a Web API key at steamcommunity.com/dev/apikey and pass it via -authkey. For multiple workshop maps, install MultiAddonManager. |
VAC secure mode disabled warning | sv_setsteamaccount missing or token invalid, or server flagged | Confirm +sv_setsteamaccount YOURGSLT is in the launch line. Recreate the GSLT if it was flagged. |
meta version returns "Unknown command" | gameinfo.gi edit did not apply | Re-check the indentation and that Game csgo/addons/metamod sits above Game csgo in the SearchPaths block. Restart the server. |
| CounterStrikeSharp plugins fail with missing .NET runtime errors | Downloaded the non-runtime build | Download the with-runtime zip from the CSS releases page and extract again. |
| High CPU usage on a quiet server | Not a bug — CS2 busy-loops on fps_max | That is normal. Lower fps_max to 300 or 256 to reduce idle CPU on CPU-constrained VPS. |
| Server crashes on map change to workshop map | Map requires an addon that is not declared | Install MultiAddonManager and list all workshop IDs in mm_extra_addons. |
Segmentation fault at start | Missing i386 libs or partial Steam validate | Re-run sudo apt install lib32gcc-s1 libncurses6:i386 libstdc++6:i386 libcurl4-gnutls-dev:i386 and app_update 730 validate. |
| No GOTV available | tv_enable 0, or port 27020 blocked | Set tv_enable 1 in server.cfg, open UDP 27020 in UFW and upstream firewall. |
Viewing logs
The definitive debug channel is journalctl:
sudo journalctl -u cs2 -f
sudo journalctl -u cs2 -n 200 --no-pagerCS2 also writes to ~/cs2/game/csgo/logs/ when sv_logfile 1 is set.
FAQ
Is Counter-Strike 2 really free to host?
Yes. The CS2 dedicated server is free via SteamCMD under anonymous login — you do not need to own CS2 or have any paid Steam account to run it. You only need a free Steam account (with no VAC bans and Steam Guard enabled) to generate a GSLT so the server can appear on the public internet. The only cost is the VPS itself.
What tick rate does CS2 actually run at?
CS2 replaced the classic fixed-tick model with sub-tick — inputs are timestamped with microsecond precision regardless of server tick. That said, community servers still set -tickrate 128 and most plugins, demos, and replays behave as if the tick rate matters. For competitive play, 128 tick remains the expected standard and there is no reason not to set it on your own server.
Can I host multiple CS2 servers on the same VPS?
Yes, if the hardware allows. Each additional instance needs a separate install directory (or shared binaries via bind mount), a unique -port (e.g. 27015, 27016, 27017), a unique +tv_port, its own GSLT, and its own systemd unit. A 4 vCPU / 8 GB VPS comfortably runs 2 small public servers (10-slot 64 tick) or 1 competitive 128-tick server. For 3+ instances, scale up to a dedicated CPU server.
How do I give myself admin on the server?
Install CS2-SimpleAdmin (a CounterStrikeSharp plugin). Edit its admins.json config and add your SteamID64 with @css/root flags. Then css_plugins reload in the server console. You will get an in-game admin menu accessible via !admin.
Do I need DDoS protection?
If your server is public and listed on the master list, yes — CS2 servers are regular targets for UDP flood attacks. Pick a VPS provider that offers basic L3/L4 DDoS scrubbing at no extra cost (our CloudCore Business plans include it). For very competitive community projects, consider a GRE tunnel to a game-specific anti-DDoS provider.
How do I integrate stats, demo uploads, and a league frontend?
MatchZy emits per-match JSON stats to a configurable webhook and can upload demos via S3-compatible storage or HTTP PUT. Pair that with a lightweight league platform — Leetify for auto-stats review, a self-hosted Get5Loader instance for full league management, or a custom dashboard consuming the JSON. Demos themselves go to ~/cs2/game/csgo/ by default when tv_autorecord 1 is set.
Next Steps
Now that CS2 is running under systemd with Metamod and CounterStrikeSharp, here is where to go next:
- Harden the host — Lock down SSH, install fail2ban, tighten UFW rules, and enable unattended security upgrades.
- Add a community admin menu — Install CS2-SimpleAdmin with MySQL backing to manage bans, mutes, and permissions from an external panel.
- Publish a match page — Wire MatchZy webhooks into a small Next.js or Laravel dashboard so your pug/scrim results are queryable.
- Set up a SourceTV relay — Run a second thin process that connects to your main server's GOTV port and re-broadcasts to casters/spectators, isolating viewer load from gameplay tick.
- Automate workshop sync — Write a small script that periodically pulls your map collection and restarts the server during low-traffic windows.
- Dive into Valve's reference docs — The official CS2 server documentation lives at developer.valvesoftware.com/wiki/Counter-Strike_2/Dedicated_Servers and covers every convar and launch flag in detail.
Running a CS2 Community? Start on CloudCore Business.>
You need a VPS with real CPU clock speed, NVMe storage, a low-latency network, and DDoS protection — not a shared container. Our CloudCore Business plan is built for game servers:>
- 4 vCPU high-clock cores
- 8 GB DDR4 RAM
- 100 GB NVMe SSD
- 1 Gbps port with L3/L4 DDoS scrubbing
- European and North American locations>
Deploy your CS2 server now and have players connecting within an hour.