Сервер Counter Strike v.1.6 + статистика PsychoStats v.3.2.2b.
Реализовано в Docker контейнерах на VPS в ОС Debian 11.
Для удобства, файлы из контейнеров, требующие админской правки, прокидываю в директорию ~/share на хостовой машине. В дальнейшем эту директорию можно расшарить для Windows по smb.
Перед установкой залить на VPS директорию share. Я это делаю через VSCode-плагин SFTP
Основу взял с counter-strike-docker.
Поправил до актульного состояния, см. Dockerfile:
- HLDS ставится через официальный SteamCMD, Command_Line_Options
- metamod я ставлю с https://www.amxmodx.org
- dproto нашел самый новый, но он все равно не работает с последними версиями hlds. В пекло.
- AMX mod X я ставлю с http://www.amxmodx.org
Делаем image hlds16:latest
sudo docker build \
--build-arg steam_user=STEAM_USER_HERE \
--build-arg steam_password=STEAM_PASS_HERE \
-t hlds16:latest \
~/share/docker_images/counter-strike-docker
В этом проекте не храню содержимое addons. Базовое содержимое addons сейчас вытащим на хостовую машину:
mkdir -p ~/share/cstrike
sudo docker run -d --name cs_tmp hlds16:latest
sudo docker cp cs_tmp:/opt/hlds/cstrike/addons ~/share/cstrike/addons
sudo docker rm -f cs_tmp
sudo chmod -R 777 ~/share/cstrike/addons
# статистика от amxx
vi ~/share/cstrike/addons/amxmodx/configs/plugins.ini
#--- раскомментарить
stats_logging.amxx
#---
Стартуем контейнер hlds16
sudo docker run -d \
-e START_MAP=de_dust2_2x2 \
-e SERVER_NAME="ars test" \
-e ADMIN_STEAM=0:1:43198336 \
--network host \
-v ~/share/cstrike/addons:/opt/hlds/cstrike/addons \
-v ~/share/cstrike/logs:/opt/hlds/cstrike/logs \
--name hlds16 hlds16:latest
sudo docker logs hlds16
Статистика это PHP-код + Perl-парсер логов с использованием MySQL.
см. doc
sudo docker run \
--name mysql-57 \
-d \
--network=host \
-v ~/share/mysql:/mnt/mysql \
mysql/mysql-server:5.7
Создаем пользователя admin
# смотрим пароль root
sudo docker logs mysql-57 2>&1 | grep GENERATED
# работаем с базой
sudo docker exec -it mysql-57 mysql -uroot -p
ALTER USER 'root'@'localhost' IDENTIFIED BY 'rootpass';
CREATE USER 'admin'@'%' IDENTIFIED BY 'adminpass';
GRANT ALL PRIVILEGES ON *.* TO 'admin'@'%';
FLUSH PRIVILEGES;
SELECT User, Host FROM mysql.user;
см. doc
sudo docker run \
--name nginx \
-d \
--network=host \
-v ~/share/nginx/www:/mnt/www \
-v ~/share/nginx/conf.d:/etc/nginx/conf.d \
nginx:stable
sudo docker logs nginx
Распаковываю проект PsychoStats
sudo apt install unzip
unzip ~/cstrike/PsychoStats_3.2.2b.zip -d ~/cstrike/
# заменяем корявые PHP-скрипты
cp -R ~/cstrike/ps/* ~/cstrike/PsychoStats-3.2.2b/upload/
# Размещаем сайт в директории ps
cp -R ~/cstrike/PsychoStats-3.2.2b/upload ~/share/nginx/www/ps
см. doc., 5.4 подсматривал у johanvanhelden/dockerhero
sudo docker images
sudo docker build -t php-fpm-my:54 ~/share/docker_images/php-fpm-54/
sudo docker run \
--name php-fpm-54 \
-d \
--network=host \
-v ~/share/nginx/www:/mnt/www \
-v ~/share/cstrike/logs:/mnt/cstrike/logs \
php-fpm-my:54
sudo docker logs php-fpm-54
Проверяем nxinx+php-fpm - http://65.108.82.45/index.php
Инсталируем сайт - http://65.108.82.45/ps/install/
После инсталяции настраиваю логи http://65.108.82.45/ps/admin/logsources_edit.php > /mnt/cstrike/logs
lib + stats.pl буду запускать в php-fpm контейнере
mkdir -p ~/share/nginx/www/ps/stat_parser
cp -R ~/cstrike/PsychoStats-3.2.2b/lib ~/share/nginx/www/ps/stat_parser/
cp ~/cstrike/PsychoStats-3.2.2b/stats.pl ~/share/nginx/www/ps/stat_parser/
vi ~/share/nginx/www/ps/stat_parser/stats.pl
#---
dbtype = mysql
dbhost = 127.0.0.1
dbport = 3306
dbname = psychostats3
dbuser = admin
dbpass = adminpass
dbtblprefix = ps_
#---
sudo docker exec -it php-fpm-54 bash
apt install libdbi-perl libdbd-mysql-perl
perl /mnt/www/ps/stat_parser/stats.pl
cron на хостовой машине
sudo crontab -e
#---
* * * * * docker exec php-fpm-54 /usr/bin/perl /mnt/www/ps/stat_parser/stats.pl 1>/dev/null 2>&1
#---
rm -rf ~/share/nginx/www/ps/install
rm -rf ~/cstrike/PsychoStats-3.2.2b
rm -f ~/cstrike/Readme~.txt
rm -f ~/share/nginx/www/index.php
Подсматривал server.cfg тут.
- Залить модифицированные конфиги из директории cstrike на VPS.
- Закинуть их в контейнер:
sudo docker cp ~/cstrike/server.cfg hlds16:/opt/hlds/cstrike/server.cfg
sudo docker cp ~/cstrike/mapcycle.txt hlds16:/opt/hlds/cstrike/mapcycle.txt
sudo docker cp ~/cstrike/motd.txt hlds16:/opt/hlds/cstrike/motd.txt
sudo docker cp ~/cstrike/hlds_run.sh hlds16:/bin/hlds_run.sh
Выкладываю ресурсы из cstrike на nginx:
mkdir ~/share/nginx/www/cstrike
sudo docker cp hlds16:/opt/hlds/cstrike/maps ~/share/nginx/www/cstrike/maps
Просто глянем:
# админы
vi ~/share/cstrike/addons/amxmodx/configs/users.ini
# amx
vi ~/share/cstrike/addons/amxmodx/configs/amxx.cfg
# sql
vi ~/share/cstrike/addons/amxmodx/configs/sql.cfg
# Сюда буду компилировать .sma
mkdir -p ~/share/cstrike/addons/amxmodx/scripting/compiled
https://cs-mod.ru/load/plaginy_dlja_cs_1_6/servernye/plagin_parashjut_dlja_ks_1_6/98-1-0-220
cp ~/cstrike/addons/amxmodx/plugins/amx_parachute.amxx ~/share/cstrike/addons/amxmodx/plugins/
cp ~/cstrike/addons/amxmodx/scripting/amx_parachute.sma ~/share/cstrike/addons/amxmodx/scripting/
https://cs-mod.ru/load/plaginy_dlja_cs_1_6/statistika/plagin_damager_dlja_cs_1_6/95-1-0-165
cp ~/cstrike/addons/amxmodx/plugins/damager.amxx ~/share/cstrike/addons/amxmodx/plugins/
cp ~/cstrike/addons/amxmodx/scripting/damager.sma ~/share/cstrike/addons/amxmodx/scripting/
cp ~/cstrike/addons/amxmodx/scripting/Blue_Fade.sma ~/share/cstrike/addons/amxmodx/scripting/
sudo docker exec -w /opt/hlds/cstrike/addons/amxmodx/scripting hlds16 ./amxxpc Blue_Fade.sma -ocompiled/Blue_Fade.amxx
cp ~/share/cstrike/addons/amxmodx/scripting/compiled/Blue_Fade.amxx ~/share/cstrike/addons/amxmodx/plugins/
cp ~/cstrike/addons/amxmodx/plugins/antidoubleduck.amxx ~/share/cstrike/addons/amxmodx/plugins/
cp ~/cstrike/addons/amxmodx/scripting/antidoubleduck.sma ~/share/cstrike/addons/amxmodx/scripting/
cp ~/cstrike/addons/amxmodx/scripting/map_chooser.sma ~/share/cstrike/addons/amxmodx/scripting/
sudo docker exec -w /opt/hlds/cstrike/addons/amxmodx/scripting hlds16 ./amxxpc map_chooser.sma -ocompiled/map_chooser.amxx
cp ~/share/cstrike/addons/amxmodx/scripting/compiled/map_chooser.amxx ~/share/cstrike/addons/amxmodx/plugins/
cp ~/cstrike/addons/amxmodx/configs/maps.ini ~/share/cstrike/addons/amxmodx/configs/
vi ~/share/cstrike/addons/amxmodx/configs/plugins.ini
#--
;nextmap.amxx ; OFF
;mapchooser.amxx ; OFF
;timeleft.amxx ; OFF
amx_parachute.amxx
damager.amxx
Blue_Fade.amxx
antidoubleduck.amxx
map_chooser.amxx
#--
sudo docker restart hlds16