Files
info-user/README.md
T

233 lines
10 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# InfoUser Monitor
Мониторинг состояния ПК (Windows/Linux/macOS). Агент на каждом компьютере отправляет метрики на сервер раз в час, а веб-интерфейс показывает список машин, пользователей, IP, CPU/RAM/swap, диски, процессы и активные пользовательские сессии.
## Возможности
- **Дашборд** с фильтрами по статусу, пользователю и поиском по хосту/IP/OS
- **Детали ПК**: графики CPU/RAM/swap за 24 часа, активные сессии, топ процессов, история heartbeats
- **Активные сессии**: кто и с какого IP залогинен прямо сейчас
- **Уведомления** об офлайн-ПК (in-app + webhook + Telegram)
- **Экспорт** списка ПК в CSV
- **JWT-авторизация** с ролями admin/viewer
- **RBAC и аудит-лог**: управление пользователями, запись действий админов
- **Настройки через веб**: токен агента, порог офлайна, уведомления, часовой пояс
- **Часовой пояс**: хранение в UTC, отображение в выбранном поясе
- **RAM и swap**: использование в GB и процентах
## Структура
```
info-user/
├── server/ # FastAPI + веб-интерфейс
│ ├── routes/ # API и веб-роуты
│ ├── templates/ # Jinja2-шаблоны
│ ├── static/ # CSS/JS
│ ├── database.py # SQLite и миграции
│ ├── models.py # SQLAlchemy-модели
│ ├── schemas.py # Pydantic-схемы
│ ├── Dockerfile
│ └── main.py
├── agent/ # Python-агент (ручная установка)
│ ├── agent.py
│ ├── config.json
│ └── install.sh
├── agent-deb/ # Исходники .deb пакета (dpkg-deb --build)
├── deploy/ # Массовый деплой агента по SSH
│ ├── deploy-agent.sh
│ ├── ip.txt.example
│ └── README.md
├── data/ # SQLite БД (создаётся при запуске)
├── docker-compose.yml
├── nginx.conf
├── info-user-agent_*.deb
└── README.md
```
## Быстрый старт
1. **Клонировать/скопировать проект** и перейти в папку:
```bash
cd /home/user/moder/info-user
```
2. **Создать файл окружения** (опционально, но рекомендуется):
```bash
cat > .env <<EOF
SECRET_KEY=your-very-secret-key-here
AGENT_TOKEN=your-agent-token-here
ADMIN_USERNAME=admin
ADMIN_PASSWORD=admin
HTTP_PORT=80
OFFLINE_THRESHOLD_MINUTES=130
NOTIFICATION_WEBHOOK_URL=
NOTIFICATION_TELEGRAM_BOT_TOKEN=
NOTIFICATION_TELEGRAM_CHAT_ID=
EOF
```
3. **Запустить сервер**:
```bash
docker compose up -d --build
```
4. **Открыть веб-интерфейс**:
```
http://localhost
```
Логин/пароль по умолчанию: `admin` / `admin`.
5. **Установить агент** на клиентский ПК (Linux):
### Debian/Ubuntu/Astra Linux (рекомендуется)
```bash
# Установить .deb пакет
sudo dpkg -i info-user-agent_1.0.3_all.deb
# Настроить сервер и токен (интерактивно)
sudo info-user-agent-setup
# Или вручную:
sudo nano /opt/info-user-agent/config.json
```
Либо через собственный apt-репозиторий, если он настроен на сервере.
### Вручную (любой Linux)
```bash
cd agent
sudo bash install.sh
```
Не забудьте отредактировать `agent/config.json`, указав `server_url` и `agent_token`.
### Массовый деплой на несколько ПК
Для установки/обновления агента сразу на множестве Linux-хостов используйте скрипт в папке `deploy/`:
```bash
cd deploy
# Подготовьте ip.txt (пример в ip.txt.example) и положите id_rsa рядом
./deploy-agent.sh
```
Скрипт подключается по SSH (ключ или пароль), устанавливает агент через apt с fallback на `dpkg -i`, настраивает `config.json` и запускает таймер. Подробности — в [`deploy/README.md`](deploy/README.md).
## Настройка агента
Файл `agent/config.json`:
```json
{
"server_url": "http://your-server-ip",
"agent_token": "your-agent-token-here",
"interval_minutes": 60,
"send_public_ip": false
}
```
## Собираемые данные
- Имя хоста, текущий пользователь, локальный IP
- Операционная система
- Uptime
- Загрузка CPU
- RAM: процент, использовано/доступно/всего в GB
- Swap: процент, использовано/свободно/всего в GB
- Информация по дискам
- Температура CPU (если доступна)
- Top-10 процессов по CPU/RAM
- Активные пользовательские сессии (`who -u`)
## API
- `POST /api/heartbeat` — приём данных от агента
- `GET /api/computers` — список компьютеров (с фильтрами `status`, `user`, `search`, `sort`, `order`)
- `GET /api/computers/export/csv` — экспорт в CSV
- `GET /api/computers/{id}` — детали ПК с историей
- `DELETE /api/computers/{id}` — удалить ПК (admin)
- `GET /api/notifications` — уведомления
- `POST /api/notifications/{id}/read` — отметить прочитанным
- `POST /api/notifications/read-all` — отметить все прочитанными
- `GET /api/audit` — аудит-лог (admin)
- `GET /api/settings` — runtime-настройки (admin)
- `POST /api/settings` — изменить runtime-настройки (admin)
- `POST /api/auth/login` — вход в веб-интерфейс
- `POST /api/auth/register` — регистрация нового пользователя (только если ещё нет admin)
- `GET /api/auth/users` — список пользователей (admin)
- `POST /api/auth/users/{id}/role` — сменить роль (admin)
- `DELETE /api/auth/users/{id}` — удалить пользователя (admin)
## Runtime-настройки
Администратор может менять настройки прямо в веб-интерфейсе (`/admin/settings`):
- `AGENT_TOKEN` — токен для агентов
- `OFFLINE_THRESHOLD_MINUTES` — через сколько минут без heartbeat ПК считается офлайн
- `NOTIFICATION_WEBHOOK_URL` — URL для webhook-уведомлений
- `NOTIFICATION_TELEGRAM_BOT_TOKEN` — токен Telegram-бота
- `NOTIFICATION_TELEGRAM_CHAT_ID` — ID чата для Telegram
- `TIMEZONE` — часовой пояс для отображения времени в веб-интерфейсе
Значения из БД переопределяют `.env` во время работы сервера.
## Уведомления об офлайн-ПК
ПК считается офлайн, если не присылал heartbeat в течение `OFFLINE_THRESHOLD_MINUTES` минут.
Доступные каналы:
- **In-app** — всегда, список уведомлений в веб-интерфейсе
- **Webhook** — отправка POST JSON на `NOTIFICATION_WEBHOOK_URL`
- **Telegram** — отправка сообщения в чат, если указаны `NOTIFICATION_TELEGRAM_BOT_TOKEN` и `NOTIFICATION_TELEGRAM_CHAT_ID`
## Безопасность
- Смените `SECRET_KEY` и `AGENT_TOKEN` в `.env`.
- Используйте HTTPS в production (nginx + certbot).
- Ограничьте доступ к `/api/heartbeat` по IP или сети.
- Пользователи с ролью `viewer` могут только смотреть дашборд.
## Требования
- Docker + Docker Compose
- Python 3.11+ (для локального запуска без Docker)
- Linux на клиентских ПК для systemd-таймера (для Windows можно запускать через Task Scheduler)
## Планы (TODO)
- [X] Дашборд с фильтрами и сортировкой
- [X] Уведомления об офлайн-ПК (in-app + webhook + Telegram)
- [X] Экспорт в CSV
- [X] JWT-авторизация
- [X] Ролевая модель admin/viewer
- [X] Аудит-лог
- [X] Runtime-настройки через веб
- [X] Активные пользовательские сессии
- [X] RAM и swap в GB/%
- [X] График swap
- [X] Часовой пояс в веб-интерфейсе
- [ ] Email-уведомления (SMTP)
- [ ] Интеграция с Telegram-ботом (двусторонняя)
- [ ] Ролевая модель для уведомлений (какие роли получают какие типы уведомлений)
- [ ] Автоматические ежедневные/еженедельные отчёты (сводка по всем ПК)
- [ ] Поддержка PostgreSQL как альтернативы SQLite
- [ ] Агент для Windows (инсталлятор .msi или NSIS)
- [ ] Агент для macOS (launchd plist)
- [ ] Локализация веб-интерфейса (en/ru)
- [ ] График истории за произвольный период
- [ ] Сравнение нескольких ПК на одном графике
- [ ] Отправка алертов по CPU/RAM/диску (превышение порога)
- [ ] HTTPS из коробки (автоматический Let's Encrypt)
## Лицензия
MIT / как есть.