This is the order, not a tutorial for each step — each phase links to its full guide. Follow it top to bottom on a fresh VPS and you will not paint yourself into a corner, which is what happens when people install AMXX before Metamod or open the firewall before setting an RCON password. Treat every checkbox as "done and verified" before moving on.
1. Prepare the OS
- A 64-bit Debian or Ubuntu VPS is fine — HLDS is 32-bit, so you must add multiarch and the i386 runtime. This is the number-one "won't start" cause.
- Create an unprivileged
steamuser. Never run the server as root.
sudo dpkg --add-architecture i386 && sudo apt update sudo apt install -y lib32gcc-s1 lib32stdc++6 libc6:i386 sudo adduser --disabled-password --gecos "" steam
Full detail: the SteamCMD install guide.
2. Install the base server (App 90)
- Install SteamCMD,
login anonymous,app_update 90 validate— twice, the first pass often skipscstrike/. - Get it from SteamCMD only, never a "ready pack" — see safe downloads.
- Verify:
liblist.gam,hlds_runandhlds_linuxall exist, and the server boots to a map.
3. Replace the engine and game logic
- ReHLDS over stock HLDS — verify with
rehlds_version. - ReGameDLL_CS over
cs.so— verify withregamedll_version, and copydelta.lstor you will crash on connect.
4. Metamod and AMX Mod X
- Metamod-r — pointed at from
liblist.gam; verify withmeta list. - AMX Mod X 1.9 — listed in Metamod's
plugins.ini; verify withamxx version. - Load the modules you need (
cstrike,fun, etc.) and confirm withamxx modules.
Order is load-bearing: engine → game DLL → Metamod → AMXX → ReAPI. Installing out of order is how you get bad load.
5. Admins and core plugins
- Set up admins in
addons/amxmodx/configs/users.iniby SteamID (or by name+password for non-Steam). - Install the plugins you run — see installing a plugin correctly. An admin menu and ban manager are the usual first two.
6. Non-Steam support (if you want it)
- On ReHLDS, install Reunion and set a
SteamIdHashSaltof at least 16 characters, or it refuses to load. - Decide your policy — Steam-only, non-Steam-only, or both — it affects how admins are identified.
7. Configure and secure
- Write
server.cfg:hostname, rates,mp_*gameplay, and a longrcon_password. sv_lan 0— mandatory to appear in the master list.- Harden RCON:
sv_rcon_maxfailures,sv_rcon_minfailures,sv_filterban 1.
hostname "My CS 1.6 Server" sv_lan 0 rcon_password "a-long-random-string" sv_maxrate 25000 sv_minrate 15000 sv_rcon_maxfailures 5
8. Firewall and go-live
- Open UDP 27015 (game) and TCP 27015 (RCON).
- Put the server under systemd so it survives a reboot.
sudo ufw allow 27015/udp sudo ufw allow 27015/tcp
Pre-launch verification
Run this list in the server console before you advertise the IP. Every one must pass:
rehlds_version // prints a version regamedll_version // prints a version meta list // every plugin RUN amxx plugins // every plugin running status // correct map, slots, public IP
Then, from a second machine, connect YOUR_IP:27015 and play a full round including a map change — the map change is where a bad delta.lst or a missing asset shows up. Confirm the server appears in the internet list (needs sv_lan 0 and a reachable UDP port); if it does not, that is a master-list problem, not a config one. When all of that holds, the server is genuinely public-ready.
Why the order is not negotiable
The temptation is to skip ahead — install AMXX before Metamod, open the firewall before setting a password, add plugins before the engine is stable. Each shortcut has a specific cost. AMXX before Metamod cannot load, because Metamod is what loads it. ReAPI before ReGameDLL fails, because ReAPI hooks functions that only exist in ReGameDLL. A public port before an RCON password is a window in which anyone scanning the internet list can try to seize your console. The dependency chain — engine, then game DLL, then loader, then AMXX, then anything that hooks the game — is the same chain that determines what crashes when something is wrong, which is why every troubleshooting guide asks "did you install in order" first.
Post-launch, keep it running
Launching is not the end. Three things separate a server that survives its first week from one that does not. Put it under a process supervisor (systemd) so a crash restarts it and a reboot brings it back — hlds_run restarts the inner binary but not the whole service. Keep the Valve .bak files you made when swapping the engine and game DLL; they are your only fast rollback. And watch the logs for the first few days:
tail -f /home/steam/hlds/cstrike/addons/amxmodx/logs/*.log tail -f /home/steam/hlds/debug.log
A repeating warning on every map change is a real problem that has not crashed you yet — a stale delta.lst, a plugin erroring quietly, a missing asset. Fix those while the server is small, because they get exponentially harder to diagnose once there are thirty players and a full plugin set to bisect. A server that boots clean, cycles its whole mapcycle with players on it, and logs nothing repeating is one you can safely walk away from.









