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.
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 case | vCPU | RAM | Recommended VPS |
|---|---|---|---|
| Single 5v5 / 10-slot competitive, no plugins | 1 fast | 4 GB | Hostinger KVM 1 |
| Single community server (24-slot, light plugins) | 2 | 8 GB | Hostinger KVM 2 |
| Comp + retake + 1v1 (3 instances) | 2–4 | 8 GB | Hostinger KVM 2 |
| Busy 64-slot surf / bhop with many plugins | 4 | 16 GB | Hostinger KVM 4 |
| League / multi-team (5+ instances, SourceTV each) | 4–8 | 16–32 GB | Hostinger KVM 4 or KVM 8 |
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 →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:
- Go to steamcommunity.com/dev/managegameservers while logged into your Steam account.
- Fill in App ID:
730(Counter-Strike 2). - Memo: anything descriptive (e.g.
hostingbuff-comp-01). - Click Create. Copy the token that appears — it looks like a 32-character hex string.
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.
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
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
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
...
}
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:
- Go to steamcommunity.com/dev/apikey, register a domain (any is fine), copy the key.
- Pass it to the server with
-authkey YOUR_WEB_API_KEYinstart.sh. - 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:
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 withrcon:rcon changelevel de_mirage. - Web RCON client — use a browser tool like HostingBuff’s RCON web client (coming soon in our tools section).
- CLI tool —
rcon-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"
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:
| Port | Protocol | Purpose | Required? |
|---|---|---|---|
| 27015 | UDP | Game traffic (players connect here) | Yes |
| 27015 | TCP | RCON | Optional |
| 27020 | UDP | SourceTV spectators | If SourceTV enabled |
| 27005 | UDP | Outbound client port (rarely needed open) | No |
| 27016 | UDP | Second 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
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
| Symptom | Cause | Fix |
|---|---|---|
| Server won’t appear in community browser | No GSLT, invalid GSLT, VAC-banned Steam account | Generate fresh GSLT, verify Steam account is clean, add to start.sh |
couldn’t allocate any server IP port | Port already in use by another instance | ss -ulnp | grep 27015 to find the culprit; change -port in start.sh |
| Players get “connection failed after 10 retries” | Firewall blocking UDP 27015 | Verify ufw status, check cloud provider security group |
Bad challenge on connect | GSLT used on multiple servers simultaneously | One GSLT per running server. Generate a second for your second instance |
| Server crashes on map load after Valve update | Metamod or CSS incompatible with new engine | Update Metamod (dev branch) and CSS to latest; rerun app_update 730 validate |
meta list returns Unknown command | Metamod didn’t load — gameinfo.gi edit broken | Check indentation with tabs; restore gameinfo.gi.bak and try again |
| CounterStrikeSharp not starting | Using non-runtime build without system .NET 8 | Use the with-runtime release — it bundles .NET so you don’t need a system install |
| Players download maps at 20 KB/s | No FastDL configured | See our FastDL guide |
| Workshop maps not downloading | No -authkey passed | Add Steam Web API key to start.sh with -authkey |
| Server hitches / tick drops under load | CPU throttled, single-thread too slow, or noisy-neighbor VPS | Check cpu MHz — if below 3 GHz sustained, upgrade VPS tier |
[CSS] Failed to load plugin | Plugin built against old CSS API version | Update plugin and/or CSS to matching versions; check plugin’s GitHub compatibility note |
| SourceTV demos not saving | tv_autorecord 0 or directory not writable | Set tv_autorecord 1; check ls -la on game/csgo that user cs2 owns it |
| Server uses 100% of one CPU core idle | Known CS2 dedicated bug — engine busy-loops without throttle | Pin process to a dedicated core with taskset or CPUAffinity= in systemd unit |
| High registered ping across all players | Server fps_max too low | Set 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 VPS | Managed panel (Nitrado) | FaceIt / ESEA pugs | |
|---|---|---|---|
| Plugins (MatchZy, Retakes, etc.) | Unlimited | Usually blocked | None (their stack) |
| Workshop custom maps | Yes, unlimited | Limited | No |
| Tick / latency control | Full control, 128t possible | Provider-set | FaceIt 128t (East/West regions) |
| Persistent server IP for community | Yes | Yes | No (pug = throwaway) |
| Cost for 5v5 comp | €8.49/mo KVM 2 shared with other use | ~€10–20/mo per server | Free pugs, paid subs for premium |
| Setup time (first time) | 1–2 hours | 5 minutes | 0 minutes |
| Linux skills needed | Yes (or follow this guide) | No | No |
| Best for | Clan/team server, community, tournaments | Friends-only, no-fuss | Solo ranked practice |
16 // Hosting recommendations
Based on the scenarios in section 01, here are the concrete Hostinger plans we recommend for CS2:
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 →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 →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 →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
- FastDL — so players download custom maps in seconds, not minutes. FastDL Setup for CS2 & TF2 →
- Panel management — tired of SSH? Put CS2 behind a panel for easy starts/stops/log tailing. Pterodactyl setup →
- Windows alternative — same server stack on Windows with a GUI panel. WindowsGSM setup →
- TF2 server — same engine family, same tooling, different gameplay. TF2 community server guide →
- RCON web tool — upcoming in our tools section. Tools →