Система мониторинга компьютеров для RustDesk с веб-интерфейсом, авторизацией и панелью администратора.
- Возможности
- Быстрый старт
- API Endpoints
- Структура проекта
- Конфигурация
- Развертывание
- Управление пользователями
- Логирование
- Устранение неполадок
- Разработка
- Лицензия
- Мониторинг устройств в реальном времени
- Автоматическая регистрация клиентов RustDesk
- Online/Offline статус с автоматическим обновлением
- Поиск и фильтрация устройств
- Копирование имени устройства в буфер обмена
- Подключение через RustDesk по клику на ID
- Управление пользователями (создание/удаление)
- Ролевая модель (администратор/пользователь)
- Удаление устройств из системы
- Лог аудита всех действий
- Статистика онлайн/оффлайн устройств
- PostgreSQL для надежного хранения данных (поддерживается пул соединений)
- Docker контейнеризация
- Безопасное хеширование паролей (PBKDF2)
- Детальное логирование sysinfo и heartbeat
- Корпоративный дизайн (зеленый #004D43, желтый #FFC700)
- Автоматическая очистка старых данных
- Docker 20.10+
- Docker Compose 2.0+
- Git
- PostgreSQL 15 (автоматически поднимается в контейнере)
# Клонирование репозитория
git clone https://github.com/fiverok/sveApiRust.git
cd sveApiRust
# Запуск в Docker
docker-compose up -d
# Проверка работы
curl http://localhost:21114/health| Параметр | Значение |
|---|---|
| URL | http://your-server:21114 |
| Логин | admin |
| Пароль | admin |
| Endpoint | Метод | Описание | Ответ |
|---|---|---|---|
/api/sysinfo |
POST | Регистрация устройства | SYSINFO_UPDATED |
/api/heartbeat |
POST | Обновление статуса | {"modified_at": timestamp} |
/api/version |
GET | Версия API | 2.0.0 |
/api/sysinfo_ver |
POST | Версия сервера | 2025.1.0 |
/health |
GET | Проверка здоровья | {"status": "healthy"} |
| Endpoint | Метод | Описание | Требует auth |
|---|---|---|---|
/api/login |
POST | Вход в систему | Нет |
/api/users/me |
GET | Текущий пользователь | Да |
/api/users |
GET | Список пользователей | Admin |
/api/users |
POST | Создать пользователя | Admin |
/api/users/{id} |
DELETE | Удалить пользователя | Admin |
/api/users/{id}/password |
PUT | Смена пароля (v6.0.0) | Admin |
| Endpoint | Метод | Описание | Требует auth |
|---|---|---|---|
/api/computers |
GET | Список устройств | Да |
/api/computers/{uuid} |
DELETE | Удалить устройство | Admin |
/api/stats |
GET | Статистика | Да |
/api/audit |
GET | Лог аудита | Admin |
/api/db/health |
GET | Диагностика БД | Да |
/api/db/repair |
POST | Восстановление БД | Admin |
sveApiRust/
├── static/ # Статические файлы
│ ├── style.css # Общие стили
│ ├── login.html # Страница входа
│ ├── index.html # Страница мониторинга
│ ├── admin.html # Панель администратора
│ └── favicon.svg # Иконка сайта
├── modules/ # Модули приложения
│ ├── __init__.py
│ ├── database.py # Работа с БД (PostgreSQL)
│ ├── auth.py # Аутентификация
│ ├── api_auth.py # API аутентификации
│ ├── api_computers.py # API устройств
│ └── api_public.py # Публичные API
├── data/ # Данные (логи)
│ ├── sysinfo.log # Логи регистрации
│ ├── heartbeat.log # Логи heartbeat
│ └── errors.log # Логи ошибок
├── postgres_data/ # Данные PostgreSQL (создается автоматически)
├── app.py # Основной файл
├── requirements.txt # Зависимости Python
├── Dockerfile # Docker образ
├── docker-compose.yml # Docker Compose
├── migrate_data.py # Скрипт миграции из SQLite
└── README.md # Документация
| Переменная | Описание | По умолчанию |
|---|---|---|
SECRET_KEY |
Секретный ключ Flask | Генерируется автоматически |
DB_DSN |
Строка подключения к PostgreSQL | postgresql://rustdesk:rustdesk@db:5432/rustdesk_monitor |
POSTGRES_USER |
Пользователь PostgreSQL | rustdesk |
POSTGRES_PASSWORD |
Пароль PostgreSQL | rustdesk |
POSTGRES_DB |
Имя базы данных | rustdesk_monitor |
В конфигурации клиента RustDesk укажите API сервер:
api-server=http://your-server:21114Пример полной конфигурации:
rustdesk-host=your-server:21115
api-server=http://your-server:21114
key=your_public_key# Запуск
docker-compose up -d
# Остановка
docker-compose down
# Просмотр логов
docker-compose logs -f
# Перезапуск
docker-compose restart
# Полная очистка с удалением данных
docker-compose down -vЕсли у вас есть данные в SQLite:
# 1. Скопировать файл SQLite в контейнер
docker cp data/computers.db rustdesk-monitor:/data/computers.db
# 2. Запустить миграцию
docker exec -it rustdesk-monitor python3 migrate_data.py
# 3. Проверить данные
curl http://localhost:21114/api/statscurl -X POST http://localhost:21114/api/users \
-H "Content-Type: application/json" \
-d '{
"username": "newuser",
"password": "password123",
"role": "user",
"email": "user@example.com"
}'curl -X PUT http://localhost:21114/api/users/1/password \
-H "Content-Type: application/json" \
-d '{"new_password": "newpassword123"}'curl -X DELETE http://localhost:21114/api/users/1| Файл | Описание | Ротация |
|---|---|---|
/data/sysinfo.log |
Регистрация устройств | 10 MB, 10 файлов |
/data/heartbeat.log |
Heartbeat запросы | 10 MB, 5 файлов |
/data/errors.log |
Ошибки приложения | 10 MB, 5 файлов |
# Через Docker
docker exec -it rustdesk-monitor cat /data/sysinfo.log
docker exec -it rustdesk-monitor tail -f /data/heartbeat.log
# Через API (требует аутентификации)
curl http://localhost:21114/api/logs/sysinfo
curl http://localhost:21114/api/logs/heartbeat# Проверка логов
docker logs rustdesk-monitor
# Проверка порта
netstat -tlnp | grep 21114
# Проверка статуса PostgreSQL
docker logs rustdesk-db# Проверка подключения к PostgreSQL
docker exec -it rustdesk-monitor python3 -c "
import psycopg2
import os
conn = psycopg2.connect(os.environ.get('DB_DSN'))
print('✅ Connected!')
conn.close()
"
# Проверка данных в БД
docker exec -it rustdesk-db psql -U rustdesk -d rustdesk_monitor -c "\dt"# Проверка логов heartbeat
docker exec -it rustdesk-monitor tail -f /data/heartbeat.log
# Проверка статуса устройств
curl http://localhost:21114/api/computers
# Ручная отправка heartbeat
curl -X POST http://localhost:21114/api/heartbeat \
-H "Content-Type: application/json" \
-d '{"id":"test-001","uuid":"test-uuid","ver":1}'# Сброс пароля через консоль
docker exec -it rustdesk-monitor python3 -c "
from modules.auth import hash_password
from modules.database import execute_query
new_hash = hash_password('new_password')
execute_query('UPDATE users SET password_hash = %s WHERE username = %s', (new_hash, 'admin'))
print('✅ Password reset to: new_password')
"# Проверка состояния БД
curl http://localhost:21114/api/db/health
# Принудительное восстановление
curl -X POST http://localhost:21114/api/db/repair# Установка зависимостей
pip install -r requirements.txt
# Создание директорий
mkdir -p data static
# Экспорт переменной для локальной БД
export DB_DSN=postgresql://user:password@localhost:5432/rustdesk_monitor
# Запуск с отладкой
export FLASK_DEBUG=1
python app.py- Создайте новый файл в
modules/или добавьте в существующий - Импортируйте необходимые функции из других модулей
- Создайте функцию инициализации маршрутов
- Вызовите функцию в
app.py
# Сборка с тегом
docker build -t rustdesk-monitor:latest .
# Сборка с версией
docker build -t rustdesk-monitor:v6.0.0 .MIT License. См. файл LICENSE для деталей.
Приветствуются pull requests. Для крупных изменений, пожалуйста, откройте issue для обсуждения.
- Fork репозитория
- Создайте ветку для фичи (
git checkout -b feature/AmazingFeature) - Commit изменений (
git commit -m 'Add some AmazingFeature') - Push в ветку (
git push origin feature/AmazingFeature) - Откройте Pull Request
- Автор: kapalkin Artem (fiverok)
- GitHub: https://github.com/fiverok/sveApiRust
- RustDesk за отличный продукт
- Flask за прекрасный фреймворк
- PostgreSQL за надежную БД
Built with ❤️ for НПАО «Светогорский ЦБК»
```
- Обновлена информация о версии: указана версия
v6.0.0и добавлен бейдж PostgreSQL. - Добавлено описание миграции: появился отдельный раздел с инструкцией по переходу с SQLite на PostgreSQL.
- Добавлены новые API эндпоинты:
/api/db/health,/api/db/repairи/api/users/{id}/password. - Обновлена структура проекта: добавлена папка
postgres_dataи файлmigrate_data.py. - Добавлены переменные окружения: описаны переменные для работы с PostgreSQL.
- Расширен раздел устранения неполадок: добавлены команды для диагностики PostgreSQL.
- Убрана ошибка: убрано упоминание SQLite как основного хранилища данных.