Последние новости:
Популярные файлы:
Установка steam сервера CS:GO на Linux VPS бесплатно

Введение и примечания

В интернете много статей с однотипным содержанием, и не полным раскрытием шагов инсталяции, что вызывает затруднения в понимании этих шагов. Грубо говоря, везде какая-то "тухленькая инфа". Я помогу вам понять принцип поднятия 24/7 сервера на своём выделенном или виртуальном сервере (VDS/VPS).
Данное руководство подойдет для игр Valve, имеющих модуль Dedicated Server
Это:

Руководство описывает установку лицензионного сервера Steam CS:GO, и забегая вперёд скажу, если у вас уже куплена игра CS:GO в Steam, то не будет никаких проблем, а только плюсы.
Руководство описывает установку на операционные системы семейства Debian/Ubuntu/Mint, отличия от RedHat систем (CentOS, Fedora) незначительные, и я так же приведу ссылки на официальное руководство с этими отличиями. Но за эталон примем стабильную Debian 7 "Wheezy" 64 bit, состоящую из свободного ПО с открытым исходным кодом.

Аренда сервера VPS

Самой простой и понятной платформой аренды виртуальных серверов я считаю новый проект Vscale (облачные сервера) от крупнейшего оператора услуг дата-центров в России, сети "Селектел" . Поскольку я обещал вам бесплатную установку сервера без регистрации и смс :) , поэтому опишу пару простых шагов, которые нужно сделать, чтобы арендовать сервер бесплатно.

  1. Регистрируемся по следующей ссылке https://vscale.io/?refcode=5i02195e45
  2. Привязываем кредитную карту (не волнуйтесь, потребуется только подтверждение платежеспособности в виде списания 1 рубля, и зачисления его обратно). На ваш счет будет зачислено 400 рублей (если вы регистрировались по ссылке пункта 1). Этого хватит для аренды сервера минимальной конфигурации (память 512 МБ, SSD диск 20 ГБ, 1 ядро процессора Intel Xeon E5 v3, 1 ТБ трафика) на 2 месяца, либо чуть помощнее на 1 месяц - на момент января 2016 г. Сервера с такой конфигурацией хватит на игру 12-20 человек (зависит еще от нагруженности сервера плагинами). Если хотите убедиться в этом, сервер я назвал "[24/7] MEJORKA.RU // DD2 DM:FFA 128 TR". Справа на данном сайте есть блок с мониторингом GameTracker, он показывает статистику сервера, да и можете зайти протестировать. Для статьи я сделал тестовый скриншот на сервере, в момент какого то матча [Скриншот тут]. Убедиться что это я - вот мой профиль Steam. Сервер работает в точности в таком режиме, как описано в статье!
  3. ПЛЮШКА! Оплата списывается ежедневно по факту использования, а не все 200/400 рублей сразу, поэтому технология и называется "облачной". Когда надоело - отключили.
  4. Во вкладке "Серверы" создаём новый сервер. 
  5. Называем по своему желанию, имя хоста можно выставить к примеру csgo01.vscale.io, выбираем первую или вторую конфигурацию, операционную систему Debian 7 64 bit
  6. Далее жмём "Сгенерировать пароль" и сохраняем его куда-нибудь. Это пароль root для всего сервера, не теряйте его! Необходим для подключения к серверу и управления. Можно так же создать ssh ключ, для подключения без пароля, но это для более опытных пользователей, мы опустим этот шаг.
  7. Далее жмём "Создать сервер", ждём пока он включится, и к нему привяжется внешний IP адрес.

Для управления сервером вы можете использовать консоль своей системы Linux, либо консоль программы Putty для Windows. У меня на домашнем ПК стоит Windows и для меня удобный вариант - это установить Debian на виртуальную машину (VMware).
Вот, например, торренты официальных дистрибутивов debian 8 "Jessie" 64 бит cdimage.debian.org (я использую удобную и красивую графическую оболочку KDE).

