MAATRIX GAMES / Блог / Как поднять сервер Team Fortress 2: пошаговая инструкция

Как поднять сервер Team Fortress 2: пошаговая инструкция

MAATRIX GAMES

TF2 — игра 2007 года, но комьюнити живо до сих пор, и свой сервер под конкретный режим или мод (в первую очередь — под кастомные Payload-карты, Trade или MGE) поднять всё ещё проще, чем в большинстве современных шутеров. Проблема обычно не в сложности, а в мелочах: забытый порт, не тот app id, сервер стартует, но не показывается в браузере серверов. Разберём процесс от VPS до автозапуска так, чтобы обойти эти грабли с первого раза.

Системные требования: сколько ресурсов реально нужно

TF2 — старая игра на движке Source, и требования к железу у неё скромные по меркам 2026 года. Формально сервер стартует и на 1 ГБ RAM, но это жёсткий минимум, рассчитанный на пустой сервер без плагинов и с небольшим числом слотов.

Ориентировочно ресурсы стоит планировать так:

СценарийRAMvCPUИгроков
Ванильный сервер, пара плагинов1–1.5 ГБ1–2до 12
Стандартный 24-слотовый паблик2 ГБ2до 24
SourceMod + плагины (античит, статистика)2–3 ГБ224–32
Кастомные режимы (MGE, Trade, Jump) с ботами3–4 ГБ2–324–32

Это ориентир, не результат бенчмарка — реальное потребление зависит от числа слотов, количества SourceMod-плагинов и того, крутится ли на сервере SourceTV. Диск можно брать любой, но SSD/NVMe ускоряет загрузку карт при смене — на HDD смена крупной Payload-карты иногда ощутимо тормозит.

Установка через SteamCMD

TF2 Dedicated Server ставится через SteamCMD с app id 232250 — это отдельный публичный билд сервера, для загрузки не нужен купленный аккаунт с игрой, достаточно анонимного логина.

На Debian/Ubuntu сначала ставим зависимости для 32-битных библиотек — без них steamcmd не запустится:

sudo dpkg --add-architecture i386
sudo apt update
sudo apt install -y lib32gcc-s1 lib32stdc++6 curl tar

Если lib32gcc-s1 не находится в репозитории — на старых релизах дистрибутива пакет назывался lib32gcc1, поставь ту версию, что есть.

Скачиваем и распаковываем сам SteamCMD:

mkdir -p ~/steamcmd && cd ~/steamcmd
curl -sqL "https://steamcdn-a.akamaihd.net/client/installer/steamcmd_linux.tar.gz" -o steamcmd_linux.tar.gz
tar -xvzf steamcmd_linux.tar.gz

И запускаем установку самого сервера:

cd ~/steamcmd
./steamcmd.sh +login anonymous +force_install_dir /home/tf2/tf2server +app_update 232250 validate +quit

Первая загрузка — это несколько гигабайт, на VPS со средним каналом занимает от 5 до 15 минут. Флаг validate полезно держать при каждом крупном обновлении — он пересчитывает контрольные суммы и докачивает битые файлы. Обновление сервера позже — та же команда, +login anonymous можно не повторять каждый раз, steamcmd помнит сессию.

Поднять сервер Team Fortress 2 за пару минут

Готовый образ MAATRIX GAMES: NVMe, AMD EPYC, DDoS-защита, панель управления. Локации UK, US, RU. Оплата картой РФ, СБП или криптой.

Создать сервер

Базовая конфигурация: server.cfg

Основной конфиг сервера — tf/cfg/server.cfg, он подхватывается автоматически при старте. Создаём файл:

nano /home/tf2/tf2server/tf/cfg/server.cfg

Минимальный рабочий набор:

hostname "Мой первый TF2 сервер"
rcon_password "смени_меня_на_сложный_пароль"
sv_password ""
sv_lan 0
sv_region 3
maxplayers 24
sv_allowdownload 1
sv_allowupload 1
mp_maxrounds 5

rcon_password обязательно смени на нетривиальный — с дефолтным или пустым паролем сервер быстро найдут и завалят rcon-командами. sv_region 3 — код региона для Европы/России в браузере серверов; если сервер физически стоит в другом регионе (например, US), поставь соответствующий код или убери строку, чтобы Steam определил регион по IP сам.

Стартовую карту задают не в server.cfg, а параметром запуска — TF2 всегда стартует с какой-то картой, и её проще менять через +map в команде запуска или systemd-юните, чем держать отдельно в конфиге.

Отдельно можно завести tf/cfg/autoexec.cfg — туда удобно вынести настройки, которые не должны затираться при смене карты или ресете некоторых значений плагинами, в отличие от server.cfg.

Запуск сервера через srcds_run

Запускаем через srcds_run — обёртку, которая следит за процессом движка и перезапускает его при крэше движка (но не помогает, если упадёт сам процесс srcds_run, для этого нужен systemd, о нём ниже).

Проще всего завести свой start.sh:

#!/bin/bash
cd /home/tf2/tf2server
./srcds_run -game tf -console -port 27015 +map cp_dustbowl +maxplayers 24 +exec server.cfg
chmod +x start.sh
./start.sh

Разберём ключевые флаги:

  • -game tf — обязательно, иначе сервер попробует стартовать как чистый Source SDK и упадёт с ошибкой про gameinfo.
  • -console — включает консольный вывод в терминал, без него не видно логи в реальном времени.
  • -port 27015 — игровой порт, можно сменить, если на одной машине крутится несколько серверов.
  • +map cp_dustbowl — стартовая карта; вместо неё можно взять любую штатную (ctf_2fort, pl_badwater, koth_harvest_final) или кастомную, предварительно закинутую в tf/maps/.
  • +maxplayers 24 — лимит слотов, имеет приоритет над значением в server.cfg.

