Как поднять сервер Team Fortress 2: пошаговая инструкция
TF2 — игра 2007 года, но комьюнити живо до сих пор, и свой сервер под конкретный режим или мод (в первую очередь — под кастомные Payload-карты, Trade или MGE) поднять всё ещё проще, чем в большинстве современных шутеров. Проблема обычно не в сложности, а в мелочах: забытый порт, не тот app id, сервер стартует, но не показывается в браузере серверов. Разберём процесс от VPS до автозапуска так, чтобы обойти эти грабли с первого раза.
Содержание
Системные требования: сколько ресурсов реально нужно
TF2 — старая игра на движке Source, и требования к железу у неё скромные по меркам 2026 года. Формально сервер стартует и на 1 ГБ RAM, но это жёсткий минимум, рассчитанный на пустой сервер без плагинов и с небольшим числом слотов.
Ориентировочно ресурсы стоит планировать так:
| Сценарий | RAM | vCPU | Игроков |
|---|---|---|---|
| Ванильный сервер, пара плагинов | 1–1.5 ГБ | 1–2 | до 12 |
| Стандартный 24-слотовый паблик | 2 ГБ | 2 | до 24 |
| SourceMod + плагины (античит, статистика) | 2–3 ГБ | 2 | 24–32 |
| Кастомные режимы (MGE, Trade, Jump) с ботами | 3–4 ГБ | 2–3 | 24–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 минут, порядок проверки такой:
- Порт реально слушается (
ss -tulnp | grep 27015) и открыт снаружи, а не только локально. sv_lan 0стоит в конфиге, а не1— сsv_lan 1сервер вообще не пытается регистрироваться в интернет-списке.- У VPS белый внешний IP, а не IP за NAT хостера без проброшенного порта.
- В консоли сервера нет ошибок вида
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, запусти снова.