Files
redl-gamepanel/ИНСТРУКЦИЯ.md
T
redl 6ee2744e3a Сборка REDL: панель на PHP 8, капча-тумблер, закрытые уязвимости, установщики в один клик
- панель работает на PHP 8.4 (оригинал под PHP 7.0): elFinder utf8_encode, apache_get_modules, warnings
- капча выключена и управляется из админки (флаг captcha_enable + блок настроек)
- закрыты две SQL-инъекции без авторизации (createAuthLog: пароль из POST и CF-Connecting-IP)
- убрано хранение паролей в открытом виде в authlog, XSS в поле ref
- установщики install-panel.sh и install-node.sh (оригинальный затирал sources.list репозиториями Debian 9)
- современный Dockerfile (оригинальный на debian:stretch больше не собирается)
- планировщик и автозапуск работают без systemd
- брендинг REDL.IO, год 2026, ссылки на redl.io
- документация на русском: ИЗМЕНЕНИЯ, БЕЗОПАСНОСТЬ, ИНСТРУКЦИЯ
2026-07-30 02:00:01 +00:00

18 KiB
Raw Blame History

Полная инструкция

От пустого сервера до принимающего клиентов хостинга.

Поддерживается и развивается с помощью REDL.IO — Хостинг с искусственным интеллектом.

Содержание:

  1. Как всё устроено
  2. Установка панели
  3. Установка игровой ноды
  4. Подключение ноды к панели
  5. Сборки игр
  6. Настройка панели
  7. Капча
  8. HTTPS и домен
  9. Обслуживание
  10. Если что-то не работает

1. Как всё устроено

Две роли, обычно на разных машинах:

Панель — сайт, база данных, личные кабинеты, тикеты, платежи. Docker ей не нужен, живёт на любом дешёвом VPS.

Игровая нода (локация) — здесь запускаются сами игровые сервера. Панель подключается к ней по SSH и на каждый заказанный сервер создаёт отдельный Docker-контейнер:

docker create --tty --rm --name=gs<ID> --network=host \
  --cpus="<ядра>" --memory=<ОЗУ>M \
  --volume="/home/gs<ID>/:/home/container/" \
  --workdir=/home/container debian:stretch

Отсюда два жёстких требования к ноде: работающий Docker и локальный образ с тегом debian:stretch (имя прописано в коде панели). Файлы сервера лежат на ноде в /home/gs<ID>, внутри контейнера они видны как /home/container.

Нод может быть несколько — они добавляются в панели как отдельные локации, клиент выбирает локацию при заказе.

Важно про ноду. Docker не запускается в контейнерных VPS (LXC, OpenVZ и подобные) — ядро запрещает вложенные namespace. Под ноду нужен выделенный сервер или KVM. Установщик проверяет это первым делом и предупреждает.


2. Установка панели

Подходит Ubuntu 24.04 / 22.04 или Debian 12 / 13. Минимум: 1 ядро, 1 ГБ ОЗУ, 10 ГБ диска.

apt-get update && apt-get install -y git
git clone https://github.com/RedlHosting/redl-gamepanel.git
cd redl-gamepanel
sudo bash install-panel.sh

Скрипт спросит три вещи:

  • домен или IP панели — попадёт в конфиг как базовый адрес, с него формируются все ссылки и письма;
  • e-mail администратора — он же логин;
  • пароль администратора — минимум 6 символов.

Дальше без вашего участия: пакеты, база со случайным паролем, схема (27 таблиц), конфиг, права, PHP, nginx, планировщик, сторож автозапуска, администратор с полным уровнем доступа, финальная проверка страницы входа.

Занимает 2–5 минут. В конце печатается адрес панели и логин.

Нестандартный порт (если 80 занят или панель за обратным прокси):

sudo PORT=8095 bash install-panel.sh

Где что лежит после установки:

Что Путь
Код панели /var/www/hostinpl
Конфигурация /var/www/hostinpl/application/config.php
Пароль БД и токен планировщика /root/.redl-panel-credentials
Конфиг nginx /etc/nginx/sites-available/hostinpl
Планировщик /etc/cron.d/hostinpl
Сторож автозапуска /usr/local/bin/hostinpl-guard
База данных MariaDB, база hostin

phpMyAdmin (по желанию, панель ссылается на него из админки):

sudo apt-get install -y phpmyadmin        # веб-сервер настраивать НЕ надо, откажитесь
sudo ln -sfn /usr/share/phpmyadmin /var/www/hostinpl/phpmyadmin

Логин — пользователь БД из /root/.redl-panel-credentials. Помните, что phpMyAdmin будет доступен всем, кто знает адрес: либо закройте его в nginx по IP, либо не ставьте вообще.