Настройка системы 

Подключаемся к серверу как root пользователь через консоль по SSH:

Код
ssh root@ip-address

Вставляем пароль, который мы должны были сохранить. Всё, мы в системе.

Обновляем систему

Код
apt-get update
apt-get upgrade

Русифицируем систему

Код
apt-get install console-cyrillic

Выбираем раскладку Russian и далее можно ничего не трогать

Код
dpkg-reconfigure locales

Выбираем следующие locales - RU-UTF8

Код
dpkg-reconfigure console-cyrillic

В конце выбираем сохранение языка при перезагрузке

И если у нас 64-битная система, установим для совместимости

Код
apt-get install lib32gcc1

Устанавливаем удобный консольный файловый менеджер и делаем его редактор по умолчанию

Код
apt-get install mc
update-alternatives --config editor

и выбираем mcedit (обычно под цифрой "2")

Устанавливаем утилиты, которые понадобятся

Код
apt-get install htop awk screen wget

Для устранения ошибки "libstdc++.so.6: cannot open shared object file: No such file or directory", связанной с совместимостью 32-битных библиотек на 64-битном дистрибутиве Linux. Так же необходимо для компиляции плагинов, если потребуется.

Код
apt-get install lib32stdc++6

Бывает, возникает ошибка "The following packages have unmet dependencies: ia32-libs : Depends: ia32-libs-multiarch but it is not installable". Тогда всё же следует полностью подключить 32-битную архитектуру в систему.

Код
dpkg --add-architecture i386
apt-get update
apt-get install lib32gcc1

При настройке безопасности системы обычно не используемые порты для всех подключений делаются закрытыми. В нашем случае, система свежеустановленная и не имеет правил фаервола. Если вы новичок - вам рано заморачиваться с этим, пропускаем этот пункт.

Но все же, если вы фанатичны к настройке iptables, или ваш проект будет популярен и высока вероятность DoS атак на сервер, то вам следует разобраться с этим, я лишь приведу личное мнение и ссылки и вырезки из оф. документации. 

Если сервер один, то обычно используют слушающий порт сервера - 27015. В таком случае, обычно серверу хватает открытых портов: 27015 по tcp/udp (либо для диапазона 27000:27050), 27005 и 27020 по udp протоколу.

Valve в своей wiki советует добавить следующие правила для избежания ошибки "Login Failure: No Connection":

Код
/sbin/iptables -A INPUT -p udp -m udp --sport 27000:27030 --dport 1025:65355 -j ACCEPT
/sbin/iptables -A INPUT -p udp -m udp --sport 4380 --dport 1025:65355 -j ACCEPT

Согласно базе знаний Steam для нормальной работы нужные порты тут - https://support.steampowered.com/kb_article.php?ref=8571-GLVN-8711&l=russian (но тут касательно клиента и другого)

Добавляем пользователя для steam и входим под ним (выйти обратно logout)

Код
useradd -m steam
su - steam

Для установки будет использоваться консольная оболочка SteamCMD
Теперь система подготовлена для работы.

Установка чистого дистрибутива сервера CS:GO

Создаём в домешнем каталоге вновь созданного пользователя - каталог steamcmd и перейдем в него

Код (bash)
mkdir ~/steamcmd
cd ~/steamcmd (что аналогично cd /home/steam/steamcmd)

Лучше пользоваться файловым менеджером MidnightCommander, который мы поставили в предыдущем пункте. Кратко (создать каталог - F7, удалить каталог/файл - F8, свернуться в консоль и обратно - Ctrl+O). Учтите, если вы запустили его от root пользователя, созданные каталоги будут с правами root, нам это не нужно! Работайте при установке от steam пользователя.

Закачиваем командную оболочку Steam и извлекаем из архива

Код (bash)
wget http://media.steampowered.com/installer/steamcmd_linux.tar.gz
tar -xvzf steamcmd_linux.tar.gz

