Everything you need to run a real Counter-Strike 2 dedicated server on Linux in 2026 — GSLT, SteamCMD, server.cfg presets for competitive / DM / retake / 1v1 / community, CounterStrikeSharp plugin support (MetaMod + CSS, not SourceMod), Workshop map collections, SourceTV demos, FastDL for custom maps, and a troubleshooting table for the errors everyone actually hits.

Important — 2026 plugin reality check

SourceMod does not support CS2 and likely never will. The modern CS2 plugin stack is Metamod:Source + CounterStrikeSharp (CSS), which uses C# / .NET 8 instead of SourcePawn. Old CS:GO tutorials telling you to install SourceMod on CS2 are wrong. This guide uses the correct 2026 stack.

01 // Requirements

CS2 is much lighter than Rust or ARK, but tickrate and plugin overhead still matter. Pick hardware based on the kind of server you want to run:

  • Operating System — Ubuntu 22.04 LTS or 24.04 LTS (Debian 12 works identically). CS2 dedicated server is Linux/Windows only; Linux is the canonical host.
  • Architecture — x86_64 only. CS2 does not run on ARM. Ignore VPS offers with Ampere or Graviton CPUs for this.
  • RAM — 4 GB minimum for a single 10-slot competitive server. 8 GB comfortable with plugins, SourceTV, and a second instance.
  • CPU — 1 fast modern core per server instance. CS2 is single-thread bound for the tick loop. Clock speed beats core count. Aim for Ryzen 7xxx or Intel 12th gen+.
  • Storage — 60 GB SSD. CS2 install is ~35 GB and Workshop maps + demos grow fast.
  • Network — 1 Gbps port, unmetered preferred. UDP 27015 open inbound, HTTPS outbound to Steam.
  • GSLT — Game Server Login Token, free, one per server. Required for public servers. Generate at steamcommunity.com/dev/managegameservers. App ID 730.
  • Root / sudo — only for the initial setup; the server itself runs as a non-root user (we’ll create cs2).

Hardware scenarios — pick your tier

Use casevCPURAMRecommended VPS
Single 5v5 / 10-slot competitive, no plugins1 fast4 GBHostinger KVM 1
Single community server (24-slot, light plugins)28 GBHostinger KVM 2
Comp + retake + 1v1 (3 instances)2–48 GBHostinger KVM 2
Busy 64-slot surf / bhop with many plugins416 GBHostinger KVM 4
League / multi-team (5+ instances, SourceTV each)4–816–32 GBHostinger KVM 4 or KVM 8
Recommended Hosting — Self-Managed VPS

Hostinger KVM 2 — 2 vCPU, 8 GB RAM, 100 GB NVMe

The sweet spot for CS2. Enough headroom for a 24-slot community server, or two to three smaller competitive / retake / 1v1 instances side by side. Full root access so you can install CounterStrikeSharp, SourceTV, FastDL, whatever you want. €8.49/month on the 12-month term.

Get Hostinger KVM 2 →
Alternative — Managed Hosting

Nitrado — One-Click CS2 Server

No Linux, no terminal, no SteamCMD, no GSLT debugging. Nitrado provisions a CS2 server in ~2 minutes with a web panel for configs and Workshop maps. Trade-off: you can’t install arbitrary plugins like CounterStrikeSharp (most managed panels lock that down) and per-slot pricing gets steep past 16 slots. Best for friends-only 5v5 setups where simplicity wins.

Get Nitrado →

02 // Pick your server type

Before you write a single line of server.cfg, decide what you’re actually running. The cfg for a ranked 5v5 comp server looks nothing like a 1v1 arena or a bhop server. Use the picker below to get a baseline preset — the full cfg details come in section 5.

// CS2 Server Type Picker

// Recommended preset

03 // Get a GSLT (Game Server Login Token)

A GSLT is a free, per-server token from Steam that authenticates your dedicated server as a legitimate CS2 game server. Without it:

  • Your server won’t appear in the public community browser.
  • Players outside your LAN may fail to connect (depending on NAT).
  • You can’t register for server picker services.

