ваше сообщение коммита
This commit is contained in:
111
md/WEB_SSH_TUNNEL_PLAN.md
Normal file
111
md/WEB_SSH_TUNNEL_PLAN.md
Normal file
@@ -0,0 +1,111 @@
|
||||
# Автоматизация публикации локального приложения через SSH-туннель и NGINX
|
||||
|
||||
## Описание задачи
|
||||
|
||||
Необходимо реализовать функционал, позволяющий пользователю локального веб-приложения в один клик опубликовать своё приложение в интернете по собственному домену. Для этого используется внешний сервер (VPS) с белым IP и доменом, на котором автоматически настраиваются:
|
||||
- Установка и настройка NGINX для проксирования домена на SSH-туннель
|
||||
- Выпуск и установка SSL-сертификата (Let's Encrypt)
|
||||
- SSH reverse-туннель с сервера на локальное приложение пользователя
|
||||
- (Опционально) Автоматическая установка NGINX и certbot на сервере по SSH силами локального агента
|
||||
|
||||
Пользователь заполняет форму с необходимыми данными, после чего система автоматически выполняет все шаги по настройке инфраструктуры.
|
||||
|
||||
---
|
||||
|
||||
## Архитектура решения
|
||||
|
||||
1. **Локальное приложение** работает в Docker-контейнере на ПК пользователя (порт 5173 проброшен наружу).
|
||||
2. **Локальный агент** (Node.js-приложение) устанавливается на ПК пользователя и позволяет фронтенду запускать команды (например, поднять SSH-туннель, а также настраивать NGINX/SSL на сервере по SSH) в один клик.
|
||||
3. **Агент по SSH подключается к серверу (VPS)** и:
|
||||
- Устанавливает NGINX и certbot (если не установлены)
|
||||
- Создаёт или обновляет конфиг NGINX для указанного домена (проксирует на порт 9000)
|
||||
- Перезапускает NGINX
|
||||
- Выпускает SSL-сертификат через certbot
|
||||
- Проверяет доступность домена по HTTPS
|
||||
- Запускает SSH reverse-туннель (9000:localhost:5173)
|
||||
4. **NGINX** на сервере проксирует домен на порт туннеля (9000).
|
||||
|
||||
---
|
||||
|
||||
## Необходимые данные для формы
|
||||
|
||||
- Домен (например, myapp.example.com)
|
||||
- Host/IP сервера
|
||||
- Пользователь SSH
|
||||
- SSH-ключ (или пароль)
|
||||
- E-mail для SSL (Let's Encrypt)
|
||||
|
||||
**Поля "Локальный порт приложения", "Порт на сервере для туннеля" и "Порт SSH" скрыты и всегда используются значения по умолчанию:**
|
||||
- Локальный порт: 5173
|
||||
- Порт на сервере: 9000
|
||||
- Порт SSH: 22
|
||||
|
||||
---
|
||||
|
||||
## UX-поток с локальным агентом (финальный порядок)
|
||||
|
||||
1. Пользователь заходит в локальное веб-приложение и заполняет форму публикации (домен, SSH и т.д.).
|
||||
2. Нажимает кнопку "Опубликовать".
|
||||
3. Агент автоматически скачивается, устанавливается и запускается (без дополнительных действий пользователя).
|
||||
4. После запуска агента фронтенд отправляет параметры публикации на локальный агент (порты и порт SSH подставляются автоматически).
|
||||
5. Агент по SSH подключается к серверу и:
|
||||
- Устанавливает NGINX и certbot (если не установлены)
|
||||
- Создаёт или обновляет конфиг NGINX для домена
|
||||
- Перезапускает NGINX
|
||||
- Выпускает SSL-сертификат через certbot
|
||||
- Запускает SSH reverse-туннель (9000:localhost:5173, порт SSH всегда 22)
|
||||
6. После успешного запуска туннеля приложение становится доступно по домену из интернета.
|
||||
|
||||
---
|
||||
|
||||
## План выполнения
|
||||
|
||||
### 1. Фронтенд
|
||||
- [ ] Добавить на страницу настроек интерфейса блок "WEB SSH" с кнопкой "Подробнее"
|
||||
- [ ] Создать отдельную страницу
|
||||
- [ ] Реализовать отправку формы на локальный агент (поля с портами и портом SSH скрыты, используются значения по умолчанию)
|
||||
- [ ] После успешной настройки — отобразить пользователю статус публикации с ссылкой на домен
|
||||
|
||||
### 2. Локальный агент
|
||||
- [ ] Реализовать Node.js-приложение (Web SSH Agent), слушающее локальный порт
|
||||
- [ ] API: запуск/остановка SSH-туннеля, статус, логирование
|
||||
- [ ] Автоматическая установка и настройка NGINX, выпуск SSL-сертификата на сервере по SSH
|
||||
- [ ] Безопасность: принимать команды только с localhost, авторизация по токену
|
||||
- [ ] Инструкция по установке для пользователя (Windows, Mac, Linux)
|
||||
- [ ] (Опционально) Автообновление агента
|
||||
|
||||
### 3. Бэкенд (опционально)
|
||||
- [ ] Реализовать API для логирования, аудита, хранения истории публикаций (если требуется)
|
||||
- [ ] Возвращать статус выполнения и сообщения об ошибках (если используется)
|
||||
|
||||
### 4. Инфраструктура/DevOps
|
||||
- [ ] Проверить, что на сервере открыт порт 9000 для туннеля
|
||||
- [ ] Проверить, что домен указывает на сервер
|
||||
- [ ] Проверить, что на сервере установлен NGINX и certbot
|
||||
- [ ] (Опционально) Добавить systemd unit для автозапуска туннеля
|
||||
|
||||
---
|
||||
|
||||
## Важные замечания
|
||||
- Для полной автоматизации публикации в один клик требуется локальный агент, который запускает команды на ПК пользователя и может настраивать сервер по SSH.
|
||||
- В браузере без агента можно только сгенерировать команду для ручного запуска SSH-туннеля.
|
||||
- Все действия на сервере должны выполняться только для авторизованных пользователей (лучше — только для админов)
|
||||
- Необходимо реализовать валидацию всех полей формы
|
||||
- **Используется именно проброшенный наружу порт из Docker (5173)**
|
||||
- **Порт SSH всегда 1024 (по умолчанию), пользователь не видит это поле**
|
||||
|
||||
---
|
||||
|
||||
приложение остаётся локально — туннель обязателен
|
||||
|
||||
---
|
||||
|
||||
## Пример команды для SSH-туннеля
|
||||
|
||||
```bash
|
||||
ssh -i /path/to/key -p 22 -R 9000:localhost:5173 user@ваш-сервер
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## С локальным агентом публикация действительно становится "в один клик"!
|
||||
Reference in New Issue
Block a user