Go to file
mirivlad 7c15ed82a0 fix: Dashboard route now passes groups to template
The / route was using anonymous function that passed $servers
but template expected $groups. Now both use the same logic.
2026-04-17 16:43:25 +08:00
__pycache__ fix: Agent network metrics initialization 2026-04-17 10:19:32 +08:00
config Docker: production-ready setup with immutable images, versioned migrations, env vars 2026-04-14 15:51:14 +08:00
docker feat: Add offline monitoring and default settings 2026-04-17 15:22:17 +08:00
public fix: Dashboard route now passes groups to template 2026-04-17 16:43:25 +08:00
src feat: Redesign dashboard with compact cards and groups 2026-04-17 16:19:17 +08:00
templates fix: Dashboard twig empty check 2026-04-17 16:26:36 +08:00
.dockerignore deploy: add deploy.sh script, secure .env 2026-04-14 15:54:16 +08:00
.env.example unify config: single .env.example, default password mirvmon2026, docker in README 2026-04-14 16:20:01 +08:00
.gitignore fix: correct PHP-native bcrypt hash for admin password mirvmon2026 2026-04-14 16:34:40 +08:00
AGENTS.md docs: Update documentation to reflect current state 2026-04-17 11:52:48 +08:00
ARCHITECTURE.md docs: Update documentation to reflect current state 2026-04-17 11:52:48 +08:00
INSTALL.md docs: Update documentation to reflect current state 2026-04-17 11:52:48 +08:00
README.md docs: Update documentation to reflect current state 2026-04-17 11:52:48 +08:00
TECHNICAL_SPECIFICATION.md docs: Update documentation to reflect current state 2026-04-17 11:52:48 +08:00
agent.py feat: Redesign dashboard with compact cards and groups 2026-04-17 16:19:17 +08:00
composer.json fix: исправление тултипов Chart.js и обновление проекта 2026-04-13 00:59:19 +08:00
composer.lock Initial commit - mon.mirv.top monitoring system 2026-02-14 15:08:14 +00:00
monitoring_system_dump.sql fix: исправление тултипов Chart.js и обновление проекта 2026-04-13 00:59:19 +08:00
schema.sql Initial commit - mon.mirv.top monitoring system 2026-02-14 15:08:14 +00:00

README.md

mirvmon — Система мониторинга серверов

Легкая и функциональная система мониторинга для домашних и небольших серверных инфраструктур.

PHP Slim MariaDB Chart.js


Возможности

  • Метрики в реальном времени: CPU, RAM, диск (по разделам), сеть (In/Out в %)
  • Алерты и уведомления: Настраиваемые пороги с уведомлениями через Telegram и Email
  • Мониторинг сервисов: Отслеживание состояния systemd-сервисов с алертами при остановке
  • Интерактивные графики: Зум, панорамирование, детализация по периодам (1ч, 6ч, 24ч, 7д, 30д)
  • Множество серверов: Поддержка неограниченного числа серверов через Python-агент
  • Цветная индикация: Прогресс-бары меняют цвет при приближении к порогам
  • Авторизация: Сессионная аутентификация с CSRF-защитой

Установка

Вариант A: Docker (рекомендуется)

Самый быстрый способ - все поднимается автоматически:

# 1. Клонируем
git clone https://git.mirv.top/mirivlad/mirvmon.git
cd mirvmon

# 2. Запускаем скрипт (сам поставит Docker, сгенерит пароли, поднимет)
cd docker && bash deploy.sh

# 3. Открываем браузер
# http://localhost:8080
# Логин: admin
# Пароль: mirvmon2026 (смените сразу!)

Ручной Docker (без скрипта):

git clone https://git.mirv.top/mirivlad/mirvmon.git
cd mirvmon

cp .env.example .env        # меняем пароли
docker compose -f docker/docker-compose.yml up -d --build

При обновлении:

git pull
docker compose -f docker/docker-compose.yml up -d --build

Код внутри Docker-образа (immutable). Данные БД в volume db_data - не теряются.


Вариант B: Ручная установка

1. Зависимости

apt install php8.3 php8.3-fpm php8.3-mysql php8.3-mbstring php8.3-curl nginx mariadb-server
composer install

2. База данных

mysql -u root -p <<EOF
CREATE DATABASE monitoring_system CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
CREATE USER 'mon_user'@'localhost' IDENTIFIED BY 'mon_password_123';
GRANT ALL PRIVILEGES ON monitoring_system.* TO 'mon_user'@'localhost';
FLUSH PRIVILEGES;
EOF