Generating one takes 60 seconds:

  1. Go to steamcommunity.com/dev/managegameservers while logged into your Steam account.
  2. Fill in App ID: 730 (Counter-Strike 2).
  3. Memo: anything descriptive (e.g. hostingbuff-comp-01).
  4. Click Create. Copy the token that appears — it looks like a 32-character hex string.
Keep it secret

Treat a GSLT like an API key. Don’t paste it in screenshots or commit it to Git. If it leaks and gets abused (e.g. used for griefing), Valve can VAC-ban your Steam account. Store it in an env file with chmod 600.

Your Steam account needs to be in good standing: no VAC bans, no Overwatch bans, no recent cooldowns, and Steam Guard enabled. Limited accounts cannot create GSLTs.

04 // Create a non-root user

Never run a game server as root. It’s a security liability and makes SteamCMD file ownership a mess. Create a dedicated user:

# As root or with sudo
adduser --disabled-password --gecos "" cs2
usermod -aG sudo cs2  # optional, remove sudo if you don't want it later

# Switch to the cs2 user for everything that follows
su - cs2

From now on, every command in this guide runs as the cs2 user unless explicitly marked sudo.

05 // Install SteamCMD and CS2

SteamCMD is Valve’s command-line client for downloading dedicated server files. On Debian/Ubuntu you need to enable the multiverse repo and the i386 architecture (some of SteamCMD’s shim libraries are 32-bit even though CS2 itself is 64-bit):

# Back as root / sudo:
sudo dpkg --add-architecture i386
sudo add-apt-repository multiverse -y
sudo apt update
sudo apt install -y lib32gcc-s1 libstdc++6 libstdc++6:i386 steamcmd curl tar wget

# Back to the cs2 user:
su - cs2

# Create directories
mkdir -p ~/steamcmd ~/cs2-server
cd ~/steamcmd

# Fetch SteamCMD (package above provides a launcher, but a local copy is cleaner)
curl -sSL https://steamcdn-a.akamaihd.net/client/installer/steamcmd_linux.tar.gz | tar -xz

Download CS2 dedicated server (app 730)

cd ~/steamcmd
./steamcmd.sh +force_install_dir /home/cs2/cs2-server \
  +login anonymous \
  +app_update 730 validate \
  +quit

This pulls ~35 GB from Steam. First run takes 10–30 minutes on a 1 Gbps link. When it finishes you should see Success! App "730" fully installed.

Re-run after every CS2 update

Valve pushes CS2 updates frequently. Run the same command again to pull updates. Add validate once a month to repair any corrupted files. If your server refuses to start after an update, re-running with validate fixes 90% of cases.

06 // Write your server.cfg

CS2 reads server.cfg from /home/cs2/cs2-server/game/csgo/cfg/server.cfg at map load. Create it:

mkdir -p /home/cs2/cs2-server/game/csgo/cfg
nano /home/cs2/cs2-server/game/csgo/cfg/server.cfg

Baseline competitive 5v5 (MR12) server.cfg

// =============================================
// HostingBuff CS2 competitive server.cfg (MR12)
// =============================================

// --- Identity ---
hostname "HostingBuff | 5v5 Competitive | EU"
sv_password ""                      // set if you want private
rcon_password "CHANGE-ME-LONG-RANDOM"
sv_region 3                         // 0=US-East 1=US-West 2=South America 3=Europe 4=Asia 5=Australia 7=Middle East 8=Africa
sv_tags "competitive, hostingbuff, mr12"

// --- Logging ---
log on
sv_logbans 1
sv_logecho 1
sv_logfile 1
sv_log_onefile 0

// --- Rates / networking (subtick defaults) ---
sv_minrate 196608
sv_maxrate 0
sv_mincmdrate 64
sv_maxcmdrate 128
sv_minupdaterate 64
sv_maxupdaterate 128
fps_max 300
net_maxcleartime 0.001

// --- Match format: MR12 ---
mp_maxrounds 24
mp_overtime_enable 1
mp_overtime_maxrounds 6
mp_overtime_startmoney 12500
mp_halftime 1
mp_match_can_clinch 1

