Как установить игровой сервер CSGO

Введение

Эта статья посвящена установке и настройке игрового сервера CSGO в системах Linux.
Требования
  • X86 / x64 совместимая система
  • Ubuntu 16.04 LTS
  • Установлены steamcmd
  • Сервер CX21 или лучше

Шаг 1 - Подготовка

Создание папки сервера CSGO, в которой будут найдены файлы сервера:
mkdir /opt/csgo/
chown steamcmd:steamcmd /opt/csgo/
Все команды должны быть выполнены как steamcmdпользователь.
su --shell /bin/bash steamcmd

Шаг 2 - Установка

Загрузите файлы сервера через steamcmd:
steamcmd +login anonymous +force_install_dir /opt/csgo/ +app_update 740 +quit
Как только сервер был загружен, настройки могут быть установлены.
Файл конфигурации сервера CSGO находится по адресу /opt/csgo/csgo/cfg/server.cfg. Здесь вы можете отредактировать и вставить образец конфигурации ниже.
// ************************************************************************** //
//     Counter-Strike: Global Offensive - server.cfg                          //
//     Version 240917                                                         //
// ************************************************************************** //
// .................................. Basic ................................. //

// Hostname - Name of the server.
hostname "SERVERNAME"

// RCON - remote console password.
rcon_password "ADMINPASSWORD"

// Server password - for private servers.
sv_password ""

// Email - Server admin email.
// Example: sv_contact "email@example.com"
sv_contact ""

// LAN mode - If set the server will not show on the internet.
// Default: sv_lan 0
sv_lan 0

// ............................. Server Logging ............................. //

// Enable log - Enables logging to file, console, and udp < on | off >.
// Recommended: log on
log on

// Log bans - Log server bans in the server logs.
// Default: sv_logbans 1
// Recommended: sv_logbans 1
sv_logbans 1

// Log echo - Display log information to the server console.
// Default: sv_logecho 1
// Recommended: sv_logecho 1
sv_logecho 1

// Log file - Log server information in the log file.
// Default: sv_logfile 1
// Recommended: sv_logfile 1
sv_logfile 1

// One file log - Log server information to only one file.
// Default: sv_log_onefile 0
// Recommended: sv_log_onefile 0
sv_log_onefile 0

// Server Hibernation
sv_hibernate_when_empty 1
sv_hibernate_ms 5

// ............................. Server Query ............................. //
// More info at: https://www.gametracker.com/games/csgo/forum.php?thread=91691
host_name_store 1
host_info_show 1
host_players_show 2

// ................................ Ban List ................................ //

// User ban - Server banlist based on user steam ID.
// Recommended: exec banned_user.cfg
exec banned_user.cfg

// IP ban - Server banlist based on user IP.
// Recommended: exec banned_ip.cfg
exec banned_ip.cfg

// Write ID - Writes a list of permanently-banned user IDs to banned_user.cfg.
writeid

// Write IP - Save the ban list to banned_ip.cfg.
writeip

Шаг 3 - Администрирование сервера

Для управления (запуска, остановки, обновления) сервера требуется следующий скрипт.
Большинство настроек могут быть применены без изменений, только запись GAMETOKENдолжна быть изменена. Действительный токен сервера должен быть депонирован. Серверные токены можно запросить здесь: https://steamcommunity.com/dev/managegameservers
(На низкоэффективных серверах TICKзапись должна быть сокращена до 64.)
#!/bin/bash

################# SET VARs #################

DIR="/opt/csgo"
SCREENNAME="csgo"

GAMETOKEN=""
TICK=128
GAMETYPE=0
GAMEMODE=1
MAPGROUP="mg_bomb"
MAP="de_dust2"
MAXPLAYER=10

################# DO NOT MODIFY #################

DEAMON="srcds_run"
PARAMS="-game csgo -ip 0.0.0.0 -port 27015 +maxplayers $MAXPLAYER +map $MAP -tickrate $TICK +game_type $GAMETYPE +game_mode $GAMEMODE +mapgroup $MAPGROUP +sv_setsteamaccount $GAMETOKEN"

function start_server {
    if [[ `screen -ls | grep $SCREENNAME` ]]; then
        echo "The server is already running $SCREENNAME"
    else
        echo "Starte $SCREENNAME"
        if [ -d $DIR ]; then
           cd $DIR
           screen -d -m -S $SCREENNAME ./$DEAMON $PARAMS
        else 
           echo "The server directory was not specified"
        fi
    fi
}

function stop_server {
    if [[ `screen -ls | grep $SCREENNAME` ]]; then
        echo -n "Stoppe $SCREENNAME"
        kill `screen -ls | grep $SCREENNAME | awk -F . '{print $1}'| awk '{print $1}'`
        echo " ... done."
    else
        echo "Could not find the screen $SCREENNAME"
    fi
}

function update_server {
    stop_server
    steamcmd +login anonymous +force_install_dir $DIR +app_update 740 +quit
    start_server
}

case "$1" in
start)
    start_server
;;

stop)
    stop_server
;;

restart)
    stop_server
    start_server
;;

update)
    update_server
;;

  *)
    echo "Usage: $0  (start / stop / update)"
esac

exit 0
Например, скрипт можно разместить по адресу /opt/steamcmd/csgo.sh.
После этого должны быть предоставлены разрешения для запуска скрипта:
chmod +x /opt/steamcmd/csgo.sh
Теперь необходима запись службы systemd. Запись сделана по адресу /etc/systemd/system/csgo.service:
[Unit]
Description=Counter-Strike: Global Offensive Server (SRCDS)
After=local-fs.target network.target

[Service]
User=steamcmd
Group=steamcmd

ExecStart=/opt/steamcmd/csgo.sh start
ExecStop=/opt/steamcmd/csgo.sh stop
Type=forking

[Install]
WantedBy=multi-user.target
Только что созданная запись должна быть активирована с помощью команды systemctl daemon-reload. Теперь сервер CSGO может быть запущен или остановлен с помощью systemctl start csgoи systemctl stop csgo.
Для настройки автоматического обновления сервера необходима следующая запись в crontab -e:
0 4 * * * systemctl stop csgo && su --shell /bin/bash steamcmd -c "/opt/steamcmd/csgo.sh update" && systemctl start csgo >/dev/null 2>&1
Эта запись будет выполняться каждый день в 4:00 утра.

Поиск проблемы

Если при подключении возникнут проблемы screen, вы увидите следующую ошибку:
Cannot open your terminal '/dev/pts/0' - please check.
Чтобы решить эту проблему, выполните эту команду в текущем сеансе:
script /dev/null
После этого screenснова возможно соединение с сеансом.

Вывод

Если вы следовали этому руководству до этого момента, у вас есть собственный CSGO-сервер, который автоматически обновляется.

Добавить комментарий

Автору будет очень приятно узнать обратную связь о своем руководстве.

Комментариев 0