# Загружаем миграции
for f in docker/migrations/*.sql; do
    mysql -u mon_user -pmon_password_123 monitoring_system < "$f"
done

3. Настройка .env

cp .env.example .env
# Отредактируйте DB_HOST, DB_PASSWORD и другие параметры
nano .env

4. Nginx

server {
    listen 80;
    server_name mon.mirv.top;
    root /var/www/mon/public;
    index index.php;

    location / {
        try_files $uri $uri/ /index.php?$query_string;
    }

    location ~ \.php$ {
        include snippets/fastcgi-php.conf;
        fastcgi_pass unix:/run/php/php8.3-fpm.sock;
    }
}

5. Вход в систему

http://your-server/login

  • Логин: admin
  • Пароль: mirvmon2026 (смените сразу!)

Архитектура

+-----------+         POST /api/v1/metrics         +----------+
|  Python   |  ------------------------------->     |   PHP    |
|  Agent    |   JSON: metrics + services         | Backend  |
|  (server) |  <-------------------------------   +----+-----+
+-----------+                                       ^      |
    ^                                               |      | PDO
    | systemctl list-units                           |      v
+-----------+                                 +-----------+
|  Linux    |                                 |  MariaDB  |
|  OS       |                                 |           |
+-----------+                                 +-----------+

Технологический стек

Компонент Технология
Backend Slim Framework 4.x
Frontend Bootstrap 5 + Chart.js
Database MariaDB 10.11
Agent Python 3 + psutil

Установка агента на сервер

Агент устанавливается через скачивание скрипта с сервера мониторинга:

# 1. В веб-интерфейсе: Серверы -> Редактирование -> Скачать установочный скрипт

# 2. На целевом сервере:
chmod +x install.sh
sudo ./install.sh

Агент будет:

  • Установлен в /opt/server-monitor-agent/
  • Запущен как systemd-сервис
  • Отправлять метрики каждые 60 секунд

API

Получение метрик от агента

POST /api/v1/metrics
Content-Type: application/json

{
    "token": "server_token",
    "metrics": {
        "cpu_load": 45.2,
        "ram_used": 89.1,
        "disk_used_root": 65.5,
        "net_in_ens3": 12.3,
        "net_out_ens3": 5.6
    },
    "services": [
        {"name": "nginx", "status": "running"},
        {"name": "mysql", "status": "stopped"}
    ]
}

Другие endpoints

Endpoint Описание
GET / Дашборд
GET /servers Управление серверами
GET /servers/{id} Детали сервера с графиками
GET /agent/install.sh?token= Скачать установочный скрипт (Linux)
GET /agent/install.bat?token= Скачать установочный скрипт (Win)
POST /api/v1/metrics Получение метрик от агента
GET /alerts Список алертов
POST /alerts/{id}/resolve Отметить алерт решенным

Troubleshooting

Агент не отправляет метрики

# Проверить статус сервиса
sudo systemctl status server-monitor-agent

# Посмотреть логи
sudo journalctl -u server-monitor-agent -f

# Перезапустить
sudo systemctl restart server-monitor-agent

Агент не устанавливается

# Проверить Python
python3 --version

# Установить зависимости вручную
sudo apt install python3-pip
sudo pip3 install psutil requests

Docker: контейнер не стартует

# Проверить логи
docker compose logs app

# Пересобрать
docker compose down && docker compose up -d --build

Документация


Changelog

v1.1 (Апрель 2026)

  • Динамические пороги для метрик сервера
  • Улучшенный агент с поддержкой VPS (virtio-диски)
  • Скачивание агента с сервера (вместо встраивания в скрипт)
  • Защита endpoint агента токеном
  • Doughnut-графики для разделов дисков
  • Графики температур и сетевых интерфейсов
  • Топ-процессы в тултипах графиков
  • Мониторинг systemd-сервисов

v1.0 (Февраль 2026)

  • Ядро системы (Slim 4 + Twig + Bootstrap 5)
  • Аутентификация и авторизация
  • CRUD серверов и групп
  • API для приема метрик
  • Python-агент с systemd
  • Графики Chart.js
  • Система алертов с порогами
  • Топ-5 процессов по CPU/RAM
  • Уведомления (Email/Telegram)

Лицензия

MIT