3. Установка игровой ноды

Нужен выделенный сервер или KVM (не LXC/OpenVZ). Минимум: 2 ядра, 2 ГБ ОЗУ, 100 ГБ диска, считайте 1–2 ГБ на игровой сервер.

apt-get update && apt-get install -y git
git clone https://github.com/RedlHosting/redl-gamepanel.git
cd redl-gamepanel
sudo bash install-node.sh

Скрипт спросит:

  • IP этой ноды — как её увидит панель;
  • разрешить ли вход root по SSH с паролем — панель умеет подключаться только логином и паролем, а её команды требуют прав root. Ответите yes — скрипт сам сгенерирует стойкий пароль root и покажет его в конце.

Что делает: проверяет пригодность машины, ставит Docker из официального репозитория, собирает образ debian:stretch (внутри Debian 12 + 32-битные библиотеки + Java + Node.js + screen), создаёт /home/cp/gameservers/files и группу gameservers, ставит MariaDB для баз игровых серверов, SteamCMD, ProFTPD, настраивает sshd, ставит сторож Docker.

Первый запуск идёт 5–15 минут — большую часть времени собирается образ.

Сразу после установки закройте порты. Скрипт напечатает готовые команды, подставьте адрес панели:

ufw allow from IP_ПАНЕЛИ to any port 22 proto tcp
ufw allow from IP_ПАНЕЛИ to any port 3306 proto tcp
ufw deny 3306
# порты игровых серверов оставьте открытыми: 7777 (SA-MP), 22005 (RAGE:MP), 25565 (Minecraft) и т.д.

Если подключаетесь к ноде по SSH сами — сначала разрешите свой IP, иначе потеряете доступ:

ufw allow from ВАШ_IP to any port 22 proto tcp

4. Подключение ноды к панели

  1. Войдите в панель администратором
  2. Админка → Локации → Добавить локацию
  3. Заполните:
Поле Что вписать
Название Любое понятное: «Москва», «Хельсинки»
IP IP ноды
Пользователь root
Пароль Пароль root, который напечатал install-node.sh
Игры Отметьте игры, доступные на этой ноде
  1. Сохраните и откройте Админка → Локации — если панель подключилась, у локации появятся реальные ядра, ОЗУ и диск (обновляются планировщиком раз в час).

Не подключилось — проверьте с машины панели:

ssh root@IP_НОДЫ                      # пароль подходит?
php -m | grep ssh2                    # расширение php-ssh2 стоит?

Расширения нет — apt-get install -y php-ssh2 и перезапустите PHP-FPM.


5. Сборки игр

В комплект они не входят. В оригинальном установщике сборки качались с посторонних сайтов по обычному HTTP без проверки подписи — мы этот способ убрали (подробно в БЕЗОПАСНОСТЬ.md).

Разложите файлы на ноде так:

/home/cp/gameservers/files/<код_игры>/

Коды игр смотрите в Админка → Игры (например samp, crmp, mta, minecraft, cs, css, ragemp). При создании сервера панель копирует содержимое этого каталога в /home/gs<ID>/.

Берите сборки только из первоисточников: SA-MP — с sa-mp.com, MTA — с mtasa.com, Minecraft (Paper) — с papermc.io, RAGE:MP — с rage.mp, игры Steam — через SteamCMD (уже установлен в /root/steamcmd).

После этого проверьте цепочку целиком: закажите сервер от имени тестового клиента и убедитесь, что он создался и запустился.


6. Настройка панели

Админка → Настройки, четыре вкладки:

  • Общие настройки — название, описание, контакты, логотип
  • Платёжные системы — Unitpay, Enot, AnyPay, LiteKassa, RoboKassa, FreeKassa, Юkassa, QIWI. Нужны ваши мерчант-аккаунты. Ни один шлюз мы живыми платежами не проверяли — обязательно протестируйте своим платежом перед приёмом клиентов.
  • Прочие настройки — тестовый период, подтверждение e-mail, капча, техработы, VK-авторизация
  • Информация и бонусы — бонусы за пополнение, реферальные проценты

Тарифы и игры: Админка → Игры (версии, лимиты ОЗУ и ядер, цены).

При сохранении настроек панель перезаписывает config.php целиком. Механизм ищет строки по подстроке, поэтому не создавайте параметры, чьи имена являются частью других. После правки файла руками перезапускайте PHP-FPM полностью (restart, не reload) — иначе отдаётся закешированная версия.


7. Капча

По умолчанию выключена — регистрация и вход работают без неё, поля просто нет.