// --- Round timing ---
mp_freezetime 15
mp_roundtime 1.92
mp_roundtime_defuse 1.92
mp_roundtime_hostage 1.92
mp_buytime 20
mp_startmoney 800
mp_maxmoney 16000
mp_friendlyfire 1
mp_tkpunish 0
mp_solid_teammates 1

// --- Warmup ---
mp_warmuptime 60
mp_warmup_pausetimer 1
mp_do_warmup_period 1

// --- Team & spawn ---
mp_autoteambalance 0
mp_limitteams 0
mp_death_drop_gun 1
mp_death_drop_grenade 2
mp_death_drop_defuser 1
mp_molotovusedelay 0
mp_buy_anywhere 0

// --- Cheats / cvars locked ---
sv_cheats 0
sv_pausable 1
sv_allow_wait_command 0
sv_allow_votes 1
sv_vote_allow_spectators 0
sv_vote_issue_kick_allowed 1

// --- VAC + Steam ---
sv_secure 1
sv_pure 1
sv_consistency 1

// --- SourceTV (demos, spectators) ---
tv_enable 1
tv_port 27020
tv_maxclients 10
tv_delay 90
tv_autorecord 1
tv_snapshotrate 64
tv_title "HostingBuff SourceTV"
tv_name "HostingBuff-TV"

// --- Map rotation ---
mapgroup mg_active

// --- Ban policy ---
writebackup_serverbackup_cvars 1

// --- RCON hardening ---
sv_rcon_whitelist_address ""
sv_rcon_banpenalty 1440
sv_rcon_maxfailures 10
sv_rcon_minfailures 5
sv_rcon_minfailuretime 30

Casual community 24-slot server.cfg

hostname "HostingBuff | Community 24/7 Dust2 | EU"
sv_password ""
rcon_password "CHANGE-ME"
sv_region 3
sv_tags "community, hostingbuff, casual, 24-slot"

game_type 0
game_mode 0
mp_maxrounds 16
mp_startmoney 1000
mp_freezetime 6
mp_roundtime 2.17
mp_roundtime_defuse 1.92
mp_buytime 15
mp_buy_anywhere 0
mp_friendlyfire 0
mp_autoteambalance 1
mp_limitteams 2
mp_halftime 1
mp_warmuptime 20

sv_maxplayers 24
sv_visiblemaxplayers 24
sv_competitive_official_5v5 0
sv_allow_votes 1
mp_autokick 0
sv_full_alltalk 0
sv_alltalk 0
sv_deadtalk 1

tv_enable 1
tv_delay 45
tv_maxclients 8

mapgroup mg_active

Deathmatch (respawn) server.cfg

hostname "HostingBuff | DM 16-slot | EU"
rcon_password "CHANGE-ME"
sv_tags "dm, hostingbuff, deathmatch"

game_type 1
game_mode 2
sv_maxplayers 16
mp_timelimit 10
mp_buy_anywhere 1
mp_free_armor 1
mp_ct_default_primary "weapon_m4a1"
mp_t_default_primary "weapon_ak47"
mp_dm_time_between_bonus_weapons 30
mp_dm_bonus_length_min 30
mp_dm_bonus_length_max 30
mp_respawn_immunitytime 2
mp_force_pick_time 1
mp_teammates_are_enemies 0

mapgroup mg_active
Protect your rcon password

Pick a long (20+ character) random rcon password. Anyone with rcon access can change maps, kick players, reload cfgs, and execute arbitrary console commands. If you need team rcon, put it behind an admin plugin with individual logins rather than sharing the master password.

07 // Launch script and systemd service

CS2’s dedicated binary is game/bin/linuxsteamrt64/cs2. It needs the correct working directory and environment. Wrap it in a launch script so you only edit one file when changing params:

nano /home/cs2/cs2-server/start.sh
#!/bin/bash
# HostingBuff CS2 launch script
cd /home/cs2/cs2-server