Для других ОС можете использовать официальное руководство https://developer.valvesoftware.com/wiki/SteamCMD:ru

Входим в SteamCMD. Сервер CS:GO еще пока можно загрузить анонимно (не используя аккаунт Steam).

Код
login anonymous

В итоге выполнения должны получить «…Success»

Назначаем директорию, куда устанавливать дистрибутив. Я предпочитаю не ставить внутрь консольной оболочки, а ставить также в домашний каталог.

Код
force_install_dir ../csgo-ds

Мы хотим выполнить первоначальную установку или проверить целостность файлов сервера, для этого необходимо выполнить команду.

Код
app_update 740 validate

Чтобы просто обновить:

Код
app_update 740

При успешном скачивании выведет: «Success! App app_id fully installed». Выходим и чистим консоль.

Код
quit
clear

Еще есть проверка целостности файлов (если повреждены или отсутствуют)

Код
validate

Проверка перезапишет любые стандартные файлы, которые были изменены. Например, если настроить mapcycle.txt, этот файл будет перезаписан версией по умолчанию. Любые файлы, которые не являются частью установки по умолчанию не будут затронуты. 

Теперь переходим в каталог основных конфигураций сервера и создаем два важнейших конфигурационных файла.

Код (bash)
cd ~/csgo-ds/csgo/cfg
touch autoexec.cfg
touch server.cfg

Теперь дистрибутив готов к настройке! Следующим шагом я научу запускать сервер, и затем расскажу какие конфиги и для чего нужны в теперешнем CS:GO, какие преднастроеные режимы есть и как их переключать.

Управление сервером CS:GO. Первый запуск

Для управления сервером, а именно - корректный запуск, остановка, рестарт, проверка статуса запуска, обновления, - уже существуют готовые решения. В нашем случае, будет использоваться bash-скрипт, протестированный на Debian и Ubuntu. Ссылка на github - https://github.com/crazy-max/csgo-server-launcher

Я просто закачал оба файла в каталог с сервером. Но автор советует сделать изящнее, с удобным запуском в консоли. Итак, инструкция по установке скрипта от автора:

Код
cd /etc/init.d/
wget https://raw.githubusercontent.com/crazy-max/csgo-server-launcher/master/csgo-server-launcher.sh -O csgo-server-launcher --no-check-certificate
chmod +x csgo-server-launcher
update-rc.d csgo-server-launcher defaults
mkdir /etc/csgo-server-launcher/
wget https://raw.githubusercontent.com/crazy-max/csgo-server-launcher/master/csgo-server-launcher.conf -O /etc/csgo-server-launcher/csgo-server-launcher.conf --no-check-certificate

Этим самым файл настроек кладем в каталог конфигураций всех сервисов /etc, как и заведено в Linux. А управляющий скрипт в каталог /etc/init.d, что будет запускать скрипт при загрузке системы, используя системный демон init.d. Плюсом от этого будет использование скрипта как системного сервиса. Теперь сервер можно запускать, не указывая полное имя скрипта и пути.

Код
service csgo-server-launcher start

А Так же автор предлагает автоматическое обновление сервера с помощью системного планировщика CRON. Но нам это не нужно.

Настройки скрипта

SCREEN_NAME "csgo" - отображаемое имя создаваемого утилитой screen терминала 
USER "steam" - пользователь, под которым должен запускаться сервер, разумеется (создали ранее)
IP - WAN IP адрес. Указываем внешний IP адрес сервера из панели vscale.io, или смотрим командой ifconfig
PORT - Порт, который будет слушать сервер. Грубо говоря - на каком порту он запущен.

GSLT - Анонимные подключения скоро будут запрещены, поэтому рекомендуется создать токен по следующей ссылке (нужен steam аккаунт) : http://steamcommunity.com/dev/managegameservers Так же токены позволяют сохранять сервер у игроков в избранном, даже если IP адрес сервера поменялся. Так же можно задавать переменной sv_setsteamaccount в autoexec.cfg.

