ВиртМашУправ ВиртМашУправ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