Чтобы установить или обновить выделенный сервер через SteamCMD, нужно знать две вещи: app ID сервера, который обычно не совпадает с ID игры, и нужную ветку - это public, если не указано иное. Команда всегда одна: +app_update <server id> -beta <branch> validate, выполненная после +login anonymous или после входа под аккаунтом, которому принадлежит игра. Большинство сломанных установок - результат одной из трёх ошибок: ID игры передан туда, где нужен ID сервера; выбрана ветка, на которой нет клиентов; или анонимный вход используется для одного из немногих серверов, которые его не принимают. Эта статья - справочник по всем трём: таблица ID, способ узнать, какие ветки сервер публикует на самом деле, и что переключение между ними делает с вашими файлами.
Если вы ещё ни разу не запускали SteamCMD, начните со статьи SteamCMD простыми словами: там описаны установка, порядок аргументов, обновления по скрипту и таблица ошибок. Здесь всё это считается известным, и речь идёт уже о самих ID и ветках.
App ID сервера и app ID игры#
Steam считает выделенный сервер отдельным приложением. У него свой ID, свои депо и свои ветки, и обычно он бесплатен. У игры, в которую вы играете, ID другой. Нужны оба, для разных задач:
- App ID сервера передаётся в
app_update. Он определяет, какие файлы попадут в папку установки. - App ID игры передаётся в
workshop_download_item, и именно его вы выбираете при создании токена игрового сервера Steam, потому что контент Workshop и токены принадлежат игре.
Если передать в app_update ID игры, произойдёт одно из двух. При анонимном входе вы получите No subscription, потому что в анонимной сессии игра вам не принадлежит. С настоящим аккаунтом, которому принадлежит игра, всё сработает, и вы скачаете в папку сервера полный клиент - с текстурами, звуком и всем остальным. Второй исход хуже, потому что выглядит как успех, занимает в десять раз больше места на диске, а запустить из этого сервер невозможно.
| Игра | App ID сервера | App ID игры | Вход |
|---|---|---|---|
| Counter-Strike 2 | 730 | 730 | анонимный |
| Counter-Strike 1.6 (HLDS) | 90 | 10 | анонимный |
| Team Fortress 2 | 232250 | 440 | анонимный |
| Garry's Mod | 4020 | 4000 | анонимный |
| Left 4 Dead 2 | 222860 | 550 | анонимный |
| Valheim | 896660 | 892970 | анонимный |
| Palworld | 2394010 | 1623730 | анонимный |
| Satisfactory | 1690800 | 526870 | анонимный |
| 7 Days to Die | 294420 | 251570 | см. ниже |
| Project Zomboid | 380870 | 108600 | см. ниже |
| Unturned | 1110390 | 304930 | анонимный |
| Don't Starve Together | 343050 | 322330 | анонимный |
| Killing Floor 2 | 232130 | 232090 | анонимный |
| Insurgency: Sandstorm | 581330 | 581320 | анонимный |
| The Forest | 556450 | 242760 | анонимный |
| Sons of the Forest | 2465200 | 1326470 | анонимный |
| SCP: Secret Laboratory | 996560 | 700330 | анонимный |
| ARK: Survival Ascended | 2430930 | 2399830 | анонимный |
| V Rising | 1829350 | 1604030 | анонимный |
| Enshrouded | 2278520 | 1203620 | анонимный |
| Conan Exiles | 443030 | 440900 | анонимный |
| Space Engineers | 298740 | 244850 | анонимный |
| Squad | 403240 | 393380 | анонимный |
| Arma Reforger | 1874900 | 1874880 | анонимный |
| Abiotic Factor | 2857200 | 427410 | анонимный |
| Core Keeper | 1963720 | 1621690 | анонимный |
| Euro Truck Simulator 2 | 1948160 | 227300 | анонимный |
| Rust | 258550 | 252490 | анонимный |
| DayZ | 223350 | 221100 | аккаунт с игрой |
| Arma 3 | 233780 | 107410 | аккаунт с игрой |
Считайте таблицу отправной точкой, а не истиной в последней инстанции. Издатели время от времени переносят сервер в новое приложение, разделяют сборки для Windows и Linux на отдельные приложения или закрывают старые. Надёжная проверка занимает десять секунд, и она описана в следующем разделе.
Нескольким играм из этого списка SteamCMD для сервера вообще не нужен. Выделенный сервер Terraria - это zip-архив с официального сайта, headless-сервер Factorio - tar-архив с factorio.com, а jar-файл сервера Minecraft со Steam никогда не пересекался. Искать их app ID бесполезно; откуда они берутся, рассказано в руководстве по серверу Terraria и tModLoader и в руководстве по headless-серверу Factorio.
Counter-Strike 1.6 и app 90
HLDS - самое старое из того, что до сих пор раздаётся через SteamCMD, и ведёт себя соответственно. В приложении 90 лежат несколько модов Half-Life, и Counter-Strike выбирается строкой конфигурации перед обновлением:
$ ./steamcmd.sh +force_install_dir /srv/cs16 +login anonymous \ +app_set_config 90 mod cstrike \ +app_update 90 validate +quitИзвестно, что в первый раз он часто завершается ошибкой или ставится не полностью. Повторный запуск той же команды, иногда ещё дважды, обычно доводит дело до конца. Если вы это автоматизируете, крутите цикл до появления строки об успехе, а не полагайтесь на один проход. Что ставить поверх установки, описано в руководстве по серверу Counter-Strike 1.6.
Как самому найти app ID и его ветки#
SteamCMD умеет выводить всё, что Steam знает о приложении, включая список веток. Запустите его в интерактивном режиме:
Steam> login anonymousSteam> app_info_update 1Steam> app_info_print 896660app_info_update 1 обновляет локальный кэш метаданных приложений в SteamCMD; без этого вывод может оказаться устаревшим или пустым. Затем app_info_print выдаёт большой вложенный блок. Важная часть находится в depots, а внутри - в branches:
"branches"{ "public" { "buildid" "19455410" "timeupdated" "1758000000" } "public-test" { "buildid" "19512002" "description" "Public test" "pwdrequired" "1" "timeupdated" "1758600000" }}Каждая запись - это имя ветки, которое можно передать в -beta. buildid - сборка, опубликованная в ветке сейчас, timeupdated - метка времени Unix, а pwdrequired со значением 1 означает, что нужен ещё и -betapassword. Сам пароль никогда не выводится; разработчик публикует его в патчноутах, в своём Discord или на вики игры. Номера сборок выше приведены для примера - настоящие меняются с каждым обновлением.
SteamDB показывает те же данные в браузере, вместе с историей всех сборок, и это самый простой способ ответить на вопросы «когда эта ветка менялась в последний раз» и «какой был build ID до патча, который нас сломал». Чтобы найти ID самого сервера, обычно быстрее всего поискать на SteamDB название игры плюс «Dedicated Server»; нужен результат с типом «Tool».
Как устроены ветки#
Ветка - это именованный указатель на сборку. По умолчанию используется public, и её получают все, кто не выбрал что-то другое. Разработчики добавляют ветки по трём причинам:
- Тестовые сборки -
latest_experimental,experimental,public-test,unstable,staging. Они опережаютpublic, хуже протестированы и иногда несовместимы с сохранениями. - Старые версии - ветка, оставленная на предыдущем релизе, чтобы сообщества могли на ней задержаться, пока моды догоняют.
- Платформенные или технические варианты - 64-битная сборка, сборка для профилирования с дополнительной диагностикой, сборка с данными платных DLC для серверов.
Команда для всех одна и та же:
$ ./steamcmd.sh +force_install_dir /srv/valheim +login anonymous \ +app_update 896660 -beta public-test -betapassword yesimadebackups \ validate +quitПример настоящий: публичная тестовая ветка Valheim много лет использует пароль yesimadebackups - шутку со смыслом. Iron Gate меняют тестовые сборки так, что миры могут сломаться, и хотят, чтобы вы сначала скопировали свой.
Ветки, которые встретятся вам по имени
| Игра | Ветка | Что это |
|---|---|---|
| Valheim | public-test | Будущий патч; пароль yesimadebackups |
| 7 Days to Die | latest_experimental | Следующая крупная версия до стабильного релиза |
| 7 Days to Die | ветки с номерами версий | Прежние релизы для серверов с модами |
| Satisfactory | experimental | Экспериментальный канал Coffee Stain |
| Garry's Mod | x86-64 | 64-битная сборка игры и сервера |
| Project Zomboid | unstable | Здесь впервые вышел Build 42 |
| Arma 3 | creatordlc | Сборка сервера с данными Creator DLC |
| Arma 3 | profiling | Диагностическая сборка; пароль публикует Bohemia |
| Rust | staging | Следующее обновление, для проверки плагинов |
Имена веток меняются. Особенно это касается Project Zomboid, где схема менялась по мере продвижения Build 42 к стабильной версии, а 7 Days to Die в разные эпохи называла ветки старых версий по-разному (сначала номерами альф, после 1.0 - номерами версий). Смотрите актуальный список через app_info_print, а не копируйте имя из форумного поста двухлетней давности.
У DayZ тестовые сборки устроены иначе: экспериментальный сервер - это отдельное приложение 1042420, а не ветка 223350. Экспериментальные клиенты подключаются только к экспериментальным серверам, так что это целая параллельная установка, а не флаг.
Как совместить клиентов с сервером#
Сервер на ветке принимает только клиентов той же сборки. Игроки переключаются в своей библиотеке Steam: правый клик по игре, «Свойства», «Бета-версии», выбрать ветку в выпадающем списке и ввести пароль, если он есть. После этого Steam скачает клиентскую сборку ветки.
Именно здесь возникает большая часть проблем с ветками, и выглядят они редко как проблема с веткой. Клиент пишет «incompatible version», «version mismatch» или просто отваливается по таймауту, а игрок клянётся, что обновился. Так и есть - до public. Три привычки избавят вас от такого вечера:
- Пишите имя ветки в названии сервера или в MOTD, пока вы на ней, чтобы никому не пришлось гадать.
- Закрепите сообщение с точными шагами и паролем до переключения.
- Возвращайтесь осознанно. Когда тестовую ветку сливают в
public, вернуться нужно обеим сторонам, а игроки, которые забыли, остаются на ветке, которая уже ушла к следующей тестовой сборке.
Тестовые ветки к тому же обновляются без предупреждения, иногда по несколько раз в день в напряжённую неделю. Сервер, который обновляется при каждом рестарте, будет за ними следовать; клиенты - как только Steam заметит обновление. В какой-то момент они ненадолго окажутся на разных сборках, так что на тестовых ветках иногда будет появляться «version mismatch», и считать это неисправностью не стоит.
Что переключение делает с вашими файлами#
SteamCMD воспринимает переключение ветки как обновление до другой сборки. Он скачивает отличающиеся фрагменты и заменяет изменившиеся файлы. Несколько последствий стоит знать заранее, прежде чем делать это на сервере, который кому-то дорог.
Само переключение сохранения не трогает, а вот следующий запуск - трогает. SteamCMD управляет только файлами, которые принадлежат приложению. Сохранения мира, данные игроков и конфиги, которые генерирует сервер, в его манифест не входят. Опасность в том, что с ними сделает новая сборка при загрузке: многие игры обновляют сохранение на месте, когда его открывает более новая версия, и обновлённое сохранение на старой сборке уже не откроется. Копируйте папку сохранений до переключения, а не после - где каждая игра их хранит, описано в статье о файлах сохранений игровых серверов.
Отредактированные вами файлы могут откатиться. Если вы меняли файл, который поставляется с приложением, например скрипт запуска или конфиг по умолчанию, при переключении ветки он будет заменён, если в новой сборке его версия отличается. validate заменит его, даже если не отличается. Держите свои изменения в файлах, которые генерирует сервер, или храните копии.
Файлы от старой ветки могут остаться. Файлы, которые были только в старой сборке, обычно удаляются, но не всегда, и устаревшая DLL или ассет от экспериментальной сборки может вызывать странные вылеты на public. Если сервер ведёт себя странно после возврата, первое средство - проход с validate. Если не помогло, удалите установку (но не сохранения) и поставьте ветку начисто.
SteamCMD запоминает ветку. Файл установки steamapps/appmanifest_<id>.acf хранит установленный build ID, а если вы на бете - ещё и имя ветки в разделе пользовательской конфигурации. Прочитать его - самый быстрый способ проверить, на чём сервер работает на самом деле. Но не рассчитывайте, что SteamCMD запомнит ветку для будущих обновлений: его поведение здесь менялось от версии к версии, и команда обновления без -beta известна тем, что иногда оставляет сервер на ветке, а иногда возвращает его обратно. Всегда передавайте -beta явно, в том числе -beta public, если имеете в виду ветку по умолчанию.
Фиксация версии и откат#
Аргумента SteamCMD вида «установи сборку 18000000» не существует. До старых релизов можно добраться тремя способами, в порядке предпочтения:
- Ветка версии, которую публикует разработчик. Если 7 Days to Die или Arma 3 держат ветку на предыдущем релизе,
-beta <это имя>- поддерживаемый путь назад, и клиенты могут перейти туда вслед за вами. - Ваша собственная копия. Перед каждым обновлением архивируйте папку установки (или пусть это делает backup). Откат - это восстановление этого архива без запуска
app_update, пока вы не будете готовы. Это работает для любой игры, и это единственный вариант, когда ветки версии нет. - Загрузка депо. В SteamCMD есть команда
download_depot, которая скачивает конкретный манифест конкретного депо по ID, которые вы находите на SteamDB. Она работает, но возиться с ней неудобно, вы получаете только файлы, а не управляемую установку, и для платного контента при анонимном входе она обычно заблокирована. Считайте это крайней мерой.
Практический вывод: сервер, который вам дорог, не должен сам обновляться без присмотра в день патча. Патч популярной игры ломает моды и плагины на часы или дни, и единственный простой путь назад - копия, которую вы сделали заранее. Полный порядок действий описан в статье что делать, когда обновление мода всё сломало, а как безопасно автоматизировать обновления - в статье о полезных задачах по расписанию.
Анонимный вход и серверы, которые его не принимают#
Большинство серверных инструментов можно скачать анонимно бесплатно, поэтому +login anonymous встречается почти в каждом руководстве. Меньшая часть привязана к владению игрой:
- DayZ (
223350) и Arma 3 (233780) требуют аккаунт, которому принадлежит игра, - и для сервера, и для загрузок из Workshop. Анонимный вход даётNo subscription. - Контент Workshop для многих игр требует аккаунт с игрой, даже если сам сервер ставится анонимно. Правило своё для каждой игры и со временем менялось, так что если анонимный
workshop_download_itemпадает с ошибкой доступа, причина именно в этом. - Запросы на загрузку депо для платных приложений требуют аккаунт с игрой.
Некоторые хостинги спрашивают логин Steam и для игр, которые формально ставятся анонимно, потому что установка заодно подтягивает предметы из Workshop или закрытую ветку. В RE:NODE логин Steam запрашивают Arma 3, DayZ, Project Zomboid и 7 Days to Die: сервер создаётся сразу, а установка ждёт на вкладке Setup, пока вы его не укажете. Учётные данные хранятся в том виде, в каком вы их ввели, поэтому используйте запасной аккаунт, на котором есть игра и больше ничего, - никогда не тот, с которого вы что-то покупаете.
Steam Guard нужно один раз пройти интерактивно на машине, где идёт установка. После этого SteamCMD кэширует токен входа в своей папке конфигурации, и следующие запуски проходят без участия человека. Именно этот кэшированный токен делает возможным автоматическое обновление, и именно поэтому аккаунт должен быть таким, который не жалко потерять.
Решение проблем с ID и ветками#
`No subscription` при анонимном входе. Либо это ID игры, а не сервера, либо сервер требует аккаунт с игрой. Сначала сверьте ID через app_info_print - эта ошибка дешевле.
`Invalid Password` или ветка молча не применяется. -betapassword неверный или устарел. Разработчики их меняют. Актуальный пароль ищите в их объявлениях.
Обновление прошло, а сервер всё ещё на старой сборке. Сравните build ID в appmanifest_<id>.acf с buildid ветки из app_info_print. Если они совпадают, Steam ещё не опубликовал патч для сервера; обновления клиента и сервера не всегда выходят в одну минуту, и некоторые издатели выкладывают серверную сборку на час или больше позже.
`Invalid Platform`. У ветки или приложения нет сборки для вашей операционной системы. Ряд серверов работает только под Windows; их список есть в статье Linux или Windows для игровых серверов, а обходной путь описан в статье Wine и Proton для серверов только под Windows.
После переключения ветки клиенты не могут зайти. Почти всегда это клиент, оставшийся на public. Сверьте сборку, которую клиент показывает в главном меню или консоли, со сборкой сервера.
Чистая установка `public` вылетает после периода на experimental. Устаревшие файлы. Запустите с validate, а если не поможет - переустановите в пустую папку и скопируйте сохранения обратно.
FAQ#
Бывает ли app ID сервера таким же, как у игры?
Иногда. Главный пример - Counter-Strike 2: сервер ставится из 730, собственного ID игры. Почти во всех остальных случаях выделенный сервер - отдельный инструмент со своим номером, и ID игры либо не сработает, либо скачает полный клиент.
Нужен ли пароль беты и на клиенте?
Да. Игрок вводит тот же пароль в свойствах игры в Steam, в разделе «Бета-версии», чтобы открыть ветку. Без него клиент остаётся на public и не может подключиться к серверу на тестовой сборке.
Сломает ли переход на экспериментальную ветку мой мир?
Само переключение сохранения не трогает. Но загрузка мира на более новой сборке часто обновляет его на месте, и обновлённое сохранение может больше не загрузиться на public. Скопируйте папку сохранений до переключения и храните эту копию, пока не вернётесь на public и не поиграете на нём.
Как вернуться с beta-ветки на обычный релиз?
Запустите обновление ещё раз с -beta public и validate. Передайте public явно, а не опускайте флаг, а затем проверьте build ID в манифесте приложения, чтобы убедиться, что переключение произошло.
Почему после патча мой скрипт обновления оставляет сервер на старой версии?
Либо издатель ещё не выпустил серверную сборку, либо скрипт привязан к ветке, о которой вы забыли. Выведите ветки через app_info_print и сравните их build ID с тем, что записан в вашем манифесте.
Можно ли держать рядом две ветки одной игры?
Да, в двух папках установки. Каждый force_install_dir независим, так что тестовый сервер на latest_experimental и рабочий сервер на public могут жить на одной машине, если у них разные порты и разные папки сохранений.




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