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

Administrează mașini virtuale
și servere direct de pe telefon

Aplicație cross-platform pentru crearea și gestionarea mașinilor virtuale VirtualBox și a serverelor SSH externe: fișiere prin SFTP, instalare de aplicații, scripturi, monitorizare — totul cu criptarea parolelor SSH pe dispozitiv, chiar înainte de a fi trimise către server.

Panoul de control al unei mașini virtuale în aplicație
1

Funcționalități

Ciclu complet de administrare a infrastructurii dintr-o singură aplicație — de la crearea unei mașini virtuale până la afișarea în flux a rezultatului scripturilor personalizate.

VirtualBox VM
Creare, pornire, oprire și ștergere a mașinilor virtuale (Linux/Windows) direct de pe telefon, inclusiv clonare din imagini VDI de referință (golden images).
Servere SSH externe
Conectarea oricăror servere terțe prin SSH, cu detectarea automată a SO, sudo și systemd — fără a fi legate de VirtualBox.
Manager de fișiere (SFTP)
Vizualizare, descărcare și încărcare de fișiere printr-un protocol pe fragmente (chunked): până la 2 GB per fișier, 3 transferuri paralele, reluare după întreruperea conexiunii.
Magazin de aplicații
Instalarea programelor dintr-un singur tap prin apt (Linux) sau Chocolatey (Windows), dintr-un catalog SystemApp curatoriat.
Scripturi personalizate
Scripturi cu parametri tipizați, afișare în timp real a rezultatului prin WebSocket.
Docker / Podman
Gestionarea containerelor prin același token SSH efemer ca și scripturile — motorul este detectat automat.
Furnizori cloud
Import și gestionare a serverelor Timeweb și Yandex Cloud printr-o interfață unificată ManagedVmService.
Monitorizare
Statistici CPU/RAM/disc, interogare periodică a stării VM la fiecare 30 de secunde, istoric al metricilor.
2

Arhitectură

Aplicația mobilă pe Expo/React Native comunică cu un backend monolitic pe NestJS prin REST și WebSocket. Toate operațiunile SSH sunt executate prin token-uri de unică folosință — serverul nu stochează niciodată parolele decriptate mai mult decât durata unei singure cereri. Analiza completă a arhitecturii →

flowchart LR
    subgraph client["Client mobil (Expo / React Native)"]
        UI["Ecrane (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["Servere SSH externe"]
    CLOUD["Timeweb / Yandex Cloud API"]

    UI --> RQ --> API
    UI --> WS
    CR -. criptarea credențialelor .-> API
    API --> MODS
    WS --> MODS
    MODS --> DB
    MODS --> CACHE
    MODS -- SSH --> VBOX
    MODS -- SSH --> SSHSRV
    MODS -- REST --> CLOUD

Arhitectura generală: client, API NestJS, MySQL, Redis/Valkey, servere SSH și VirtualBox

3

Securitate

Datele de autentificare SSH nu părăsesc niciodată dispozitivul în formă necriptată, iar fiecare operațiune este confirmată printr-un token semnat de unică folosință. Toate nivelurile de protecție →

Criptare pe dispozitivAES-256-GCM cu o cheie Argon2id — serverul vede doar textul cifrat.
Token-uri SSH de unică folosințăHKDF + semnătură HMAC, TTL 60 de secunde, utilizare unică.
Forward secrecycredentialSalt este stabilit o singură dată la înregistrare, nu depinde de parola contului.
Protecție împotriva injecțiilorListă albă de parametri pentru scripturi și filtru SSRF pentru descărcările prin URL.
4

Tehnologii

Aplicație mobilă
PlatformăExpo SDK 54, React Native 0.81
Rutareexpo-router 6 (rutare bazată pe fișiere)
StareZustand + TanStack React Query 5
Criptografiereact-native-quick-crypto, react-native-argon2
Stocareexpo-secure-store, AsyncStorage
Backend
FrameworkNestJS 11, TypeScript
Bază de dateMySQL + Prisma 6
Cache / coziRedis (Valkey) prin ioredis
SSH / SFTPssh2, ssh2-sftp-client
AutentificarePassport JWT, Google/Yandex OAuth, MAX Bot