feat: keenetic integration, VPN alerts, docs

Wire keenetic monitor loop and router into main app. Add deduplicated
Telegram alerts for router offline, internet, CPU/RAM, and VPN down.
Update README with KeenDNS edit, import format, troubleshooting.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
Андрей Бобырев
2026-05-22 01:55:03 +03:00
parent 8f8e9a3234
commit 1c4f97124a
13 changed files with 1085 additions and 191 deletions

195
README.md
View File

@@ -1,18 +1,16 @@
# 🖥 VPS Monitoring
# VPS Monitoring
Платформа мониторинга VPS серверов с веб-интерфейсом, SSH терминалом и Telegram ботом.
Платформа мониторинга VPS, Keenetic-роутеров, Synology, Home Assistant и Windows PC с веб-панелью, SSH-терминалом и Telegram-ботом.
## Возможности
- **Мониторинг** — CPU, RAM, Disk, Network, Uptime, Load Average
- **SSH терминал** — подключение к серверам прямо из браузера
- **Telegram бот** — статус, алерты, управление (перезагрузка)
- **Telegram Mini App** — мобильная панель прямо в Telegram
- **Алерты** — уведомления при превышении порогов (CPU/RAM/Disk)
- **Управление** — добавление/удаление серверов, перезагрузка
- **Авторизация** — защита паролем с возможностью смены
- **VPS** — CPU, RAM, Disk, Network, Uptime, Load Average, SSH-терминал
- **Keenetic** — мониторинг роутеров через KeenDNS/RCI API, VPN-туннели, AnyDesk-ссылки
- **Synology / HA / PC** — дополнительные вкладки мониторинга
- **Telegram** — бот, Mini App, алерты (offline, CPU/RAM, VPN down 5+ мин)
- **KeenDNS edit** — изменение web URL прямо из карточки роутера
## Установка (одна команда)
## Установка
```bash
curl -sSL https://raw.githubusercontent.com/andrey271192/vps_monitoring/main/install.sh | bash
@@ -24,78 +22,141 @@ curl -sSL https://raw.githubusercontent.com/andrey271192/vps_monitoring/main/ins
```
### Требования
- Ubuntu 20.04+ / Debian 11+
- Python 3.10+
- 512 MB RAM минимум
### Ручная установка
```bash
git clone https://github.com/andrey271192/vps_monitoring.git /opt/vps-monitoring
cd /opt/vps-monitoring
python3 -m venv venv && source venv/bin/activate
pip install -r requirements.txt
cp .env.example .env # заполните TELEGRAM_*
mkdir -p data
```
Systemd unit (`/etc/systemd/system/vps-monitoring.service`):
- `WorkingDirectory=/opt/vps-monitoring`
- `ExecStart=/opt/vps-monitoring/venv/bin/uvicorn server.main:app --host 0.0.0.0 --port 7272`
```bash
systemctl daemon-reload && systemctl enable --now vps-monitoring
```
## После установки
- **Панель:** `http://YOUR_IP:7272`
- **Логин:** `admin` / `admin`
- **Telegram:** бот запускается автоматически
## Управление
```bash
# Статус
systemctl status vps-monitoring
# Перезапуск
systemctl restart vps-monitoring
# Логи
journalctl -u vps-monitoring -f
# Обновление
cd /opt/vps-monitoring && git pull && systemctl restart vps-monitoring
```
## Telegram бот
Команды:
- `/start` — главное меню
- Кнопки: статус серверов, управление, перезагрузка
- Mini App: полная панель в Telegram
## API
| Endpoint | Method | Описание |
|----------|--------|----------|
| `/api/servers` | GET | Список серверов |
| `/api/servers` | POST | Добавить сервер |
| `/api/servers/{id}` | DELETE | Удалить сервер |
| `/api/servers/{id}/reboot` | POST | Перезагрузить |
| `/api/servers/{id}/exec` | POST | Выполнить команду |
| `/api/settings` | GET/PUT | Настройки |
| `/api/health` | GET | Health check |
| `/ws/ssh/{id}` | WS | SSH терминал |
## Архитектура
```
FastAPI (Python) → SSH (asyncssh) → Target Servers
↕ ↕
Web UI (HTML/JS) Telegram Bot
xterm.js (SSH in browser)
```
- **Логин:** `admin` / `admin` (смените в настройках)
- **Health:** `GET /api/health`
## Переменные окружения
| Переменная | Описание |
|-----------|----------|
| `TELEGRAM_BOT_TOKEN` | Токен Telegram бота |
| `TELEGRAM_BOT_TOKEN` | Токен Telegram-бота |
| `TELEGRAM_CHAT_ID` | ID чата для алертов |
Задаются в systemd unit (`Environment=...`) или в `data/settings.json`. См. `.env.example`.
Дополнительные настройки в `data/settings.json`: пороги CPU/RAM/Disk, `keenetic_interval`, `muted_devices`.
## Keenetic — импорт роутеров
### Формат import (TSV/CSV)
Колонки: `Address`, `Keenetic`, `AnyDesk` (заголовок опционален).
```
Address Keenetic AnyDesk
Москва Сити https://moscowcity.netcraze.pro:5443
Лофт https://loftliliana.netcraze.pro 1020687391
Подмосковный http://95.165.93.46:777 1527495291
```
`POST /api/keenetic/import` — body: `{"login":"admin","password":"...","tsv":"..."}`.
### Скрипт синхронизации (24 роутера)
```bash
./venv/bin/python3 scripts/sync_keenetic_import.py /opt/vps-monitoring/data/keenetic.json
```
### HTTP/HTTPS и порты
- URL сохраняется как есть: `https://host:5443`, `http://91.77.164.164`
- Схема по умолчанию — `https` для KeenDNS, `http` для IP
- Порт входит в `host` и `web_url` (например `malahovka1.netcraze.pro:5083`)
- Кнопка **Веб** на карточке использует точный `web_url`
### KeenDNS edit (dashboard)
1. Карточка роутера → **✏️ KeenDNS**
2. Введите URL (`https://example.netcraze.pro:8443`)
3. **Сохранить**`PATCH /api/keenetic/{name}` обновляет `keenetic.json` и делает refresh
### Проверка доступности с VPS
```bash
cd /opt/vps-monitoring
./venv/bin/python3 scripts/quick_auth_check.py # быстрая auth-проверка
./venv/bin/python3 scripts/check_keenetic.py # полная (медленнее)
```
## Telegram алерты
Настройка: `TELEGRAM_BOT_TOKEN` + `TELEGRAM_CHAT_ID` в systemd или settings.
Keenetic алерты:
- Router offline / back online
- No internet
- CPU/RAM > 90%
- **VPN down 5+ минут** (sustained, deduplicated)
Per-device mute: 🔔/🔕 на карточке → `POST /api/notifications/mute-device`.
Тест: `POST /api/notifications/test/telegram`.
## API (основное)
| Endpoint | Method | Описание |
|----------|--------|----------|
| `/api/login` | POST | Авторизация |
| `/api/keenetic/list` | GET | Список роутеров |
| `/api/keenetic/import` | POST | Импорт TSV/CSV |
| `/api/keenetic/{name}` | PATCH | Обновить web_url |
| `/api/keenetic/refresh/{name}` | POST | Обновить один |
| `/api/keenetic/refresh-all` | POST | Обновить все |
| `/api/servers` | GET | VPS серверы |
| `/api/health` | GET | Health check |
## Troubleshooting
| Симптом | Причина | Действие |
|---------|---------|----------|
| `ConnectionTimeoutError` | VPS не достучался до роутера (сеть/VPN/firewall) | Проверить KeenDNS, порт, доступность с VPS: `curl -m 10 URL` |
| `Authentication failed` / 401 | Неверный login/password | Проверить credentials в keenetic.json |
| `Name or service not known` | DNS не резолвится | Проверить KeenDNS имя, TTL |
| Панель не отвечает | Сервис упал / перегрузка polling | `systemctl restart vps-monitoring`, `journalctl -u vps-monitoring -n 50` |
| Медленный refresh-all | 24 роутера × 3 retry × timeout | Использовать `quick_auth_check.py`, увеличить `keenetic_interval` |
```bash
systemctl status vps-monitoring
journalctl -u vps-monitoring --since "1 hour ago" -p err
ss -tlnp | grep 7272
```
## Обновление
```bash
cd /opt/vps-monitoring && git pull && systemctl restart vps-monitoring
```
## Автор
**@Iot_andrey**
- [GitHub](https://github.com/andrey271192)
- [Boosty](https://boosty.to/iot_andrey)
- [Поддержка](https://t.me/Iot_andrey)
- Telegram: [@Iot_andrey](https://t.me/Iot_andrey)
## Лицензия
**@Iot_andrey** — [GitHub](https://github.com/andrey271192) · [Telegram](https://t.me/Iot_andrey)
MIT