ВиртМашУправ ВиртМашУправVPS Manager
Expo / React Native + NestJS

Управляй виртуальными машинами
и серверами прямо с телефона

Кроссплатформенное приложение для создания и управления VirtualBox VM и внешними SSH-серверами: файлы по SFTP, установка приложений, скрипты, мониторинг — и всё это с шифрованием SSH-паролей на устройстве ещё до отправки на сервер.

Панель управления виртуальной машиной в приложении
1

Возможности

Полный цикл управления инфраструктурой из одного приложения — от создания виртуальной машины до потокового вывода пользовательских скриптов.

VirtualBox VM
Создание, запуск, остановка и удаление виртуальных машин (Linux/Windows) прямо с телефона, включая клонирование из золотых образов VDI.
Внешние SSH-серверы
Подключение любых сторонних серверов по SSH с автоопределением ОС, sudo и systemd — без привязки к VirtualBox.
Файловый менеджер (SFTP)
Просмотр, загрузка и выгрузка файлов chunked-протоколом: до 2 ГБ на файл, 3 параллельные передачи, докачка после разрыва связи.
Магазин приложений
Установка ПО в один тап через apt (Linux) или Chocolatey (Windows) из курируемого каталога SystemApp.
Пользовательские скрипты
Скрипты с типизированными параметрами, потоковый вывод в реальном времени через WebSocket.
Docker / Podman
Управление контейнерами через тот же эфемерный SSH-токен, что и скрипты — движок определяется автоматически.
Облачные провайдеры
Импорт и управление серверами Timeweb и Yandex Cloud через единый интерфейс ManagedVmService.
Мониторинг
Статистика CPU/RAM/диска, фоновый опрос состояния VM каждые 30 секунд, история метрик.
2

Архитектура

Мобильное приложение на Expo/React Native общается с монолитным backend на NestJS через REST и WebSocket. Все операции с SSH выполняются через одноразовые токены — сервер никогда не хранит расшифрованные пароли дольше одного запроса. Полный разбор архитектуры →

flowchart LR
    subgraph client["Мобильный клиент (Expo / React Native)"]
        UI["Экраны (expo-router)"]
        RQ["React Query"]
        CR["Crypto Layer (Argon2id, AES-256-GCM)"]
    end

    subgraph backend["Backend (NestJS)"]
        API["REST API"]
        WS["WebSocket Gateway"]
        MODS["auth / vps / server-connection /
cloud-provider / custom-scripts"]
    end

    DB[("MySQL")]
    CACHE[("Redis / Valkey")]
    VBOX["VirtualBox"]
    SSHSRV["Внешние SSH-серверы"]
    CLOUD["Timeweb / Yandex Cloud API"]

    UI --> RQ --> API
    UI --> WS
    CR -. шифрование credentials .-> API
    API --> MODS
    WS --> MODS
    MODS --> DB
    MODS --> CACHE
    MODS -- SSH --> VBOX
    MODS -- SSH --> SSHSRV
    MODS -- REST --> CLOUD

Общая архитектура: клиент, NestJS API, MySQL, Redis/Valkey, SSH-серверы и VirtualBox

3

Безопасность

SSH-учётные данные никогда не покидают устройство в открытом виде, а каждая операция подтверждается одноразовым подписанным токеном. Все уровни защиты →

Шифрование на устройствеAES-256-GCM с ключом Argon2id — сервер видит только шифротекст.
Одноразовые SSH-токеныHKDF + HMAC-подпись, TTL 60 секунд, одноразовое использование.
Forward secrecycredentialSalt задаётся один раз при регистрации, не зависит от пароля аккаунта.
Защита от инъекцийБелый список параметров скриптов и SSRF-фильтр загрузок по URL.
4

Технологии

Мобильное приложение
ПлатформаExpo SDK 54, React Native 0.81
Роутингexpo-router 6 (файловая маршрутизация)
СостояниеZustand + TanStack React Query 5
Криптографияreact-native-quick-crypto, react-native-argon2
Хранилищеexpo-secure-store, AsyncStorage
Backend
ФреймворкNestJS 11, TypeScript
База данныхMySQL + Prisma 6
Кэш / очередиRedis (Valkey) через ioredis
SSH / SFTPssh2, ssh2-sftp-client
АутентификацияPassport JWT, Google/Yandex OAuth, MAX Bot