mirror of
https://github.com/andrey271192/vps_monitoring.git
synced 2026-09-20 11:55:34 +00:00
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:
195
README.md
195
README.md
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user