- панель работает на 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 - документация на русском: ИЗМЕНЕНИЯ, БЕЗОПАСНОСТЬ, ИНСТРУКЦИЯ
18 KiB
Полная инструкция
От пустого сервера до принимающего клиентов хостинга.
Поддерживается и развивается с помощью REDL.IO — Хостинг с искусственным интеллектом.
Содержание:
- Как всё устроено
- Установка панели
- Установка игровой ноды
- Подключение ноды к панели
- Сборки игр
- Настройка панели
- Капча
- HTTPS и домен
- Обслуживание
- Если что-то не работает
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. Подключение ноды к панели
- Войдите в панель администратором
- Админка → Локации → Добавить локацию
- Заполните:
| Поле | Что вписать |
|---|---|
| Название | Любое понятное: «Москва», «Хельсинки» |
| IP | IP ноды |
| Пользователь | root |
| Пароль | Пароль root, который напечатал install-node.sh |
| Игры | Отметьте игры, доступные на этой ноде |
- Сохраните и откройте Админка → Локации — если панель подключилась, у локации появятся реальные ядра, ОЗУ и диск (обновляются планировщиком раз в час).
Не подключилось — проверьте с машины панели:
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. Капча
По умолчанию выключена — регистрация и вход работают без неё, поля просто нет.
Чтобы включить:
- Получите ключи reCAPTCHA v2 «Я не робот» на google.com/recaptcha/admin — укажите домен панели
- Админка → Настройки → Прочие настройки → «Защита от ботов (reCAPTCHA v2)»
- Вставьте Site key и Secret key
- Переключите на «Включена» и сохраните
Порядок важен. Включите капчу без ключей — на форме появится
«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 — Хостинг с искусственным интеллектом.