📖 Wiki — RouterMon

Повна документація по всіх функціях системи моніторингу

Версія: 2.0 · Оновлено: 2026
Огляд системи
RouterMon — веб-застосунок для моніторингу мережевих пристроїв (роутери, сервери, камери, будь-що з IP-адресою). Пінгує кожен пристрій за заданим інтервалом, веде статистику, відправляє алерти та надає інструменти для діагностики.
Ping-моніторинг
ICMP ping кожного пристрою з налаштуванням кількості пакетів, розміру, TTL і інтервалу. Автоматичне відстеження онлайн/офлайн переходів.
Telegram боти
Два незалежні боти: Admin (повне управління) і Client (клієнти отримують сповіщення лише про свої пристрої). Інтерактивні кнопки, команди, ping на вимогу.
SLA & Аналітика
Uptime % за 1/7/30/90 днів, MTTR, heatmap calendar, latency trends, порівняння роутерів, інциденти по годинах.
Алерти
Сповіщення при падінні/відновленні через Telegram, Email (SMTP) та Webhook. Алерти при перевищенні latency-порогу та стрибках latency.
Діагностика
MTR (traceroute + ping хопів) зі збереженням знімків, port scanner, скан підмережі, IP WHOIS/Geo.
SNMP моніторинг
Збір CPU%, RAM%, uptime через SNMP v2c. Відображається в картці роутера в реальному часі.

Технологічний стек: Python 3 · Flask · SQLite · Gunicorn · Nginx · Server-Sent Events (live оновлення)

Встановлення на VPS

RouterMon розгортається на Debian 11/12 або Ubuntu 22.04/24.04. Автоматичний скрипт налаштовує Python venv, systemd, Nginx, firewall і опціонально SSL.

1. Завантаження файлів з Windows

Запусти PowerShell-скрипт на своєму ПК:

.\upload_to_vps.ps1

Скрипт запитає IP VPS, завантажить файли через SCP і запустить deploy.sh на сервері.

2. Або вручну на VPS
scp -r ./phpmon root@YOUR_VPS_IP:/opt/phpmon ssh root@YOUR_VPS_IP "bash /opt/phpmon/deploy.sh"
Що робить deploy.sh
КрокДія
1. Пакетиapt-get install python3, nginx, ufw, fping, mtr-tiny, (certbot)
2. ЮзерСтворює системний user phpmon без shell
3. Backup DBПри оновленні копіює routers.db → /var/backups/phpmon/
4. Python venvСтворює venv, встановлює залежності з requirements.txt
5. Secret keyГенерує /opt/phpmon/.env з SECRET_KEY (зберігається між рестартами)
6. SystemdGunicorn сервіс з hardening (NoNewPrivileges, PrivateTmp)
7. Log rotationРотація access/error логів щодня, 14 днів
8. NginxProxy до :8080, SSE buffering off, security headers
9. SSL (опт.)Let's Encrypt через certbot, HTTP→HTTPS redirect
10. Firewallufw: SSH + 80 (+ 443 якщо SSL)
Скрипт ідемпотентний — можна запускати повторно для оновлення без втрати даних.
Швидкий старт
Відкрий http://YOUR_IP у браузері
Натисни «Додати роутер», введи назву та IP-адресу
Пристрій одразу з'явиться на головній сторінці і буде пропінговано протягом 60 секунд
(Опційно) Відкрий Налаштування → вкажи Telegram-токен для сповіщень
Для захисту панелі: Налаштування → Безпека → встанови логін/пароль
Головна сторінка — Моніторинг

Маршрут / — центральна сторінка з live-таблицею всіх роутерів.

Верхні gauge-картки

Показують: Всього роутерів · Онлайн · Офлайн · Середня latency · Health Score. Оновлюються автоматично через SSE.

Таблиця роутерів
КолонкаОпис
СтатусОнлайн / Офлайн / Невідомо — оновлюється live без перезавантаження сторінки
НазваКлікабельна — веде на сторінку History. Показує SNMP CPU/RAM якщо налаштовано. Показує нотатку (📝) якщо вказана.
IP адресаIP:порт (порт тільки якщо не 80)
LatencyЧас відповіді в мс з кольором: зелений <10мс · жовтий <50мс · червоний ≥50мс · оранжевий при перевищенні порогу ⚠. Показує % loss якщо є втрати.
ГрупаКольоровий бейдж групи якщо призначено
АдресаМісце розташування пристрою
TCP✓ або ✗ для TCP-порту якщо налаштовано
ОновленоЧас останньої перевірки
Фільтри та сортування