# Your GSLT (generated at steamcommunity.com/dev/managegameservers)
GSLT="YOUR_32_CHAR_TOKEN_HERE"

# Launch options
START_MAP="de_dust2"
PORT=27015
CLIENTPORT=27005
TV_PORT=27020
MAX_PLAYERS=10

./game/bin/linuxsteamrt64/cs2 \
    -dedicated \
    -console \
    -usercon \
    +game_type 0 \
    +game_mode 1 \
    +mapgroup mg_active \
    +map ${START_MAP} \
    -port ${PORT} \
    -tv_port ${TV_PORT} \
    -maxplayers_override ${MAX_PLAYERS} \
    +sv_setsteamaccount ${GSLT} \
    -authkey YOUR_WORKSHOP_API_KEY_IF_USING_WORKSHOP
chmod +x /home/cs2/cs2-server/start.sh

systemd service (auto-restart, boot-start)

Running inside tmux or screen is fine for testing, but for production you want systemd — it restarts on crash, starts on boot, and writes logs to the journal:

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=cs2
Group=cs2
WorkingDirectory=/home/cs2/cs2-server
ExecStart=/home/cs2/cs2-server/start.sh
Restart=on-failure
RestartSec=10
TimeoutStopSec=30
KillSignal=SIGINT
LimitNOFILE=65535
# Optional hardening
PrivateTmp=true
ProtectSystem=full
NoNewPrivileges=true

[Install]
WantedBy=multi-user.target
sudo systemctl daemon-reload
sudo systemctl enable --now cs2
sudo systemctl status cs2
journalctl -u cs2 -f     # tail live logs
Why SIGINT not SIGTERM

The CS2 dedicated binary does a clean shutdown on SIGINT (save demos, flush logs, tell Steam the server is going down). SIGTERM / SIGKILL leaves orphan entries in the Steam master server list for ~5 minutes. Always use systemctl stop cs2, never kill -9.

Keeping CS2 updated

Create a simple update script:

nano /home/cs2/update.sh
#!/bin/bash
sudo systemctl stop cs2
/home/cs2/steamcmd/steamcmd.sh \
  +force_install_dir /home/cs2/cs2-server \
  +login anonymous \
  +app_update 730 \
  +quit
sudo systemctl start cs2
chmod +x /home/cs2/update.sh

Run it manually after Valve pushes an update, or wire it to a cron job that polls the Steam API for version changes. Never do unattended auto-updates mid-match — schedule them during off-hours.

08 // Install Metamod:Source and CounterStrikeSharp

This is the part every outdated CS:GO tutorial gets wrong. SourceMod does not work on CS2. The plugin stack you want is:

  • Metamod:Source — the low-level loader that hooks CS2’s engine. Required.
  • CounterStrikeSharp (CSS) — a .NET 8 runtime that sits on top of Metamod and lets you load C# plugins. Replaces SourcePawn.

Every CS2 plugin in 2026 worth running (MatchZy, Retakes, SharpTimer, CSSAdmin, AntiRush, etc.) is built on CounterStrikeSharp.

Install Metamod:Source (dev build for CS2)

CS2 needs the dev branch of Metamod — the stable 1.12 branch does not support CS2.

cd /tmp
# Get the latest CS2-compatible build from metamodsource.net
# (check https://www.metamodsource.net/downloads.php?branch=dev for current version)
wget https://mms.alliedmods.net/mmsdrop/2.0/mmsource-2.0.0-git1347-linux.tar.gz -O mms.tar.gz
tar -xzf mms.tar.gz -C /home/cs2/cs2-server/game/csgo/
rm mms.tar.gz

Edit the game info file so CS2 actually loads Metamod on startup:

nano /home/cs2/cs2-server/game/csgo/gameinfo.gi

Find the SearchPaths section and add one line above the existing Gamecsgo entry:

SearchPaths
{
    Game_LowViolencecsgo_lv
    Game+Mod            csgo/addons/metamod    // <-- ADD THIS LINE
    Game                csgo
    Game                csgo_core
    Game                csgo_imported
    ...
}
Indentation matters

