Added base ReHLDS server

This commit is contained in:
2025-06-23 18:32:38 +00:00
parent f1baaf0f00
commit 27f0b96306
24 changed files with 271 additions and 176 deletions

11
.env
View File

@ -1,11 +0,0 @@
# Server vars
HOSTNAME=GO YASOZDAL | CSDM
PORT=27015
HLTV_PORT=27020
VAC="secure"
SV_LAN=0
# Gameplay settings
START_MAP="de_dust2"
MAX_PLAYERS=32
RCON_PASSWORD=9OrEQYdj/ulkf0uC4JKr220+

View File

@ -1,10 +0,0 @@
# Server vars
SERVER_NAME="GO YASOZDAL | CSDM"
PORT=27015
HLTV_PORT=27020
VAC="insecure"
SV_LAN=0
# Gameplay settings
START_MAP="de_dust2"
MAX_PLAYERS=32

View File

@ -1,49 +1,63 @@
FROM ubuntu:20.04
FROM ubuntu:22.04
ENV DEBIAN_FRONTEND=noninteractive
RUN echo "=== Updating Ubuntu ===" && \
dpkg --add-architecture i386 && \
apt-get update && \
apt-get install -y software-properties-common && \
add-apt-repository ppa:ubuntu-toolchain-r/test && \
apt-get update && \
apt-get install -y \
build-essential \
gcc-11 \
g++-11 \
g++-11-multilib \
libc6-dev:i386 \
libc6:i386 \
libstdc++6:i386 \
lib32stdc++6 \
zlib1g:i386 \
wget \
cmake \
git \
ca-certificates && \
rm -rf /var/lib/apt/lists/*
RUN apt update && apt install -y \
curl \
ca-certificates \
lib32gcc-s1 \
lib32stdc++6 \
unzip \
&& rm -rf /var/lib/apt/lists/*
# Устанавливаем SteamCMD и загружаем через него оригинальный HLDS + CS 1.6:
RUN echo "=== Installing SteamCMD & HLDS ===" && \
mkdir -p /opt/hlds /opt/steamcmd && cd /opt/steamcmd && \
wget http://steamcdn-a.akamaihd.net/client/installer/steamcmd_linux.tar.gz && \
tar xvfz steamcmd_linux.tar.gz && \
./steamcmd.sh \
+@sSteamCmdForcePlatformType linux \
+force_install_dir /opt/hlds \
+login anonymous \
+app_set_config 90 mod cstrike \
+app_update 90 -beta steam_legacy validate \
+quit
# Создаем нужные директории
RUN mkdir -p /steamcmd /hlds
# Устанавливаем ReHLDS и помещаем с заменой в HLDS
RUN echo "=== Installing ReHLDS ===" && \
cd /opt/ && \
git clone https://github.com/rehlds/ReHLDS.git && \
cd ReHLDS && \
chmod +x build.sh && \
./build.sh --compiler=gcc --jobs=$(nproc) -DDEBUG=OFF && \
mv ./build/rehlds/HLTV/Console/hltv /opt/hlds/hltv && \
mv ./build/rehlds/HLTV/Core/core.so /opt/hlds/core.so && \
mv ./build/rehlds/HLTV/DemoPlayer/demoplayer.so /opt/hlds/demoplayer.so && \
mv ./build/rehlds/HLTV/Director/director.so /opt/hlds/valve/dlls/director.so && \
mv ./build/rehlds/HLTV/Proxy/proxy.so /opt/hlds/proxy.so && \
mv ./build/rehlds/engine_i486.so /opt/hlds/engine_i486.so && \
mv ./build/rehlds/dedicated/hlds_linux /opt/hlds/hlds_linux && \
mv ./build/rehlds/filesystem/FileSystem_Stdio/filesystem_stdio.so /opt/hlds/filesystem_stdio.so && \
cd /opt/ && \
rm -rf ReHLDS && \
rm /opt/hlds/libstdc++.so.6 && \
rm /opt/hlds/libgcc_s.so.1
WORKDIR /steamcmd
# Скачиваем и распаковываем steamcmd
RUN curl -sSL https://steamcdn-a.akamaihd.net/client/installer/steamcmd_linux.tar.gz | tar -xz
# Скачиваем HLDS с нужной beta-версией
RUN ./steamcmd.sh +@sSteamCmdForcePlatformType linux \
+login anonymous \
+force_install_dir /hlds \
+app_set_config 90 mod cstrike \
+app_update 90 -beta steam_legacy validate \
+quit
# Удаляем ненужные steam-библиотеки, если вдруг попали
RUN rm -f /hlds/steamclient.so /hlds/libsteam_api.so /hlds/steam_api.so
# Копируем файлы ReHLDS (должен быть ./rehlds/bin/linux32/ внутри контекста билда)
COPY rehlds/ /hlds/
# Делаем основной бинарник исполняемым
RUN chmod +x /hlds/hlds_linux
# Копируем start.sh (обязателен для запуска)
COPY start.sh /start.sh
RUN chmod +x /start.sh
# Указываем точку входа
ENTRYPOINT ["/start.sh"]
# Открываем нужные порты
# Открываем порт и задаём команду запуска сервера
EXPOSE 27015/udp
EXPOSE 27020/udp
WORKDIR /opt/hlds
CMD ["/opt/hlds/hlds_run", "-console", "-game", "cstrike", "+map", "de_dust2"]
SHELL ["/bin/bash", "-c"]
#CMD ["sleep", "infinity"]

48
Jenkinsfile vendored
View File

@ -1,48 +0,0 @@
pipeline {
agent any
environment {
FASTDL_CONTAINER = "fastdl"
FASTDL_PATH = "/usr/share/nginx/html"
TARGET_DIR = "/opt/game-servers/csdm"
REPO_URL = "https://gitea.go-yasozdal.ru/yvnger/csdm"
BRANCH = "main"
}
stages {
stage("Prepare Deploy Directory") {
steps {
sh '''
rm -rf $TARGET_DIR
git clone --branch $BRANCH $REPO_URL $TARGET_DIR
'''
}
}
stage("Build Docker Image") {
steps {
dir("$TARGET_DIR") {
sh 'docker build -t csserver:csdm .'
}
}
}
stage("Deploy with Compose") {
steps {
dir("$TARGET_DIR") {
sh 'docker-compose down || true'
sh 'docker-compose up -d'
}
}
}
}
post {
failure {
echo 'Build failed. Check logs.'
}
success {
echo 'Server deployed successfully.'
}
}
}

View File

@ -1,2 +0,0 @@
# csdm

105
configs/amxx.cfg Normal file
View File

@ -0,0 +1,105 @@
// AMX Mod X - Глобальный файл конфигурации (amxx.cfg)
// Все настройки ниже применяются ко всем картам при запуске AMX Mod X.
echo [AMX Mod X] Исполняется файл конфигурации AMX Mod X
// Стандартный доступ для всех игроков (не админов):
amx_default_access "z" // по умолчанию флаг "z" (нет админских прав)
// Название поля setinfo для пароля администратора (если используется авторизация по нику)
amx_password_field "pass" // (Например: setinfo _pass "mypassword")
// Режим проверки админов (логирование):
// 0 - не проверять (логирование выкл., админские права не устанавливаются)
// 1 - обычный режим (проверять по users.ini с соблюдением флагов доступа)
// 2 - выгонять всех, кто не в списке (users.ini)
amx_mode "1"
// Отображение активности админов в чате:
// 0 - отключено ничего не показывать
// 1 - показывать действия админа без имени ("Админ: ...")
// 2 - показывать действия с указанием имени администратора
amx_show_activity "0"
// Прокручиваемое сообщение (бегущая строка) и частота:
// format: amx_scrollmsg "сообщение" <интервал_в_секундах>
amx_scrollmsg "Добро пожаловать на наш сервер CS 1.6! Приятной игры!" 80
// Центрированное цветное сообщение и цвет в формате RRRGGGBBB (закомментировано, при необходимости замените * на текст):
//amx_imessage "Текст сообщения в центре экрана" "000255000"
// Частота вывода цветного сообщения (в секундах)
amx_freq_imessage "60"
// Настройка защиты от флуд-чата (через сколько секунд можно снова отправить сообщение)
amx_flood_time "0.35"
// Количество зарезервированных слотов (требуется amx_hideslots 1, подробнее в описании плагина)
amx_reservation "1"
// Скрывать зарезервированные слоты (1 = да, слот не виден в счетчике игроков для обычных игроков)
amx_hideslots "1"
// Настройки отображения оставшегося времени карты (для команды timeleft):
// a - показывать белым текстом внизу экрана
// b - озвучивать голосом
// c - не добавлять слово "remaining/осталось" (в голосовом оповещении)
// d - не озвучивать единицы времени "hours/minutes/seconds" (в голосовом)
// e - показывать/озвучивать предупреждение, если оставшееся время меньше заданного
amx_time_display "a 1200" "a 600" "a 300" "a 180" "ab 60" "bcde 11"
// Озвучивать голосом команды "thetime" и "timeleft" (текущее время/осталось времени)
amx_time_voice "0"
// Минимальная задержка между голосованиями (секунд)
amx_vote_delay "15"
// Длительность голосования (секунд)
amx_vote_time "15"
// Показывать, кто за что проголосовал (1 = показывать, 0 = не показывать)
amx_vote_answers "1"
// Требуемый процент игроков для успешного голосования (kick, ban, map и обычное)
amx_votekick_ratio "0.40"
amx_voteban_ratio "0.75"
amx_votemap_ratio "0.40"
amx_vote_ratio "0.50"
// Максимальное время продления карты (в минутах)
amx_extendmap_max "90"
// Шаг продления карты при голосовании (в минутах)
amx_extendmap_step "15"
// Режим ранжирования игроков (статистика HLstatsX / csstats):
// 0 - по нику игрока
// 1 - по уникальному идентификатору (SteamID/AuthID)
// 2 - по IP адресу
csstats_rank "1"
// Сброс статистики (0 - не сбрасывать, 1 - сбросить статистику)
csstats_reset "0"
// Максимальный размер файла со статистикой (число записей рейтинга)
csstats_maxsize "3500"
// Длительность показа статистики HUD после убийства (секунд)
amx_statsx_duration "12.0"
// Задержка очистки HUD-статистики относительно конца фризтайма раунда (секунд)
// (отрицательное значение очистит HUD-статистику до окончания фризтайма)
amx_statsx_freeze "2.0"
// Разрешить клиентам выбирать язык сообщений AMX Mod X (0 - фиксированный сервером, 1 - клиент может выбрать)
amx_client_languages "1"
// Режим отладки плагинов:
// 0 - отключить отладку
// 1 - только для плагинов с флагом "debug" в plugins.ini
// 2 - для всех плагинов (может снизить производительность!)
amx_debug "0"
// Режим отладки мультиязычных сообщений (для отладки конкретного языка укажите код, например "en")
// По умолчанию "" (пустая строка) = отключено
amx_mldebug ""

59
configs/server.cfg Normal file
View File

@ -0,0 +1,59 @@
// Основной конфигурационный файл сервера Counter-Strike 1.6
hostname "Публичный сервер CS 1.6" // имя сервера в списке
rcon_password "SOME_RCON_PASSWORD" // Пароль rcon (смените на свой!)
sv_password "" // Пароль на вход (пусто для публичного сервера)
sv_lan "0" // Режим LAN (0 = интернет сервер)
sv_region "255" // Регион сервера (255 = весь мир)
sv_contact "admin@myserver.ru" // Контактные данные администратора
// Настройки логирования и защиты rcon
log "on" // Включить логирование событий в файл лога
sv_logbans "1" // Логировать баны в файл
sv_logecho "0" // Не дублировать логи в консоль сервера
sv_logfile "1" // Логировать события в файл (1 - да)
sv_rcon_banpenalty "60" // Время бана (в минутах) за неверный rcon пароль
sv_rcon_maxfailures "5" // Число попыток rcon перед баном
sv_rcon_minfailures "2" // Минимальное число неверных попыток для бана
sv_rcon_minfailuretime "30" // Интервал (в секундах) для подсчета неверных rcon попыток
sv_cheats "0" // Запрет читерских команд (sv_cheats)
// Настройки загрузки файлов
sv_allowupload "1" // Разрешить загрузку пользовательских спрей-логотипов на сервер
sv_allowdownload "1" // Разрешить загрузку файлов с сервера клиентам
sv_downloadurl "" // URL для быстрой скачки файлов (FastDL), если есть
// Настройки голосового общения
sv_voiceenable "1" // Включить голосовой чат
sv_voicecodec "voice_speex" // Кодек для голосового чата (Speex для лучшего качества)
sv_voicequality "5" // Качество звука 1-5 (5 = наилучшее, требует voice_speex)
// Ограничения частоты обновления и передачи данных
sv_maxrate "0" // Максимальная скорость передачи данных (0 = без лимита)
sv_minrate "0" // Минимальная скорость передачи данных
sv_maxupdaterate "101" // Максимальная частота обновления (кадров в секунду) от сервера
sv_minupdaterate "20" // Минимальная частота обновлений от сервера
// Настройки игры
mp_autoteambalance "1" // Включить авто-баланс команд
mp_limitteams "2" // Ограничение разницы игроков в командах (макс. 2)
mp_friendlyfire "0" // Отключить friendly fire (урон по союзникам)
mp_autokick "0" // Отключить автокик за бездействие/ командное убийство
// Настройки производительности
sys_ticrate "1000" // Максимальная частота тиков сервера (для высоких FPS)
fps_max "1000" // Максимальный FPS сервера
// Прочие настройки
mapchangecfgfile "server.cfg" // Файл настроек, выполняемый при смене карты
mapcyclefile "mapcycle.txt" // Файл списка карт (цикл карт)
motdfile "motd.txt" // Файл сообщения дня (приветствие MOTD)
exec banned.cfg // Автозагрузка списка забаненных SteamID
exec listip.cfg // Автозагрузка списка забаненных IP
// Загрузка настроек ботов (если используются боты)
exec addons/podbot/podbot.cfg // Настройки PodBot (путь при использовании PodBot)
//exec bot.cfg // Использовать этот файл, если применяются стандартные CZ-bots
// Включение статистических плагинов AMX Mod X (таких как statsx.amxx)
amx_statscfgmenu 0 // Отключить меню настроек статистики (будет настроено вручную плагином)

44
configs/users.ini Normal file
View File

@ -0,0 +1,44 @@
; AMX Mod X - Файл пользователей (admins)
; Формат записи:
; "идентификатор" "пароль" "флаги_доступа" "флаги_авторизации"
; Идентификатор может быть SteamID, адрес IP или ник игрока.
; Для SteamID в качестве идентификатора используйте формат "STEAM_X:X:XXXXXXX".
; Пароль обычно не требуется для SteamID и IP (оставлять пустым между кавычками).
; Флаги доступа:
; a - иммунитет (защита от кика/бана и т.д.),
; b - резервирование слота,
; c - базовые команды администратора (kick, slap и др.),
; d - бан игроков,
; e - удаление банов,
; f - slay и slap,
; g - смена карт,
; h - изменение CVAR,
; i - выполнение конфигов (exec),
; j - высокая чат активность (использование @ в чате),
; k - голосование,
; l - пароль (установленный с amx_password),
; m - режим (слот) (более не используется),
; n - amx_cfg в консоли и т.д.,
; o - чат админа (say @@),
; p - голосовой чат (ключ "u"),
; q - доступ к amx_cvar и amx_rcon,
; r - custom level A (для модулей),
; s - custom level B,
; t - custom level C,
; u - полный доступ (все флаги) **(Примечание: флаг "u" обычно означает все флаги, но здесь перечислены по отдельности все флаги a-t)**
; Флаг "z" (по умолчанию) означает никаких прав (для обычных игроков).
; Флаги авторизации:
; a - по имени (ник игрока),
; b - по паролю (из файла users и setinfo),
; c - по SteamID,
; d - по IP,
; e - требовать пароль (для a и b методов).
; Пример для SteamID: "STEAM_0:1:XXXXXXXX" "" "abcdefghijklmnopqrstu" "ce"
; Пример для IP: "127.0.0.1" "" "abcdefghijklmnopqrstu" "de"
; Пример для ника с паролем: "PlayerName" "mypassword" "abcdefghijklmnopqrstu" "a"
; Добавьте Ваших администраторов ниже:
"STEAM_0:1:19618836" "" "abcdefghijklmnopqrstu" "c" ; Администратор (полные права по SteamID)
; Ниже пример для локальной консоли сервера (loopback) - раскомментируйте при необходимости:
; "loopback" "" "abcdefghijklmnopqrstu" "de"

View File

@ -3,17 +3,11 @@ services:
build: .
container_name: csdm
ports:
- "${PORT}:${PORT}/udp"
- "${HLTV_PORT}:${HLTV_PORT}/udp"
- "27015:27015/udp"
volumes:
- ./server.cfg:/hlds/cstrike/server.cfg
restart: unless-stopped
- ./configs:/opt/hlds/cstrike/addons/amxmodx/configs
- ./logs:/opt/hlds/cstrike/logs
environment:
HOSTNAME: "${HOSTNAME}"
MAP: "${START_MAP}"
MAX_PLAYERS: "${MAX_PLAYERS}"
PORT: "${PORT}"
HLTV_PORT: "${HLTV_PORT}"
RCON_PASSWORD: "${RCON_PASSWORD}"
SV_LAN: "${SV_LAN}"
VAC: "${VAC}"
- TZ=Europe/Moscow
- LANG=C.UTF-8
restart: unless-stopped

26
init.sh
View File

@ -1,26 +0,0 @@
#!/bin/bash
ENV_FILE=".env"
TEMPLATE_FILE=".env.example"
# Генерация пароля
generate_password() {
openssl rand -base64 18
}
# Создание .env на основе шаблона
if [ -f "$ENV_FILE" ]; then
echo "[INFO] $ENV_FILE already exists. Skipping creation."
else
echo "[INFO] Creating $ENV_FILE from $TEMPLATE_FILE..."
# Копируем шаблон
cp "$TEMPLATE_FILE" "$ENV_FILE"
# Генерируем и подставляем RCON пароль
RCON_PASSWORD=$(generate_password)
echo "RCON_PASSWORD=$RCON_PASSWORD" >> "$ENV_FILE"
echo "[OK] .env created with generated RCON_PASSWORD:"
echo "$RCON_PASSWORD"
fi

View File

View File

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -1,15 +0,0 @@
hostname "GO YASOZDAL | CSDM"
sv_lan "0"
rcon_password "9OrEQYdj/ulkf0uC4JKr220+"
mp_autoteambalance 0
mp_limitteams 2
mp_freezetime 3
mp_roundtime 2
mp_timelimit 30
mp_startmoney 2025
sv_aim 0
pausable 0
sv_maxspeed 320
mp_timelimit 20
sv_cheats 0
maxplayers ""

View File

View File

@ -1,9 +0,0 @@
#!/bin/bash
cd /hlds
./hlds_run \
-game cstrike \
-console \
-port "$PORT" \
+map "$MAP" \