SRCDS - Source Dedicated Server - это одна программа, которая запускает любую игру на Source 1: Team Fortress 2, Garry's Mod, Counter-Strike: Source, Left 4 Dead 2, Half-Life 2: Deathmatch, Day of Defeat: Source и длинный хвост модов. Вы устанавливаете серверные файлы игры через SteamCMD, запускаете srcds_run (Linux) или srcds.exe (Windows) с -game <folder>, стартовой картой и числом игроков, а всё остальное поведение берётся из server.cfg в папке cfg игры. Строка запуска определяет, что это за сервер; cfg-файлы определяют, как он себя ведёт. Как только вы знаете, какая настройка где живёт, любая игра на Source - это один и тот же сервер с разным контентом.
Один движок, много игр#
Все серверы на Source 1 используют общий исполняемый файл и общую структуру. Аргумент -game выбирает папку с контентом, и в этой папке лежит всё, что относится к конкретной игре:
| Игра | Папка -game | App id в SteamCMD | Порт по умолчанию |
|---|---|---|---|
| Team Fortress 2 | tf | 232250 | 27015 |
| Garry's Mod | garrysmod | 4020 | 27015 |
| Counter-Strike: Source | cstrike | 232330 | 27015 |
| Left 4 Dead 2 | left4dead2 | 222860 | 27015 |
| Half-Life 2: Deathmatch | hl2mp | 232370 | 27015 |
| Day of Defeat: Source | dod | 232290 | 27015 |
Counter-Strike 2 в этом списке нет. Он работает на Source 2, использует другой исполняемый файл (cs2 с -dedicated), другую структуру папок (game/csgo/), другой набор плагинов и другую систему карт. Многие cvar-ы перешли туда без изменений, из-за чего старые гайды обманчиво наполовину верны; как следует CS2 разобран в статье настройка сервера Counter-Strike 2. Counter-Strike 1.6 ещё старше - это GoldSrc, который запускается через hlds, - и ему посвящён гайд по серверу Counter-Strike 1.6.
Любая из этих игр устанавливается одной и той же строкой SteamCMD с другим id. Все они допускают анонимный вход:
$ steamcmd +force_install_dir /home/srcds/tf2 +login anonymous \ +app_update 232250 validate +quitВ статье что такое SteamCMD разобрано, что делает каждая часть этой строки и почему validate перезапишет файлы, которые вы правили внутри собственных папок игры.
Строка запуска, параметр за параметром#
В Linux сервер запускается через srcds_run - shell-обёртку вокруг настоящего исполняемого файла (srcds_linux). Обёртка перезапускает сервер после падения и по желанию обновляет его. В Windows srcds.exe запускается напрямую. Типичная строка:
$ ./srcds_run -game tf -console -port 27015 +maxplayers 24 \ +map ctf_2fort +sv_setsteamaccount YOURTOKEN -strictportbindВ ней встречаются два вида аргументов, и разница между ними важна:
- Параметры с дефисом (
-game,-port,-console) читает движок или обёртка при старте процесса. Они настраивают сам процесс. - Команды с плюсом (
+map,+maxplayers,+exec) - это консольные команды, которые ставятся в очередь и выполняются, когда движок поднялся, точно так же, как если бы их набрали в консоли. Так можно задать любой cvar.
Параметры, которые стоит знать:
| Параметр | Что делает |
|---|---|
-game <folder> | Какую игру запускать. Обязателен |
-console | Консольный режим в Windows. В Linux ни на что не влияет |
-port <n> | Игровой порт, UDP. По умолчанию 27015 |
-ip <address> | Привязка к одному адресу на машине с несколькими адресами |
-strictportbind | Падать вместо того, чтобы молча пробовать следующий порт |
+maxplayers <n> | Слоты для игроков. Задаётся при старте, на ходу не меняется |
+map <name> | Первая карта. Без неё сервер просто простаивает |
+exec <file> | Выполнить дополнительный cfg после старта |
+sv_setsteamaccount <token> | Вход с токеном игрового сервера |
-tickrate <n> | Tick rate, только в играх, которые это позволяют (CS:S) |
-nohltv | Полностью отключить SourceTV |
-insecure | Отключить VAC. Только для тестов |
-norestart | Запретить srcds_run перезапуск после падения |
-autoupdate | srcds_run обновляется через SteamCMD при перезапуске |
Три из них доставляют больше всего хлопот.
`+map` не опционален. Сервер на Source без загруженной карты не появляется в браузере серверов и не принимает подключения. Он не упал - он ждёт.
`+maxplayers` фиксируется при старте. Менять его в server.cfg бесполезно, потому что server.cfg выполняется уже после того, как число слотов определено. У каждой игры есть и потолок: TF2 допускает до 100, L4D2 рассчитан на 4 выживших (8 в режиме versus) и для большего требует плагинов, а Garry's Mod доходит до 128.
`-tickrate` зависит от игры. CS:S его учитывает, поэтому и существуют серверы CS:S на "66 тиков" и "100 тиков". В TF2 частота зафиксирована на 66, и параметр игнорируется. Garry's Mod принимает -tickrate, и многие roleplay-серверы понижают его, чтобы сэкономить CPU. Об этом компромиссе - в статье что на самом деле значит tick rate.
Токены входа для игровых серверов
+sv_setsteamaccount принимает токен, созданный на странице управления аккаунтами игровых серверов Steam и привязанный к app id клиента игры (440 для TF2, 4000 для Garry's Mod). Нужен ли он, зависит от игры: без токена большинство серверов на Source 1 входят анонимно и работают, хотя некоторые хуже отображаются в списке или ограничены в функциях. CS2 без токена вообще не попадает в список. Подробности, включая ошибку "token in use", когда два сервера используют один токен, - в статье токены игровых серверов Steam.
Папка cfg и порядок выполнения#
Всё, что идёт после строки запуска, живёт в <game>/cfg/ - tf/cfg/, garrysmod/cfg/ и так далее. Это обычные текстовые файлы с консольными командами, по одной в строке, с комментариями через //. Некоторые из них движок выполняет сам:
valve.rcпри старте, который по умолчанию вызываетautoexec.cfg. Используйтеautoexec.cfgдля того, что должно происходить один раз при запуске процесса.server.cfgпосле каждой загрузки карты. Сюда идёт почти всё, и он выполняется заново при каждой смене карты, так что изменения в нём вступают в силу на следующей карте без перезапуска.- Всё, что выполняет плагин. Например, плагины SourceMod для конфигов карт выполняют отдельный файл для каждой карты или префикса карты после
server.cfg- так один сервер держит разные настройки на картахctf_иpl_.
Всё остальное выполняется, только когда его кто-то вызывает: exec mysettings из консоли, +exec в строке запуска или строка exec внутри server.cfg. Разбивать длинный конфиг на части, подключаемые через exec (exec banned_user.cfg, exec competitive.cfg), - обычная практика, так его проще читать.
Разумный стартовый server.cfg для публичного сервера TF2:
hostname "Ten-Second Respawns | 2Fort and friends"sv_password ""rcon_password ""sv_contact "admin@example.org"sv_region 3sv_lan 0mp_timelimit 30mp_winlimit 0mp_maxrounds 0sv_allowupload 0sv_allowdownload 1sv_downloadurl ""log onsv_logbans 1sv_logecho 1sv_logfile 1exec banned_user.cfgexec banned_ip.cfgЗаметки о тех настройках, в которых чаще всего ошибаются:
rcon_password ""отключает удалённую консоль. Это правильное значение по умолчанию; задавайте пароль, только если он нужен какому-то инструменту, и сначала прочитайте статью безопасный RCON.sv_region- число для фильтрации в браузере серверов.255- это "весь мир"; остальные значения - региональные коды,3- Европа.sv_lan 1скрывает сервер от интернета и отключает клиентов не из локальной сети. Это для LAN-мероприятий, а случайно включённый параметр - классика жанра "локально сервер работает, а зайти никто не может".sv_downloadurlуказывает на веб-сервер со сжатым пользовательским контентом (FastDL). Без него клиенты медленно скачивают карты с самого игрового сервера - еслиsv_allowdownloadвообще включён.banned_user.cfgиbanned_ip.cfgзаписываются командамиwriteidиwriteip. Баны, выданные черезbanidиaddip, хранятся в памяти, пока их не запишут, и перезапуск их забудет, если никто этого не сделал.
Другие файлы в папке игры
Вокруг cfg лежат ещё несколько файлов, которые читает сервер:
cfg/mapcycle.txtв TF2 (в некоторых старых играх он лежит в корне игры): карты, которые сервер прокручивает по очереди, по одной в строке. cvarmapcyclefileможет указывать на другой файл. Подробно о ротации - в статье карты и ротация карт на игровом сервере.motd.txtиmotd_text.txt: сообщение дня, которое показывается при входе, в виде HTML или URL, и текстовая версия для клиентов с отключённым HTML.addons/: здесь живут Metamod:Source и SourceMod, если они установлены.maps/,materials/,models/,sound/: пользовательский контент, который клиенты тоже должны скачать.
Порты и подключение#
| Порт | Протокол | Назначение |
|---|---|---|
27015 | UDP | Игровой трафик и запросы к серверу |
27015 | TCP | RCON, на том же номере, что и игровой порт |
27020 | UDP | SourceTV, если включён (tv_port) |
27005 | UDP | Клиентский порт, исходящий со стороны клиента |
Source 1 отвечает на запросы браузера серверов прямо на игровом порту, поэтому отдельный query-порт пробрасывать не нужно. Если вы меняете -port, RCON переезжает вместе с ним. SourceTV работает как дополнительный клиент на своём порту и занимает слот; -nohltv убирает его, если вам не нужны зрители или демо.
Игроки подключаются командой connect 203.0.113.10:27015 в консоли игры, через вкладку Favourites в браузере серверов или по ссылке steam://connect/203.0.113.10:27015. Варианты, включая пароль в ссылке, разобраны в статье ссылки steam://connect и прямое подключение. Если сервер отвечает по IP, но так и не появляется в браузере, проверьте sv_lan, затем вход в Steam, а потом дайте мастер-серверу несколько минут - дальше об этом в статье порты игрового сервера.
Ресурсы: что на самом деле потребляет сервер на Source#
По современным меркам серверы на Source 1 лёгкие, и именно поэтому их до сих пор дёшево держать спустя двадцать лет. Движок симулирует игру в одном главном потоке, поэтому удержит ли сервер свой tick, решает скорость одного ядра, а не количество ядер. Второе ядро помогает только с работой по краям: SourceTV, логирование, потоки плагинов.
| Сервер | RAM | CPU | Примечания |
|---|---|---|---|
| TF2, 24 игрока, ванилла | 1-2 GB | 1 ядро | Комфортно почти на чём угодно |
| TF2, 32 игрока, SourceMod | 2-3 GB | 1-1.5 ядра | Плагины добавляют нагрузку на CPU каждый tick |
| CS:S, 100 тиков, 20 игроков | 1-2 GB | 1.5 ядра | Высокий tick стоит CPU, а не памяти |
| Garry's Mod, DarkRP, 40 игроков | 3-4 GB | 2 ядра | Всё определяют аддоны |
| L4D2, 8 игроков | 1-2 GB | 1 ядро | Director и AI заражённых дешёвые |
Память растёт с пользовательским контентом и плагинами, а не с числом игроков. Сервер TF2 с несколькими сотнями пользовательских карт в ротации занимает больше, чем сервер со стандартным списком, а сервер Garry's Mod с большой коллекцией из Workshop может занять несколько гигабайт ещё до того, как кто-то зайдёт. Нагрузка на CPU растёт с игроками, tick rate и плагинами, которые работают каждый кадр, - поэтому один плохо написанный плагин может навредить сильнее, чем десять лишних игроков.
Показатель, по которому видно, здоров ли сервер, - не процент CPU, а то, держит ли он свой tick. Консольная команда stats выводит частоту кадров и CPU; net_graph на клиенте показывает частоту кадров сервера sv и её разброс. Сервер, у которого время кадра выскакивает за интервал тика, пропускает шаги симуляции, и игроки ощущают это как регистрацию попаданий, которой нельзя доверять. Статья почему падает TPS и что делать построена на примере Minecraft, но метод - сначала измерить, потом найти, что съедает время каждый tick, - тот же. Если график в панели показывает одно ядро, упёршееся в потолок, поможет более быстрое ядро; больше памяти - нет.
Логи и консоль#
У Source есть три отдельных вида логирования, и путаница между ними - причина, по которой люди "не могут найти логи":
- Вывод консоли: то, что вы видите в панели. Исчезает при завершении процесса, если его не сохранять.
-condebugв строке запуска пишет его вconsole.logв папке игры. - Логи сервера: включаются командой
log onи пишутся в<game>/logs/в файлы, имена которых начинаются сL, за которой следуют дата и порядковый номер (L0712001.log). В них записываются подключения со SteamID и IP, чат, убийства, кики и баны, и именно к ним сводится любой спор о модерации.sv_logecho 1дублирует их в консоль. - Логи плагинов: SourceMod пишет свои в
addons/sourcemod/logs/, ошибки - вerrors_<date>.log. Сломанный плагин редко роняет сервер; он просто заполняет этот файл.
Старые файлы L*.log сервер никогда не удаляет. На загруженном сервере они за несколько месяцев незаметно заполняют диск, поэтому чистите их по расписанию. Что хранить и сколько, подсказывает статья какие логи стоит хранить.
Админы, плагины и чего не хватает в ванилле#
В ванильном SRCDS нет никакой системы администрирования, кроме RCON. Любой, у кого есть пароль RCON, может выполнить любую команду; все остальные не могут ничего. Поэтому почти на каждый сервер на Source ставят Metamod:Source и SourceMod, которые добавляют админов с флагами, иммунитет, голосования, управление картами и тысячи плагинов. Исключение - Garry's Mod: в нём есть встроенный скриптинг на Lua и собственные админ-аддоны, обычно ULX или SAM.
Установка SourceMod - это распаковка двух архивов в папку игры и перезапуск. Затем админы прописываются в addons/sourcemod/configs/admins_simple.ini:
"STEAM_0:1:12345678" "99:z" // full admin, top immunity"[U:1:24691357]" "bcdfg" // kick, ban, slay, map, cvarsФлаги и уровни иммунитета разобраны в статье флаги админов и иммунитет в SourceMod, а более широкое сравнение по разным играм - в статье сравнение админ-плагинов для игровых серверов. Для TF2 установка пошагово описана в статье плагины SourceMod для Team Fortress 2.
Обновления, 64 бита и падения#
Valve выпускает обновления Source без предупреждения, и обновлённые клиенты отказываются подключаться к устаревшему серверу. srcds_run умеет с этим справляться: с -autoupdate, -steam_dir и -steamcmd_script он запускает SteamCMD перед каждым перезапуском. Панели делают то же самое, обновляясь при старте. В любом случае порядок одинаковый - остановить, обновить, запустить, - а сервер с плагинами стоит обновлять только тогда, когда вы знаете, что плагины пережили патч. Порядок действий описан в чек-листе на день обновления.
В 2024 году Valve выпустила 64-битные серверные сборки под Linux для TF2 и нескольких других игр на Source, с обёрткой srcds_run_64 рядом со старой. 64-битная сборка снимает ограничения по памяти, которые мучили большие серверы, но Metamod и SourceMod понадобились соответствующие 64-битные релизы, а старые плагины, скомпилированные под 32 бита, перестали работать. Если плагин загружается на одной сборке и не загружается на другой, причина именно в этом.
srcds_run перезапускает сервер после падения, если не задан -norestart, и пишет core dump-ы, если система это разрешает. Падения, которые повторяются на одной и той же карте, обычно означают сломанную пользовательскую карту или плагин, цепляющийся за сущности карты; падения при входе игрока обычно означают плагин; падения после обновления обычно означают устаревшие gamedata у Metamod или SourceMod. Надёжная проверка - запустить сервер, убрав в сторону файл загрузчика Metamod (addons/metamod.vdf или его 64-битный аналог): так одним действием отключается весь стек плагинов.
| Симптом | Вероятная причина |
|---|---|
| Сервер работает, но его никто не находит | sv_lan 1, нет +map или не удался вход в Steam |
| "Server is using a different version" | Сервер не обновлён после патча |
| Баны пропадают после перезапуска | Баны не записаны через writeid |
| После обновления в консоли Unknown command | Устаревшие gamedata у плагина |
| Клиенты зависают на загрузке | Нет sv_downloadurl, контент не сжат |
FAQ#
Чем srcds_run отличается от srcds_linux?
srcds_linux - это настоящий исполняемый файл сервера. srcds_run - shell-скрипт, который настраивает пути к библиотекам, запускает его, перезапускает после падения и по желанию сначала обновляет. Запускайте через скрипт, если у вас нет причин поступать иначе.
Почему не работает maxplayers в server.cfg?
Потому что maxplayers фиксируется при запуске процесса, а server.cfg выполняется позже, при загрузке карты. Укажите +maxplayers 24 в строке запуска - в панели это обычно поле на вкладке Startup.
Нужен ли токен Steam для сервера TF2 или Garry's Mod?
Он не обязателен так, как в CS2. Без токена сервер входит анонимно и в целом работает. Токен даёт серверу постоянную идентичность, на которую опираются некоторые сайты-мониторинги и избранное, так что для публичного сервера его стоит завести.
Может ли одна установка srcds запускать несколько игр?
Нет. Каждая игра - отдельное приложение в SteamCMD со своими файлами, даже если исполняемый файл выглядит одинаково. Устанавливайте каждую игру отдельно и запускайте каждую как отдельный сервер.
SRCDS - это то же самое, что сервер CS2?
Нет. CS2 работает на Source 2 с другим исполняемым файлом, структурой и системой плагинов. Cvar-ы вроде sv_password и hostname выглядят знакомо, но параметры запуска, группы карт и плагины другие.




Комментарии
Полностью анонимно: без аккаунта, без почты, без cookie. Мы храним имя, которое вы ввели, текст и время - больше ничего. Количество ссылок ограничено, разметка не отображается.