DIR_STEAMCMD - Путь до SteamCMD, т.е. "/home/steam/steamcmd"
STEAM_LOGIN - "anonymous"
STEAM_PASSWORD - "anonymous"
STEAM_RUNSCRIPT - Не трогаем. Имя скрипта для автообновлений, создаваемого на лету.

DIR_ROOT - корневая директория сервера, т.е. "/home/steam/csgo-ds"
DIR_GAME - путь к игре. не меняем
DIR_LOGS - директория логов. не меняем
DAEMON_GAME - стандартное имя демона для запуска сервера. не меняем

API_AUTHORIZATION_KEY - Для закачивания карт из Steam Workshop (которые отображаются специальной иконкой в списке серверов), серверу необходимы права доступа к Steam API. Сервер сам закачивает такие карты лишь по названию и ID. Если уже создан файл  webapi_authkey.txt с ключем, опция будет проигнорирована. Иначе, генерируем ключ авторизации : http://steamcommunity.com/dev/apikey
# WORKSHOP_COLLECTION_ID - Если ключ к SteamAPI создан, можно указать базовую коллекцию карт сервера для запуска. Подробнее: https://developer.valvesoftware.com/wiki/CSGO_Workshop_For_Server_Operators Если нужно - раскоментировать.
# WORKSHOP_START_MAP - Стартовая карта. Если нужно - раскоментировать.

MAXPLAYERS - Максимальное количество игроков. Пусть, 16.
TICKRATE - Тикрейт сервера (64 или 128), ставим второе.
EXTRAPARAMS - "-nohltv +sv_pure 0 +game_type 1 +game_mode 2 +mapgroup mg_active +map de_dust2"  Произвольные параметры запуска из командной строки. В примере режим сервера DeathMatch, и я не использую для запуска Workshop.

Если используется скрипт csgo-server-launcher, то консоль сервера предполагается вызывать командой 

Код
service csgo-server-launcher console

консоль будет открыта в отдельном окне-подтерминале, используя утилиту screen (сессия создается при старте сервера). Сервер работает только с включенным консольным интерфейсом и в фон уходить не умеет (следовательно другую работу с сервером в этом ssh подключении мы не сможем выполнять), для таких случаев и используется утилита screen. Выйти из консоли сервера (т.е. свернуть сессию screen), как напоминает разработчик, можно горячими клавишами Ctrl+A затем D. 

Бывает возникает ошибка типа "Cannot open your terminal '/dev/pts/0' - please check." Я решил эту проблему заменой строчки 116 в скрипте /etc/init.d/csgo-server-launcher

Код
su - $USER -c "screen -r $tmp"

на

Код
su - $USER -c "script -q -c 'screen -dr $tmp'"

Так же добавленный параметр d, будет перезагружать сессию, если вы теряли соединение с сервером по ssh.

Итоги

В данной статье я Вас научил работать со своим виртуальным сервером VPS, настраивать на нем для основных нужд систему Debian через консоль, разворачивать на ней чистый лицензионный steam дистрибутив игрового сервера CS:GO, научил удобному способу управления сервером, и многим другим ценным фишкам. Продолжение во второй части, в которой я рассмотрю подробную настройку сервера CS:GO - преднастроенные режимы CS:GO, их конфиги, созданные нами autoexec.cfg и server.cfg и другое...

С вами был Александр linkz (WaNTeD) Пудич.


Автор: Александр linkz
- 10 +
поделиться
WaNTeD от 24.01.2016
4775
1
WaNTeD | 24.01.2016 | 11:41
1
+ (0) -
вторая часть станет доступной 25.01.16 (завтра)
Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]
Сервера
el.MEJOR Team
Про сервачок
Про серв CS:S
Нужно знать
Наши опросы
У вас Стим?
Всего ответов: 8009
Партнеры