Сборка и установка 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