Пошук по назві/IP/локації · Фільтр по статусу (онлайн/офлайн) · Фільтр по групі · Сортування: за статусом, назвою, latency, часом оновлення, групою.

Live оновлення (SSE)

Таблиця оновлюється кожні 5 секунд через Server-Sent Events без перезавантаження сторінки. При зміні статусу рядок миготить червоним або зеленим. Кнопка «Голос» вмикає аудіо-сповіщення в браузері.

Кнопки на сторінці

Пінгувати зараз — примусово запускає перевірку всіх роутерів. Додати роутер — відкриває форму додавання. Кнопка 🔄 поряд з кожним роутером — пінгує тільки цей один.

Управління роутерами
Додати роутер /add
ПолеОпис
Назва *Відображувана назва пристрою
IP адреса *IPv4-адреса або hostname для пінгу
Порт веб-інтерфейсуЛише для кнопки «Відкрити», на пінг не впливає (default 80)
Адреса розміщенняТекстовий опис місця: «Офіс 3», «Серверна»
TCP портДодатково перевіряти TCP-з'єднання (наприклад 22 для SSH, 23 для Telnet)
Поріг latency мсЯкщо latency перевищить це значення — прийде алерт (cooldown 10 хвилин)
ГрупаПрив'язка до групи роутерів
Кількість пінгів1–10 пакетів за одну перевірку (впливає на packet loss %)
Розмір пакетуБайт (1–65500, default 32)
TTLTime To Live для ICMP пакетів (опційно)
SNMP CommunityРядок community для SNMP v2c (порожньо = вимкнено)
SNMP PortUDP порт SNMP (default 161)
DNS HostnameHostname для перевірки відповідності IP (DNS моніторинг)
Інтервал пінгуІндивідуальний інтервал в секундах (порожньо = глобальний)
НотаткиВільний текст, відображається в таблиці та на history сторінці
Увімкнути моніторингЧекбокс — можна вимкнути без видалення
HTTP перевіркаДодатково робить GET запит на http://IP:PORT/ і фіксує HTTP OK/FAIL
Імпорт CSV /import-csv

Масовий імпорт роутерів з CSV файлу. Обов'язкові колонки: name, ip. Опційні: location, port.

name,ip,location,port Роутер офіс,192.168.1.1,Київ,80 Сервер 1,10.0.0.1,Дата-центр,
Коди доступу

Кожен роутер має унікальний 6-символьний код (наприклад A3B7K2). Клієнти Telegram-бота надсилають /start A3B7K2 щоб підписатися на сповіщення про конкретний пристрій.

Групи роутерів

Маршрут /groups — організація роутерів у логічні групи (наприклад «Офіс», «Філіали», «Серверна»). Кожній групі задається назва і колір.

Групи використовуються для: фільтрації на головній · сортування по групах · відображення кольорового бейджа · аналітики в розрізі груп.

Ping параметри

Кожна перевірка роутера виконується утилітою ping (системна команда). Підтримується Windows та Linux.

Глобальні налаштування (Налаштування → Моніторинг)
ПараметрОпис
Інтервал пінгуЯк часто пінгувати всі пристрої: 30с / 60с / 300с / 600с
Поріг офлайнСкільки невдач підряд потрібно щоб позначити офлайн: 1 / 2 / 3 / 5
Per-router інтервал

Кожен роутер може мати свій власний інтервал пінгу (мінімум 10с). Поллер перевіряє кожні 10 секунд які роутери вже «просрочені» і пінгує тільки їх. Це дозволяє критичні пристрої пінгувати кожні 30с, а менш важливі — кожні 10 хвилин.

Packet Loss %

При кількість пінгів > 1 система рахує відсоток втрачених пакетів. Наприклад при 4 пінгах і 1 відповіді — 75% loss. Зберігається в ping_history.packet_loss та routers.packet_loss. Відображається в таблиці та history.

Latency алерти

Два типи автоматичних алертів (з cooldown 10 хвилин):

  • Порогова latency — якщо latency перевищила значення зі поля «Поріг latency мс»
  • Стрибок latency — якщо поточна latency вдвічі більша за середню останніх 5 вимірювань і більше 20мс
HTTP / TCP / DNS перевірки
HTTP перевірка

Якщо включено чекбокс «HTTP перевірка» — після успішного ping система виконує GET-запит на http://IP:PORT/. Результат OK/FAIL зберігається в ping_history.http_ok.