Use tabs, not spaces, and keep the exact same column alignment as the existing entries. If CS2 crashes on startup after editing gameinfo.gi, you almost certainly broke the indentation. Keep a backup: cp gameinfo.gi gameinfo.gi.bak before editing.

Verify in console when you start CS2:

meta version
meta list

You should see Metamod:Source version 2.x.x-dev. If Unknown command, Metamod didn’t load — re-check the gameinfo.gi edit.

Install CounterStrikeSharp

cd /tmp
# Fetch the latest WITH RUNTIME build (includes .NET 8 runtime bundled - no system dotnet needed)
wget https://github.com/roflmuffin/CounterStrikeSharp/releases/latest/download/counterstrikesharp-with-runtime-build-XXX-linux-latest.zip -O css.zip
# Replace XXX with the current build number from the release page
unzip css.zip -d /home/cs2/cs2-server/game/csgo/
rm css.zip

# Fix permissions
chown -R cs2:cs2 /home/cs2/cs2-server/game/csgo/addons

Restart the CS2 server. In console you should see:

[CSS] CounterStrikeSharp is starting up...
[CSS] Plugin loader: initialized
[CSS] Core API loaded. Version: 1.x.x

Verify Metamod and CSS are loaded

In the CS2 server console (or via rcon):

meta list

Expected output:

Listing 1 plugin:
[01]  "CounterStrikeSharp" (1.x.x) by roflmuffin

If you see that line, you’re ready to install plugins.

Install CounterStrikeSharp plugins

Most CS# plugins install the same way: download, extract, drop folder into addons/counterstrikesharp/plugins/, reload.

# Example: install MatchZy (competitive match automation — knife round, pause,
# stats, .ready / .notready, GOTV forward, veto, etc.)
cd /tmp
wget https://github.com/shobhit-pathak/MatchZy/releases/latest/download/MatchZy-vX.X.X.zip -O matchzy.zip
unzip matchzy.zip -d /home/cs2/cs2-server/game/csgo/addons/counterstrikesharp/
chown -R cs2:cs2 /home/cs2/cs2-server/game/csgo/addons

# In-game console (or rcon):
css_plugins reload

Useful plugins to pair with MatchZy: CS2-SimpleAdmin (admin menu + bans), Retakes (4v4 retakes game mode), SharpTimer (surf/bhop timer), AntiRush (stop T rushing from spawn in warmup), PlayerSpeedometer (kz / surf quality of life).

09 // Workshop maps and custom map rotation

CS2 uses the Steam Workshop for custom maps. Unlike CS:GO, the server needs a Steam Web API key to fetch Workshop content:

  1. Go to steamcommunity.com/dev/apikey, register a domain (any is fine), copy the key.
  2. Pass it to the server with -authkey YOUR_WEB_API_KEY in start.sh.
  3. Add maps by ID with +host_workshop_map 3070335208 (or whatever collection/map Workshop ID you want).

For a map collection (most community servers want this):

+host_workshop_collection 3070335208     // example collection ID

Find your Workshop map/collection IDs in the URL: steamcommunity.com/sharedfiles/filedetails/?id=3070335208.

Map rotation is controlled by mapcycle.txt inside game/csgo/cfg/, one map per line:

de_dust2
de_mirage
de_inferno
workshop/3070335208/de_cache_remastered
workshop/3070335208/de_season

10 // FastDL — get custom content to players instantly

The default in-game download from the server maxes out at 20 KB/s. For a 40 MB custom map, that’s a half-hour wait — players just disconnect.

FastDL solves this: a lightweight HTTP server hosts compressed copies of your maps/materials/sounds, and CS2 downloads them via HTTP at 10–100 MB/s instead of the game-protocol trickle.

Minimal server.cfg additions:

sv_downloadurl "https://fastdl.yourserver.com/csgo"
sv_allowdownload 1
sv_allowupload 0

But FastDL done badly causes more problems than it solves: wrong MIME types, missing bz2 compression, wrong folder structure, stale files. We wrote a full dedicated FastDL setup guide that covers the nginx config, bz2 compression, auto-sync cron script, and the permission traps that eat hours of debugging:

