Сборка и установка docker-контейнера Counter-Strike 1.6

Устанавливаемые компоненты

rehlds-3.14.0.857
regamedll_cs-5.28.0.756
metamod-r 1.3.0.149
amxmodx-1.9.0
reunion-0.2.0.25
reapi-5.26.0.338
nginx_fastdl

Рекомендуемые требования для VPS
Виртуализация: KVM
Дистрибутив: Debian/Ubuntu
RAM: 1ГБ
SSD: 10ГБ
Открытые порты: 27015/udp, 8283/tcp

Базовая настройка системы

выполняем команды от пользователя root
или получаем права суперпользователя

sudo -i

устанавливаем программы

apt update && apt install mc git unzip openssl micro -y

устанавливаем docker

curl -fsSL https://get.docker.com | sh

создаём пользователя hlds (отвечаем на вопросы и задаём пароль пользователю)

adduser hlds

добавляем пользователя hlds в группу sudo и docker

usermod -aG sudo,docker hlds

переключаемся на пользователя hlds
далее выполняем команды от пользователя hlds

su - hlds

создаём рабочий каталог и переходим в него

mkdir -p ${HOME}/docker_cs && cd ${HOME}/docker_cs

клонируем репозиторий docker_cs в текущий каталог

git clone https://github.com/gnufanat/docker_cs .

Настройка сервера

📝 откройте файл: .env

mcedit .env

стандартный порт можно изменить на другой доступный порт

SERVER_PORT=27015

укажите ip-адрес сервера

SERVER_IP=ip_адрес_сервера

если нужно запустить сервер с 500FPS вместо 1200FPS

SYS_TICRATE=500
PING_BOOST=2

укажите количество игроков на сервере

MAX_PLAYERS=32

укажите стартовую карту на сервере

START_MAP=de_dust2

📝 Откройте файл: server.cfg

mcedit server.cfg

измените ip-адрес быстрой закачки (fastdl)

sv_downloadurl "http://ip_адрес_сервера:8283/cstrike/"

измените rcon-проль на свой

rcon_password "надёжный_rcon_пароль"

📟 готовая команда для автоматической вставки ip-адреса сервера в файлах .env и server.cfg

IPH=$(hostname -I | awk '{print $1}') && grep -q '^SERVER_IP=' .env 2>/dev/null && sed -i "s/^SERVER_IP=.*/SERVER_IP=$IPH/" .env || echo "SERVER_IP=$IPH" >> .env && grep -q '^sv_downloadurl' server.cfg 2>/dev/null && sed -i "s|^sv_downloadurl.*|sv_downloadurl \"http://$IPH:8283/cstrike/\"|" server.cfg || echo "sv_downloadurl \"http://$IPH:8283/cstrike/\"" >> server.cfg

📟 готовая команда для автоматической генерации и вставки rcon-пароля в server.cfg

RCON=$(openssl rand -base64 32 | tr -dc 'A-Za-z0-9' | head -c 24) && (grep -q '^rcon_password' server.cfg 2>/dev/null && sed -i "s|^rcon_password.*|rcon_password \"$RCON\"|" server.cfg || echo "rcon_password \"$RCON\"" >> server.cfg)

📝 откройте файл: compose.yml

mcedit compose.yml

ядро и оперативная память

cpuset: "0"
mem_limit: "512m"

cpuset - определяет на каком ядре будет работать сервер (привязка к ядру)
mem_limit - определяет количество оперативной памяти которое доступно контейнеру, при превышении лимита - сервер будет перезагружен.

настройка порта для быстрой закачки (fastdl)

ports:
  - "8283:80"

ports: - внешний (8283) и внутренний порт контейнера (80)

Создаём образ и контейнеры

создаём образ с именем cs

docker build --build-arg USER_UID=$(id -u) --build-arg USER_GID=$(id -g) -t cs:latest .

создаём контейнер-донор, копируем файлы на хост, удаляем контейнер-донор

id=$(docker create cs:latest) && mkdir -p ./store && rm -rf ./store/* && docker cp $id:/home/hlds/store/cstrike/. ./store && docker rm $id

❗файлы сервера в каталоге ./store будут доступны всегда, даже после удаления контейнера❗

создать список карт на сервере

find ./store/maps -type f -name "*.bsp" -exec bash -c '[ ! -f "$1.bz2" ] && bzip2 -k "$1"; basename "$1" .bsp' _ {} \; > ./store/addons/amxmodx/configs/maps.ini

добавить администратора по IP-адресу

ipa=$(last -i | awk 'NF && $3 ~ /([0-9]+\.){3}[0-9]+/ {print $3; exit}'); [ "$ipa" = "0.0.0.0" ] && ipa=$(hostname -I | awk '{print $1}'); grep -qxF "\"${ipa}\" \"\" \"abcdefghijklmnopqrstuv\" \"de\"" ./store/addons/amxmodx/configs/users.ini || echo "\"${ipa}\" \"\" \"abcdefghijklmnopqrstuv\" \"de\"" >> ./store/addons/amxmodx/configs/users.ini

добавить администратора по SteamID steamid="STEAM_0:1:000000000" - заменить на нужный

steamid="STEAM_0:1:000000000"; grep -qxF "\"$steamid\" \"\" \"abcdefghijklmnopqrstu\" \"ce\"" ./store/addons/amxmodx/configs/users.ini || echo "\"$steamid\" \"\" \"abcdefghijklmnopqrstu\" \"ce\"" >> ./store/addons/amxmodx/configs/users.ini

запускаем проект

docker compose -p hlds up -d

Полезные команды

запуск проекта

docker compose -p hlds up -d

остановка проекта

docker compose -p hlds down

перезапуск проекта

docker compose -p hlds restart

пересборка проекта с учётом изменений

docker compose -p hlds build --no-cache

интерфейс командной сроки контейнера, позволяет работать в командной строке

docker exec -it hlds bash
docker exec -it fastdl bash

просмотр логов контейнера

docker logs -f hlds
docker logs -f fastdl

запуск контейнера

docker start hlds
docker start fastdl

oстановка контейнера

docker stop hlds
docker stop fastdl

перезапуск контейнера

docker restart hlds
docker restart fastdl

Удаление docker_cs

останавливаем и удаляем docker-проект, очищаем все неиспользуемые ресурсы
выполняем команду от пользователя hlds

cd ~/docker_cs && docker compose -p hlds down && docker system prune -a --volumes -f

выполняем команды от пользователя root
или получаем права суперпользователя

sudo -i

полностью удаляем docker

apt purge -y docker-ce docker-ce-cli containerd.io docker-compose-plugin docker-buildx-plugin docker-ce-rootless-extras && rm -f /etc/apt/sources.list.d/docker.list /etc/apt/keyrings/docker.asc && rm -rf /var/lib/docker /var/lib/containerd && apt autoremove -y && groupdel docker && apt update

удаляем пользователя hlds

userdel -r hlds