TCP перевірка

Якщо вказано «TCP порт» — система намагається встановити TCP-з'єднання на вказаний порт (timeout 3с). Корисно для перевірки SSH (22), Telnet (23), RDP (3389), HTTPS (443) тощо.

DNS моніторинг

Якщо вказано «DNS Hostname» — система резолвить hostname та порівнює з IP роутера. Якщо hostname перестав резолвитися або повертає інший IP — приходить алерт.

SNMP моніторинг

Підтримується SNMP v2c. Збирає три метрики через стандартні OID:

МетрикаOIDОпис
CPU %1.3.6.1.2.1.25.3.3.1.2.1Завантаження процесора
RAM %1.3.6.1.2.1.25.2.3.1.6/5.1Відсоток використаної пам'яті
Uptime1.3.6.1.2.1.1.3.0Час роботи пристрою

Дані відображаються рядком під назвою роутера: CPU 23% · MEM 67% · up 5д 3год

OID підходять для стандартних пристроїв (MIB-II). Для Mikrotik, Cisco, Juniper OID можуть відрізнятися.
Packet Loss %

Відсоток втрачених ICMP пакетів за одну перевірку. Розраховується з виводу ping -c N.

Кольорова схема в таблиці history: 0% — зелений · <25% — жовтий · ≥25% — червоний.

Для точних даних по packet loss встанови «Кількість пінгів» ≥ 3. З одним пінгом можливі лише 0% або 100%.
Сторінка History роутера

Маршрут /history/<id> — детальна статистика конкретного пристрою.

Діапазони

1 год · 6 год · 24 год · 7 днів

Статистичні блоки

Uptime % · Всього перевірок · Онлайн / Офлайн · Gauge середньої latency · Min/Max latency · Packet Loss % (середній)

Heatmap calendar (90 днів)

Упtime-calendar у стилі GitHub contributions. Кольори: сірий = немає даних · червоний = <95% · жовтий = 95-99% · зелений = 99-100% · яскраво-зелений = 100%.

SLA блок

SLA за 7 і 30 днів — відсоток успішних перевірок.

Latency chart

Лінійний графік з latency по часу.

Uptime bar

Горизонтальна смуга з тіками — кожен тік = одна перевірка. Зелений = онлайн, червоний = офлайн. Tooltip показує час і latency.

Лог перевірок

Таблиця з колонками: Час · Статус · Latency · Packet Loss. Максимум 100 останніх рядків.

Downtime лог

10 останніх падінь з часом початку, відновлення і тривалістю. Посилання на повний downtime лог.

SLA звіт

Маршрут /sla — зведена таблиця SLA для всіх роутерів.

Колонки: Роутер · Статус · SLA 1д · SLA 7д · SLA 30д · SLA 90д · Avg latency. Сортування за SLA 30д (найгірші вгорі). Кольорове кодування: ≥99% зелений · ≥95% синій · <95% червоний.

Аналітика

Маршрут /analytics — зведений дашборд за 30 і 14 днів.

БлокОпис
Summary KPIUptime 30д · Uptime 7д · Кількість інцидентів · MTTR · Активних роутерів · Найкращий/найгірший
Network availabilityArea chart — % доступності мережі по днях за 30д
Latency trendLine chart — avg/min/max latency по днях за 14д
Incident heatmap (год)Розподіл інцидентів по годинах доби (0–23)
Incident heatmap (день)Розподіл по днях тижня (Пн–Нд)
Router stats tableUptime 7д / 30д · avg latency · кількість інцидентів · MTTR для кожного роутера
Comparison chartГоризонтальний бар-чарт порівняння uptime 30д по роутерах
Downtime лог

Маршрут /downtime — повний журнал всіх падінь.

Фільтри: Пошук по назві/IP · По роутеру · Діапазон (сьогодні/тиждень/місяць/всі) · Тільки активні (ще не відновлені)

Summary блок (топ-10): Кількість інцидентів · Сумарний downtime · Avg recovery time · Активних зараз

MTTR (Mean Time To Recovery) — середній час відновлення за 30 днів в хвилинах.

Топ проблемних роутерів

Маршрут /problems — показує роутери з активними або недавніми інцидентами.

Роутер потрапляє в список якщо: зараз офлайн АБО відновився менш ніж N хвилин тому. Час «пам'яті» налаштовується: 10хв · 30хв · 1год · 3год · 6год · 12год · 24год.