Dedicated FastDL Guide

Step-by-step FastDL on the same VPS — nginx config, bz2 compression, cron auto-sync, troubleshooting.

Read: FastDL Setup for CS2 & TF2 →

11 // SourceTV / GOTV — demos and spectators

SourceTV (branded “GOTV” in-game) lets spectators watch your server with a configurable delay, and auto-records every match to a .dem file. Essential for any competitive server — demos are how players review rounds and how you investigate cheat reports.

Minimum SourceTV cfg (already in the competitive example above):

tv_enable 1
tv_port 27020                   // UDP, must be open on firewall
tv_maxclients 10                // max simultaneous spectators
tv_delay 90                     // seconds — 90 is tournament standard
tv_autorecord 1                 // auto-save demos per match
tv_snapshotrate 64              // spectator tick rate
tv_title "My SourceTV"
tv_name "SourceTV"
tv_password ""                  // set if you want private spectators

Demos land in /home/cs2/cs2-server/game/csgo/ with filenames like auto-20260418-de_dust2.dem. Rotate them so you don’t fill the disk:

# Delete demos older than 14 days, weekly
(crontab -l; echo "0 5 * * 0 find /home/cs2/cs2-server/game/csgo -name 'auto-*.dem' -mtime +14 -delete") | crontab -

12 // Remote admin (RCON)

RCON lets you run console commands remotely — change map, kick players, reload cfgs — without being in the server. Three ways to use it:

  • In-game console — type rcon_password YOUR_PASS, then prefix commands with rcon: rcon changelevel de_mirage.
  • Web RCON client — use a browser tool like HostingBuff’s RCON web client (coming soon in our tools section).
  • CLI toolrcon-cli, a small Go binary that speaks the Source RCON protocol.
# Install rcon-cli on your laptop
wget https://github.com/gorcon/rcon-cli/releases/latest/download/rcon-linux_amd64.tar.gz
tar -xzf rcon-linux_amd64.tar.gz
sudo mv rcon /usr/local/bin/rcon-cli

# Use it
rcon-cli -a your.server.ip:27015 -p YOUR_RCON_PASSWORD "status"
rcon-cli -a your.server.ip:27015 -p YOUR_RCON_PASSWORD "changelevel de_mirage"
Harden RCON from public internet

RCON is unencrypted plain text. If you expose port 27015 to the public (which you have to for players), attackers can brute-force the password. Mitigations: use a 24+ character random password, set sv_rcon_maxfailures 5 and sv_rcon_banpenalty 1440 (the cvars we put in the sample cfg), and consider binding RCON to a VPN interface with sv_rcon_whitelist_address.

13 // Firewall and ports

CS2 uses UDP, not TCP. Open these ports inbound on your VPS:

PortProtocolPurposeRequired?
27015UDPGame traffic (players connect here)Yes
27015TCPRCONOptional
27020UDPSourceTV spectatorsIf SourceTV enabled
27005UDPOutbound client port (rarely needed open)No
27016UDPSecond CS2 instance (if running two)Per instance

Using ufw on Ubuntu:

sudo ufw allow 27015/udp
sudo ufw allow 27015/tcp      # only if you need remote rcon
sudo ufw allow 27020/udp      # only if SourceTV
sudo ufw allow 22/tcp         # keep SSH open!
sudo ufw enable
sudo ufw status numbered
Don’t lock yourself out

Always sudo ufw allow 22/tcp before ufw enable, otherwise you’ll instantly disconnect from SSH with no way back in except the VPS console. On Hostinger you can regain access via the browser VNC console, but it’s avoidable.

14 // Troubleshooting — common CS2 server problems