Чтобы включить:

  1. Получите ключи reCAPTCHA v2 «Я не робот» на google.com/recaptcha/admin — укажите домен панели
  2. Админка → Настройки → Прочие настройки → «Защита от ботов (reCAPTCHA v2)»
  3. Вставьте Site key и Secret key
  4. Переключите на «Включена» и сохраните

Порядок важен. Включите капчу без ключей — на форме появится «ERROR for site owner: Invalid site key», и войти будет нельзя. Если так вышло, откройте /var/www/hostinpl/application/config.php, поставьте 'captcha_enable' => '0' и перезапустите PHP-FPM:

sudo sed -i "s/'captcha_enable' => '1'/'captcha_enable' => '0'/" /var/www/hostinpl/application/config.php
sudo service php8.4-fpm restart     # подставьте свою версию PHP

Капча закрывает вход, регистрацию, восстановление пароля и создание тикетов — все четыре формы сразу.


8. HTTPS и домен

Панель ставится на HTTP. Для сертификата:

sudo apt-get install -y certbot python3-certbot-nginx
sudo certbot --nginx -d panel.example.com

После выпуска сертификата поправьте адрес в конфиге, иначе ссылки в письмах и редиректы останутся на http://:

sudo sed -i "s|'url' => 'http://|'url' => 'https://|" /var/www/hostinpl/application/config.php
sudo service php8.4-fpm restart

Если панель за обратным прокси (Caddy, nginx, Cloudflare), в её конфиге nginx уже стоят absolute_redirect off; port_in_redirect off; — без них редиректы уводят на внутренний порт и ссылки вроде /phpmyadmin снаружи не открываются.


9. Обслуживание

Резервные копии. Сохраняйте базу и конфиг:

mysqldump hostin > /root/hostin-$(date +%F).sql
cp /var/www/hostinpl/application/config.php /root/config-$(date +%F).php

Файлы игровых серверов лежат на ноде в /home/gs<ID> — их бэкапьте на ноде.

Логи:

Что смотреть Где
Ошибки PHP и nginx /var/log/nginx/error.log
Обращения планировщика grep 'main/cron' /var/log/nginx/access.log
Журнал входов Таблица authlog в базе
Сборка образа ноды /tmp/redl-docker-build.log

Проверка состояния: Админка → Проверка системы — расширения PHP, версии, ссылки планировщика. Все пункты должны быть зелёными.

Обновление кода из репозитория:

cd redl-gamepanel && git pull
sudo cp -a panel/application panel/engine /var/www/hostinpl/     # config.php не перезапишется
sudo chown -R www-data:www-data /var/www/hostinpl
sudo service php8.4-fpm restart

10. Если что-то не работает

«Ошибка: Не удалось загрузить контроллер …» — панель не нашла контроллер для этого адреса. Обычно это ссылка на то, чего нет: например /phpmyadmin, когда phpMyAdmin не установлен (см. раздел 2). Если раздел точно должен быть — проверьте, что файлы на месте и права www-data, затем перезапустите PHP-FPM полностью: opcache мог закешировать файл, пойманный в момент записи.

Страница входа пустая или без формы — смотрите /var/log/nginx/error.log. Частая причина: short_open_tag = Off. Панель использует короткие теги <? ?>, установщик включает эту опцию сам, но при переустановке PHP её нужно вернуть.

Не могу войти, на форме «Invalid site key» — включена капча без ключей, см. раздел 7.

Планировщик не работает (статистика не обновляется, просроченные сервера не отключаются):

grep -c 'main/cron' /var/log/nginx/access.log     # должно расти
pgrep -a cron                                     # демон запущен?
cat /etc/cron.d/hostinpl                          # каждое задание — ОДНОЙ строкой

Если задание разорвано на две строки — токен попал в файл с переводом строки, перепишите файл целиком, взяв токен из /root/.redl-panel-credentials.

Сервер не создаётся на ноде — проверьте на ноде:

docker info                                  # демон работает?
docker image inspect debian:stretch          # образ на месте?
docker run --rm debian:stretch echo ok       # контейнер запускается?
ls /home/cp/gameservers/files/               # сборка игры на месте?

Сервер создался, но сразу падает — смотрите логи контейнера на ноде: docker logs gs<ID>. Чаще всего не хватает 32-битных библиотек (тогда пересоберите образ из нашего docker/Dockerfile) или сборка игры повреждена.

Всё было хорошо, перестало после перезагрузки — на машинах без systemd подъём делают сторожа на cron. Проверьте: pgrep -a cron и вручную /usr/local/bin/hostinpl-guard (на ноде — gamenode-guard).


Поддерживается и развивается с помощью REDL.IO — Хостинг с искусственным интеллектом.