Колонки: Роутер · IP · Статус · Інцидентів за 30д · Сумарний downtime · Avg recovery · Активних зараз.

MTR — traceroute з вимірюванням

Маршрут /mtr/<id> — комбінований traceroute + ping кожного хопа.

Як працює
Запускає tracert (Windows) або traceroute (Linux) для отримання списку хопів
Пінгує кожен хоп 5 разів і збирає статистику
Результати стрімляться через SSE в реальному часі
Таблиця результатів

# хоп · IP · Hostname · Loss% · Snt · Rcv · Last · Avg · Best · Wrst · мінімальний bar chart

Кольори Loss%: зелений = 0% · жовтий = <20% · червоний ≥ 20%

Порівняння MTR знімків

Маршрут /mtr/<id>/snapshots — збереження та порівняння трасувань.

Як зберегти знімок

Запусти MTR → дочекайся завершення → натисни кнопку «Зберегти знімок». Знімок зберігається в БД з датою і всіма хопами.

Порівняння

Вибери два знімки (кнопки A / B) — система показує таблицю з diff:

МаркерЗначення
+Новий хоп (є в A, відсутній в B)
Зник хоп (є в B, відсутній в A)
~Змінився: IP або latency +30% або loss ±10%
=Однаковий хоп

Колонка Δ Avg — різниця latency: +5 мс червоний (погіршилось) · -3 мс зелений (покращилось).

Live Ping Monitor

Маршрут /live/<id> — пінг конкретного роутера в реальному часі, щосекунди.

Як відкрити

Кнопка «Live Ping» на сторінці History кожного роутера, або напряму: http://IP/live/<router_id>

Інтерфейс — ліва панель
ЕлементОпис
Ring gaugeКругова шкала від 0 до 300мс — заповнюється пропорційно latency. Колір: зелений <30мс · синій <75мс · жовтий <150мс · червоний ≥150мс
Велике числоПоточна latency в мс. При timeout — «—» червоним
Статус-індикаторПульсуючий зелений = Онлайн · Червоний = Timeout · Сірий = Зупинено/Пауза
Min / Max / AvgМінімум, максимум, середня latency з початку сесії
Loss %Відсоток timeout-відповідей з початку сесії
Відправлено / ОтриманоЛічильники пакетів. Отримано зеленим якщо 100%
Інтерфейс — права панель
БлокОпис
Scrolling chartЛінійний графік — останні 60 пінгів (≈ 1 хвилина). Кольорові точки за рівнем latency. Розрив у лінії при timeout.
Лог пінгівЧас · ● OK / ● TIMEOUT · ms · % loss. До 200 рядків з прокруткою.
Кнопки управління

▶ Старт — починає пінгування · ⏸ Пауза — зупиняє SSE потік · 🔄 — скидає всю статистику і зупиняє

Налаштування роутера (inline)

Внизу сторінки — collapsible панель «⚙ Налаштування роутера». Дозволяє змінити всі параметри без переходу на іншу сторінку:

Назва · IP · Порт · Локація · Група · Кількість пінгів · Розмір пакету · TTL · Поріг latency · Індивідуальний інтервал · TCP порт · DNS hostname · HTTP check · SNMP · Нотатки

Зміни зберігаються через POST /api/router/<id>/update без перезавантаження. Кнопка «Зберегти» стає зеленою при успіху або червоною з текстом помилки при невдачі.

Технічна деталь

Пінг запускається через GET /api/live-ping/<id> — SSE потік, що генерує один пінг на секунду. Використовує ті самі параметри що й фоновий поллер (ping_count, ping_size, ping_ttl). При закритті сторінки SSE автоматично закривається.

NOC Board

Маршрут /noc — fullscreen сторінка для великого екрана або телевізора в серверній кімнаті. Повністю автономна (без sidebar), живі оновлення через SSE.

Як відкрити

Sidebar → NOC Board ↗ (відкривається в новій вкладці). Потім натисни F11 для повноекранного режиму, або кнопку ⛶ в правому верхньому куті сторінки.

Header
ЕлементОпис
● RouterMon NOCЛоготип з пульсуючою зеленою точкою
KPI бейджиX роутерів · Y онлайн · Z офлайн — оновлюються через SSE щосекунди
ГодинникHH:MM:SS у реальному часі
⛶ FullscreenВхід/вихід з повноекранного режиму. Іконка змінюється.
← ВихідПовернення до звичайного інтерфейсу
Фільтр груп

