Кроссплатформенное приложение для создания и управления VirtualBox VM и внешними SSH-серверами: файлы по SFTP, установка приложений, скрипты, мониторинг — и всё это с шифрованием SSH-паролей на устройстве ещё до отправки на сервер.
Полный цикл управления инфраструктурой из одного приложения — от создания виртуальной машины до потокового вывода пользовательских скриптов.
Мобильное приложение на 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
SSH-учётные данные никогда не покидают устройство в открытом виде, а каждая операция подтверждается одноразовым подписанным токеном. Все уровни защиты →
| Мобильное приложение | |
|---|---|
| Платформа | 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 / SFTP | ssh2, ssh2-sftp-client |
| Аутентификация | Passport JWT, Google/Yandex OAuth, MAX Bot |
Несколько экранов приложения. Смотреть все 15 скриншотов →