Added base ReHLDS server
This commit is contained in:
11
.env
11
.env
@ -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+
|
10
.env.example
10
.env.example
@ -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
|
100
Dockerfile
100
Dockerfile
@ -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
48
Jenkinsfile
vendored
@ -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.'
|
||||
}
|
||||
}
|
||||
}
|
105
configs/amxx.cfg
Normal file
105
configs/amxx.cfg
Normal 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
59
configs/server.cfg
Normal 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
44
configs/users.ini
Normal 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"
|
@ -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
26
init.sh
@ -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
|
BIN
rehlds/core.so
BIN
rehlds/core.so
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
BIN
rehlds/hltv
BIN
rehlds/hltv
Binary file not shown.
BIN
rehlds/proxy.so
BIN
rehlds/proxy.so
Binary file not shown.
Binary file not shown.
15
server.cfg
15
server.cfg
@ -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 ""
|
Reference in New Issue
Block a user