Якщо налаштовані групи — відображається рядок кнопок: «Всі» та по одній кнопці на групу. Клік фільтрує плитки без перезавантаження сторінки.

Плитки роутерів
СтанВигляд
ОнлайнЗелена рамка + легкий зелений фон + пульсуючий зелений dot
ОфлайнЧервона рамка що мигає + червоний фон + великий текст ОФЛАЙН
НевідомоСіра рамка

Кожна плитка містить: назва + IP · велика latency (кольорова) або ОФЛАЙН · 20-тиків uptime bar · badge статусу · TCP ✓/✗ · % loss · час останньої перевірки.

Анімації при зміні статусу
  • Офлайн → Онлайн: зелений flash по всій плитці
  • Онлайн → Офлайн: червоний flash + мигання рамки
  • Uptime bars перезавантажуються кожні 30 секунд з /api/router-mini
Для TV/Monitor: відкрий /noc у браузері, натисни F11. Сторінка сама підтримує live оновлення — нічого більше не потрібно.
Port Scanner

Маршрут /scan/<id> — TCP-сканування портів конкретного роутера через SSE (результати приходять в реальному часі).

За замовчуванням сканується: 21, 22, 23, 25, 53, 80, 110, 143, 443, 3306, 3389, 8080, 8443

Можна задати власний список портів через кому. Максимум 100 портів. Timeout 1 секунда на порт.

Скан підмережі

Маршрут /subnet-scan — виявлення активних хостів у підмережі.

Вводиш підмережу у форматі 192.168.1.0/24 (або просто 192.168.1.0 — автоматично /24). Максимум /22 (1022 хости).

Всі хости пінгуються паралельно. Для кожного активного хоста показується: IP · hostname · latency · чи вже є в моніторингу. Кнопка «+ Додати» одразу додає в RouterMon.

IP Info / WHOIS

Маршрут /ip-info?ip=X.X.X.X — збір інформації про IP-адресу.

ДжерелоДані
ip-api.comКраїна · Місто · ISP · AS · Координати · Часовий пояс
WHOISПовний текст WHOIS через whois.iana.org → referral сервер

Для приватних IP (RFC1918) WHOIS не запитується.

Telegram боти
Admin бот

Повний доступ до управління системою. Один адміністратор (один chat_id).

КомандаДія
/startПідключення бота, показ chat_id
/statusСтатус всіх роутерів: онлайн/офлайн з latency
/offlineСписок тільки офлайн роутерів
/topТоп 5 роутерів з найвищою latency
/ping <назва або IP>Пінгує конкретний роутер зараз, показує latency + loss
/pinglistСписок кнопок для вибору роутера для пінгу
/addrouter <назва> <IP>Додає новий роутер в моніторинг
/delrouterСписок кнопок для видалення роутера
/history [назва]Детальна статистика роутера з кнопками 1/6/24год/7днів
/code [назва]Коди доступу для клієнтів (/start CODE)
/settingsПоточні налаштування системи
/helpСписок всіх команд
Client бот

Клієнти підписуються на конкретні роутери через код доступу. Отримують сповіщення тільки про «свої» пристрої.

Підключення клієнта: надіслати боту /start А3B7K2 — де A3B7K2 це код роутера. Код можна дізнатись через /code в admin боті або в веб-інтерфейсі.

Команди client бота: /status · /offline · /top · /ping · /pinglist · /history · /help

Автоматичні алерти

Відправляються обом ботам (admin + всім підписаним клієнтам) при:

  • Роутер перейшов офлайн або відновився
  • Перевищено поріг latency (cooldown 10 хвилин)
  • Стрибок latency (вдвічі більше середнього, cooldown 10 хвилин)
  • DNS збій — hostname не резолвиться або вказує не на той IP
Email сповіщення (SMTP)

Налаштування в Налаштування → Email.

ПараметрОпис
SMTP HostХост сервера (smtp.gmail.com, smtp.ukr.net тощо)
SMTP PortПорт (587 для STARTTLS, 465 для SSL)
User / PasswordЛогін та пароль
FromEmail відправника (якщо порожньо — використовується User)
ToEmail одержувача алертів

Кнопка «Тест» відправляє тестовий лист. Email відправляється асинхронно в окремому потоці.

Webhook

POST-запит на вказаний URL при зміні статусу роутера. Інтеграція зі Slack, Discord, n8n, Make тощо.

