Возможности
- Дашборд — метрики (всего, создано сегодня, прогретые, группы, ср. число доменов) и графики (устройства, платформы, браузеры, группы, возраст, активность, динамика создания).
- Таблица профилей — поиск, сортировка, выбор колонок, горизонтальный скролл; состояние таблицы хранится в браузере; server-side (в браузер едет только текущая страница).
- Фильтры — группа (чипы), платформа, браузер, устройство, возраст (диапазон дней), кол-во доменов (диапазон), дней в группе (опц.), активность.
- CRUD — создание/редактирование/удаление; удобные селекты для платформы/браузера/группы; авто-поля (PID, дата, мобильность) подставляются сами.
- Массовые действия — чекбоксы + «выбрать всё»; операции по всему фильтру (перенос/удаление тысяч профилей одним запросом, не постранично); массовая смена группы с созданием новой на лету.
- Экспорт / импорт — выгрузка в CSV или SQL-дамп (всё / по фильтру / выбранные); импорт CSV с режимами пропустить дубли / перезаписать / новый PID; sequence ключа синхронизируется автоматически (иначе Monstro не создаёт новые профили после миграции).
- Планировщик — правила авто-переноса между группами по условиям (возраст / домены / дней в группе, с логикой И/ИЛИ и вкл-выкл каждого условия), запуск по крону раз в час + ручной запуск, журнал прогонов. Пример цикла:
NEW —5дн→ WARM —(буст)→ SURF —3дн→ WARM. - Настройка без файлов — мастер первого запуска + страница «Настройки» (доступы к БД, пароль, сортировка, прогрев, графики, отслеживание времени в группе).
- Schema-driven — колонки и типы читаются прямо из БД: поменялась структура таблицы — панель подхватит без правок кода.
Требования
- PHP 8.0+ с расширением
pdo_pgsql - PostgreSQL (база Monstro)
- веб-сервер (nginx / Apache) или локальная сборка (OSPanel и т.п.)
- Ни
composer, ниnpm, ни сборки — чистый PHP, фронтенд-библиотеки с CDN.
Установка
1. Скачать в веб-корень
Код:
git clone https://github.com/DevL1t/MonstroPM.git
2. Включить
pdo_pgsql в php.ini (extension=pdo_pgsql) и перезапустить PHP-FPM / OSPanel. Проверка: php -m | grep pdo_pgsql.3. Открыть в браузере — если
config.php ещё нет, откроется мастер первой настройки: введите доступы к PostgreSQL-базе Monstro и пароль на вход. Мастер проверит подключение и создаст config.php (пароль — хэшем).4. Дальнейшие настройки — пункт меню «Настройки» (пишутся обратно в
config.php).Возможные проблемы
| Симптом | Решение |
|---|---|
| «Не удалось подключиться к базе» | проверьте доступы в config.php, firewall / pg_hba.conf |
| Белый экран / 500 | не включён pdo_pgsql (см. шаг 2) |
| Виден код PHP вместо страницы | папка не отдаётся через PHP-обработчик |
Планировщик и крон
Правила создаются на странице «Планировщик». Чтобы они применялись автоматически, повесьте обработчикcron.php на крон (раз в час):
Код:
0 * * * * /usr/bin/php /путь/к/MonstroPM/cron.php >/dev/null 2>&1
Также крон можно дёрнуть по HTTP с секретным ключом (показан на странице):
https://САЙТ/cron.php?key=…. Каждый прогон пишет строку в журнал — видно, что крон жив.Условие «Дней в группе» требует включить Отслеживание времени в группе в Настройках (добавляет в таблицу колонку
party_since и триггер БД, который сам ставит время при смене группы — безопасно для Monstro).Конфигурация (config.php)
Единственный файл с настройками, создаётся мастером. В git не коммитится.db — host, port, dbname, user, pass, schema (по умолч. public).app — основное:| Ключ | Описание |
|---|---|
|
password | пароль на вход (хранится bcrypt-хэшем) ||
monstro_login | логин Monstro — для ссылок в меню ||
table / group_column | таблица профилей (profiles) / колонка-группа (party) ||
sort_column / sort_dir | сортировка по умолчанию (data_create / desc) ||
per_page / truncate_len | строк на странице / обрезка длинных значений ||
warm_days / warm_domains | условия «прогретого» (возраст ≥ дней и доменов ≥) ||
chart_created_days / age_buckets | параметры графиков |Правила планировщика и ключ крона хранятся отдельно в
rules.json (тоже не в git).Безопасность
- Сессионная авторизация; cookie с HttpOnly / Secure / SameSite=Lax.
- Защита от перебора: 5 неудач → блок входа на 10 минут (по IP).
- Пароль — bcrypt-хэш (
password_verify). - Все запросы к БД — подготовленные выражения; имена таблиц/колонок экранируются; импорт идёт через prepared statements (без выполнения SQL из файла).
- Ошибки — в temp-лог, наружу общий текст (без утечки SQL/структуры). API закрыт авторизацией.
Структура проекта
Код:
index.php точка входа: дашборд / профили / планировщик / настройки (?page=…)
login.php страница входа
setup.php мастер первого запуска (создаёт config.php)
api.php JSON API: таблица, фильтры, статистика, CRUD, массовые, экспорт/импорт, правила
rules.php движок планировщика (хранилище правил + применение)
cron.php обработчик планировщика (CLI / HTTP по ключу) — на крон
lib.php БД, интроспекция схемы, авторизация, кэш, конфиг, хелперы
assets/app.js фронтенд (таблица, графики, формы, массовые, планировщик)
assets/app.css тема оформления
config.php ваш конфиг с секретами (НЕ в git; создаётся мастером)
rules.json правила планировщика и ключ крона (НЕ в git; создаётся автоматически)
Зависимости (CDN, версии запиннены)
| Библиотека | Версия | Назначение |
|---|---|---|
| jQuery | 3.7.1 | нужна для DataTables |
| DataTables | 2.1.8 | таблица (+ Responsive, Buttons) |
| Chart.js | 4.4.4 | графики дашборда |
| Lucide | 1.17.0 | иконки интерфейса |
| Font Awesome | 6.5.2 | иконки платформ/браузеров |
| Inter | — | шрифт (Google Fonts) |