SymptomCauseFix
Server won’t appear in community browserNo GSLT, invalid GSLT, VAC-banned Steam accountGenerate fresh GSLT, verify Steam account is clean, add to start.sh
couldn’t allocate any server IP portPort already in use by another instancess -ulnp | grep 27015 to find the culprit; change -port in start.sh
Players get “connection failed after 10 retries”Firewall blocking UDP 27015Verify ufw status, check cloud provider security group
Bad challenge on connectGSLT used on multiple servers simultaneouslyOne GSLT per running server. Generate a second for your second instance
Server crashes on map load after Valve updateMetamod or CSS incompatible with new engineUpdate Metamod (dev branch) and CSS to latest; rerun app_update 730 validate
meta list returns Unknown commandMetamod didn’t load — gameinfo.gi edit brokenCheck indentation with tabs; restore gameinfo.gi.bak and try again
CounterStrikeSharp not startingUsing non-runtime build without system .NET 8Use the with-runtime release — it bundles .NET so you don’t need a system install
Players download maps at 20 KB/sNo FastDL configuredSee our FastDL guide
Workshop maps not downloadingNo -authkey passedAdd Steam Web API key to start.sh with -authkey
Server hitches / tick drops under loadCPU throttled, single-thread too slow, or noisy-neighbor VPSCheck cpu MHz — if below 3 GHz sustained, upgrade VPS tier
[CSS] Failed to load pluginPlugin built against old CSS API versionUpdate plugin and/or CSS to matching versions; check plugin’s GitHub compatibility note
SourceTV demos not savingtv_autorecord 0 or directory not writableSet tv_autorecord 1; check ls -la on game/csgo that user cs2 owns it
Server uses 100% of one CPU core idleKnown CS2 dedicated bug — engine busy-loops without throttlePin process to a dedicated core with taskset or CPUAffinity= in systemd unit
High registered ping across all playersServer fps_max too lowSet fps_max 300 in server.cfg

15 // Self-hosted vs FaceIt / ESEA / managed panels

Why self-host CS2 instead of renting a slot on FaceIt / ESEA / a managed panel?

 Self-hosted VPSManaged panel (Nitrado)FaceIt / ESEA pugs
Plugins (MatchZy, Retakes, etc.)UnlimitedUsually blockedNone (their stack)
Workshop custom mapsYes, unlimitedLimitedNo
Tick / latency controlFull control, 128t possibleProvider-setFaceIt 128t (East/West regions)
Persistent server IP for communityYesYesNo (pug = throwaway)
Cost for 5v5 comp€8.49/mo KVM 2 shared with other use~€10–20/mo per serverFree pugs, paid subs for premium
Setup time (first time)1–2 hours5 minutes0 minutes
Linux skills neededYes (or follow this guide)NoNo
Best forClan/team server, community, tournamentsFriends-only, no-fussSolo ranked practice

16 // Hosting recommendations

Based on the scenarios in section 01, here are the concrete Hostinger plans we recommend for CS2:

Small team / private 5v5 / retake server

Hostinger KVM 1 — 1 vCPU, 4 GB RAM, 50 GB NVMe

Fine for a single 10-slot competitive server with no plugins, or friends-only 5v5 with minimal admin plugins. €5.99/month. Tight, but workable — you’ll feel it if you add SourceTV + plugins.

Get Hostinger KVM 1 →
Recommended — Community / multi-instance

Hostinger KVM 2 — 2 vCPU, 8 GB RAM, 100 GB NVMe

The sweet spot. Run a 24-slot community server + comp instance + SourceTV + CounterStrikeSharp plugins without breaking a sweat. Or run 2–3 separate CS2 instances side by side. €8.49/month.

Get Hostinger KVM 2 →
League / tournament host — 5+ instances

Hostinger KVM 4 — 4 vCPU, 16 GB RAM, 200 GB NVMe

For league ops running 5+ concurrent match servers, each with their own SourceTV stream and MatchZy instance. Plenty of storage for weeks of demos. €12.99/month.

Get Hostinger KVM 4 →
Don’t want Linux? — Managed

Nitrado — Managed CS2 Hosting

One-click setup, web panel, Workshop integration, no terminal. Good for friends-only 5v5 where you just want to play. Locked-down plugin stack and per-slot pricing are the trade-offs.

Get Nitrado →

17 // Next steps