Формат payload
{ "event": "offline", // або "online" "router_id": 5, "name": "Офіс", "ip": "192.168.1.1", "time": "2026-06-01 12:00:00" }
Авторизація

За замовчуванням захист вимкнений. Після встановлення пароля в Налаштування → Безпека — вхід потрібен для всіх сторінок крім публічного статусу.

ПараметрОпис
ЛогінІм'я користувача (default: admin)
ПарольЗберігається як SHA-256 хеш. Кнопка «Зняти захист» скидає пароль.
Якщо пароль забутий: sqlite3 /opt/phpmon/routers.db "UPDATE settings SET value='' WHERE key='web_password';"
Публічна статус-сторінка

Маршрут /status — публічна сторінка без авторизації. Показує всі увімкнені роутери: онлайн/офлайн + uptime bar за останні 90 днів. Можна поділитися з клієнтами.

AI Risk Score

API /api/risk — прогнозує ймовірність проблем у роутера (0–100) на основі:

ФакторВагаЛогіка
Поточна серія збоївдо 30+15 за кожну невдачу підряд
Збої в останніх 20 перевіркахдо 25Якщо частіше ніж середнє за тиждень
Зростання latencyдо 20Якщо поточна latency >1.4× від середньої за 7д
Небезпечна годинадо 15Якщо в цю годину доби часто падає
Небезпечний деньдо 10Якщо в цей день тижня часто падає

Кеш 120 секунд. Відображається у вигляді помаранчевого/червоного індикатора на картці роутера.

Network Health Score

API /api/health-score — загальна оцінка здоров'я мережі 0–100.

ScoreМіткаКолір
99–100Відмінно
95–98Добре
85–94Задовільно
70–84Погано
0–69Критично

Формула: базовий % онлайн − штраф за серії збоїв − штраф за latency спайки − штраф за порушення порогів.

Лог дій

Маршрут /logs — журнал всіх дій адміністратора: вхід/вихід · додавання роутерів · редагування · видалення · збереження налаштувань. Останні 300 записів.

Налаштування

Маршрут /settings — 4 вкладки.

ВкладкаПараметри
МоніторингІнтервал пінгу · Поріг офлайн · Webhook URL
TelegramТокен admin бота · Chat ID admin · Токен client бота · Chat ID client · Кнопки тестування
EmailSMTP host/port/user/password/from/to · Кнопка тест
БезпекаЛогін · Пароль (SHA-256) · Кнопка «Зняти захист»
API Endpoints
GET /stream SSE — live оновлення статусів всіх роутерів (кожні 5с)
GET /ping/<id> Пінгує один роутер, оновлює статус, повертає JSON
GET /api/history/<id>?h=24 Масив перевірок: time, online, ms, http, tcp, loss
GET /api/heatmap/<id> Uptime % по датах за 91 день для heatmap
GET /api/risk Risk score {id: {risk: 0-100, reason: "..."}} для всіх роутерів
GET /api/health-score Загальний health score мережі
GET /api/router-mini?ids=1,2,3 Uptime bars і sparklines для вказаних роутерів
GET /api/scan/<id>?ports=22,80 SSE — сканування TCP-портів
GET /api/mtr/<id> SSE — MTR трасування (streaming)
POST /api/mtr/<id>/save Зберегти MTR знімок. Body: {hops: [...], label: "..."}
GET /api/subnet-scan?subnet=192.168.1.0 Скан підмережі, повертає активні хости
POST /api/subnet-scan/add Додати хост зі сканування. Body: {ip, name}
GET /api/ip-info?ip=X.X.X.X Geo + WHOIS інформація про IP
POST /api/tg-report Відправити звіт в Telegram. Body: {chat_id, router_id?}
POST /telegram-webhook/<token> Telegram bot webhook endpoint
Корисні команди після деплою
КомандаДія
systemctl status phpmonСтатус сервісу
systemctl restart phpmonПерезапуск
journalctl -u phpmon -fЛоги в реальному часі
tail -f /var/log/phpmon/access.logHTTP access log
bash /opt/phpmon/deploy.shОновлення (backup DB автоматично)
ls /var/backups/phpmon/Список резервних копій БД
Структура файлів на VPS
/opt/phpmon/ ├── app.py # Основний застосунок ├── routers.db # SQLite база даних ├── .env # SECRET_KEY (генерується при деплої) ├── venv/ # Python virtual environment ├── static/style.css # CSS стилі └── templates/ # Jinja2 шаблони /var/log/phpmon/ ├── access.log # Nginx proxy access log └── error.log # Gunicorn error log /var/backups/phpmon/ # Резервні копії БД (10 останніх)