Если сервер тут же падает при старте — почти всегда это либо неверный -game, либо битые файлы после неполной загрузки (тогда снова гоняем app_update 232250 validate). Если всё хорошо, в консоли будет строка про успешную загрузку карты.

Порты и firewall

Дефолтный игровой порт TF2 — 27015 (UDP и TCP). Именно на нём сервер общается с клиентами и с мастер-сервером Steam. Если арендуешь VPS напрямую, а не готовый игровой хостинг с уже открытыми портами, «проброс» — это, по сути, настройка firewall на самой машине, а не роутера: у VPS обычно белый IP без NAT.

На Ubuntu/Debian с ufw:

sudo ufw allow 27015/tcp
sudo ufw allow 27015/udp
sudo ufw reload

Если планируешь запускать SourceTV для трансляций или записи демок — дополнительно открой 27020/udp. Для нескольких серверов на одном хосте порт для каждого нужно менять (27016, 27017 и так далее) и открывать отдельно — два сервера на одном порту не заведутся, второй просто не забиндится.

Проверить, что порт реально слушается:

ss -tulnp | grep 27015

Если строки нет — сервер либо не запущен, либо упал при старте, смотри логи в консоли srcds_run.

Видимость в браузере серверов Steam

TF2-сервер регистрируется на мастер-сервере Steam автоматически при старте, если порт открыт и sv_lan стоит в 0 (это значение по умолчанию, но лучше прописать явно в server.cfg, как сделано выше). Никаких дополнительных ключей API для базовой регистрации не нужно — в отличие, например, от Steam Workshop в других играх на Source, где без ключа сервер откажется что-то скачивать.

После старта регистрация в списке может занять пару минут — это нормально, паниковать раньше не стоит. Если сервера всё ещё нет в браузере серверов дольше 5–10 минут, порядок проверки такой:

  1. Порт реально слушается (ss -tulnp | grep 27015) и открыт снаружи, а не только локально.
  2. sv_lan 0 стоит в конфиге, а не 1 — с sv_lan 1 сервер вообще не пытается регистрироваться в интернет-списке.
  3. У VPS белый внешний IP, а не IP за NAT хостера без проброшенного порта.
  4. В консоли сервера нет ошибок вида Failed to register — если есть, чаще всего дело в самом firewall или в блокировке исходящего трафика хостером.

Отдельно от общего браузера серверов работает избранное — игроки могут добавить сервер вручную по IP:порт через консоль (connect IP:27015) или через меню, даже если он ещё не появился в общем списке.

Автозапуск через systemd

Ручной запуск удобен для отладки, но после перезагрузки VPS или падения процесса сервер сам не поднимется — нужен systemd-юнит.

sudo nano /etc/systemd/system/tf2.service

Содержимое:

[Unit]
Description=Team Fortress 2 Dedicated Server
After=network.target

[Service]
User=tf2
WorkingDirectory=/home/tf2/tf2server
ExecStart=/home/tf2/tf2server/srcds_run -game tf -console -port 27015 +map cp_dustbowl +maxplayers 24 +exec server.cfg
Restart=on-failure
RestartSec=10
LimitNOFILE=100000

[Install]
WantedBy=multi-user.target

Запускаем от пользователя tf2 — заводить отдельного непривилегированного юзера под игровой сервер стоит всегда, гонять дедик под root не лучшая идея. Регистрируем и включаем автозапуск:

sudo systemctl daemon-reload
sudo systemctl enable --now tf2.service
sudo systemctl status tf2.service

Логи после этого удобнее смотреть через journalctl -u tf2 -f, а не в консоли терминала — так видно и то, что происходило до текущей SSH-сессии. Restart=on-failure подхватит сервер при крэше из-за кривого плагина, но если проблема в самом конфиге (например, битая карта в +map), systemd будет честно пытаться перезапускать падающий сервер по кругу — тогда лучше сразу смотреть логи, а не полагаться на автовосстановление.

Настройка во многом похожа на другие Source-игры — если параллельно держишь ещё и сервер Garry's Mod, процесс с SteamCMD и systemd будет почти зеркальным, разница в основном в app id и названии -game.

Поднять сервер Team Fortress 2 за пару минут

Готовый образ MAATRIX GAMES: NVMe, AMD EPYC, DDoS-защита, панель управления. Локации UK, US, RU. Оплата картой РФ, СБП или криптой.

Создать сервер

Частые вопросы

Почему сервер не виден в браузере серверов Steam?

Чаще всего дело в закрытом порте (проверь ss -tulnp), в sv_lan 1 вместо 0, или просто прошло мало времени — регистрация может занять пару минут после старта.

Нужен ли SourceMod для базового паблик-сервера?

Нет, TF2 отлично работает и без него. SourceMod и Metamod:Source нужны, когда хочется плагинов — античит, статистика, кастомные команды. Это отдельная установка поверх голого сервера.

Можно ли сменить карту без рестарта сервера?

Да, через rcon-команду changelevel имя_карты или через голосование картой, если оно настроено в режиме — полный рестарт процесса для этого не нужен.

Сколько реально нужно RAM для 32-слотового сервера с плагинами?

Точных цифр без замера на конкретной сборке не назову — сильно зависит от числа и «тяжести» плагинов SourceMod, но по опыту 3–4 ГБ обычно хватает с запасом даже для активных паблик-серверов с полным составом.

Как обновить сервер до новой версии игры?

Останови сервис (systemctl stop tf2), прогони app_update 232250 validate через steamcmd, запусти снова.