Этот проект представляет собой SSH-клиент, разработанный на Electron с фронтендом на React и Redux-Saga.
Проект следует чистой архитектуре (Clean Architecture) с элементами DDD (Domain-Driven Design) и организован как монорепозиторий с использованием Yarn Workspaces.
Проект организован как монорепозиторий, состоящий из двух частей:
- Бэкенд (
apps/back/
) – Electron-приложение, обрабатывающее SSH-сессии и взаимодействующее с системой. - Фронтенд (
apps/front/
) – React-приложение, обеспечивающее пользовательский интерфейс и управление терминалом через Redux-Saga.
- ✅ Подключение к удалённому серверу через SSH.
- ✅ Отправка команд и получение вывода.
- ✅ Управление процессами на сервере.
- ✅ Логирование SSH-сессий и ошибок.
- ✅ Гибкость за счёт Redux-Saga.
- ✅ Поддержка тёмной/светлой темы.
- ✅ Как пользователь, я хочу подключаться к удалённому серверу через SSH, чтобы управлять процессами с удалённой машины.
- ✅ Как пользователь, я хочу вводить команды в терминал и получать ответы, чтобы взаимодействовать с сервером в реальном времени.
- ✅ Как разработчик, я хочу видеть логи команд и ошибок, чтобы анализировать, что происходит в SSH-сессии.
- ✅ Как пользователь, я хочу переключать тему между светлой и тёмной, чтобы использовать удобный для глаз интерфейс.
SSHSession (Domain)
– описывает модель SSH-сессии.SSHService (Application)
– управляет сессиями, отправляет команды.SSHAdapter (Infrastructure)
– низкоуровневый адаптер для работы сssh2
.SSHHandler (IPC)
– слушает команды от фронта черезipcMain
.ObservabilityService.ts
– логирование черезWinston
.
ConnectToSSH.ts
– подключение к серверу.DisconnectSSH.ts
– разрыв соединения.ExecuteCommand.ts
– выполнение команд.SSHFacade.ts
– фасад для упрощённого доступа к SSH-функциям.
CommandExecutionError.ts
– ошибки выполнения команд.ConnectionError.ts
– ошибки подключения.SSHErrors.ts
– общее управление ошибками SSH.
ElectronAdapter.ts.ts
– адаптер для передачи данных через Electron.MockElectronAdapter.ts.ts
– мок адаптер для иммитации передачи данных во время работы фронтаSSHAdapterStrategy.ts
– стратегия выбора адаптера
ISSHTransportAdapter.ts
– адаптер для передачи данных через Electron.
logger.ts
– конфигурация логирования.ObservabilityService.ts
– сервис для отслеживания работы приложения.
ServerStorageService.ts
– сохранение информации о серверах.
actionType.ts
– список доступных экшенов.serverListSlice.ts
– reducer для управления списком серверов.serverListSaga.ts
– обработка асинхронных операций.
Terminal.tsx
– основной компонент терминала.TerminalInput.tsx
– поле ввода команд.TerminalMessages.tsx
– отображение списка сообщений.terminal.scss
– стили терминала.
ConnectedView.tsx
– экран при успешном подключении.DisconnectedView.tsx
– экран при разрыве соединения.DisconnectionControl.tsx
– управление отключением.StatusBar.tsx
– строка состояния.
AuthTypeSelector.tsx
– выбор типа авторизации.ServerForm.tsx
– форма для ввода данных сервера.ServerInput.tsx
– поле ввода данных сервера.ServerList.tsx
– отображение списка серверов.ServerSelector.tsx
– выбор сервера для подключения.
yarn install
yarn dev:all # Запускает фронт и бэк одновременно
yarn dev:front
yarn dev:back
yarn build:all
Проект разделён на слои, что упрощает поддержку и расширение:
- Domain (доменный слой) – содержит бизнес-логику (модели SSH-сессий, команды).
- Application (слой приложения) – обработка команд, взаимодействие с доменом.
- Infrastructure (инфраструктурный слой) – работа с внешними сервисами (SSH, Electron API).
- View – фронтенд, отображение данных.
- store - Redux, Redux-saga - шина между фронтэндом и Application
- 🎯 Чёткое разделение логики
- 🔥 Гибкость в изменениях
- 🚀 Масштабируемость
- Подключение по SSH.
- Отправка команд и получение вывода.
- Логирование ошибок.
- Поддержка темной/светлой темы.
- Написание тестов
- Добавление состояний XState на фронте
- Добавление поддержки WebSockets.
- Загрузка списка серверов на электрон с сохранение на БД
- Автоматическая реконнекция при разрыве соединения.
- Улучшенный UI для работы с терминалом.