ваше сообщение коммита
This commit is contained in:
@@ -1,70 +0,0 @@
|
||||
# План настройки и тестирования поиска по таблице RAG
|
||||
|
||||
## 1. Подготовка таблицы RAG
|
||||
- [x] Убедиться, что таблица RAG создана и содержит пары "вопрос-ответ".
|
||||
- [x] Добавить несколько тестовых записей через UI или напрямую в базу данных.
|
||||
|
||||
## 2. Настройка провайдера эмбеддингов
|
||||
- [x] В настройках ассистента выбрать нужного провайдера (OpenAI, Ollama и др.).
|
||||
- [x] Ввести API-ключ и Base URL (например, для OpenAI: https://api.openai.com/v1).
|
||||
- [x] Сохранить настройки.
|
||||
|
||||
## 3. Проверка настроек ассистента
|
||||
- [x] Убедиться, что выбран актуальный ID таблицы RAG.
|
||||
- [x] Проверить выбранного провайдера эмбеддингов.
|
||||
- [x] Установить порог релевантности (например, 0.95).
|
||||
|
||||
## 4. Проверка backend-логики
|
||||
- [x] Проверить, что в backend (например, в ragService.js) реализован поиск по RAG с использованием выбранного провайдера эмбеддингов.
|
||||
- [x] Убедиться, что используется актуальный ID таблицы и динамический выбор провайдера.
|
||||
- [x] Проверить возможность изменения порога релевантности.
|
||||
|
||||
## 5. Тестирование через UI
|
||||
- [ ] Отправить ассистенту вопрос, который есть в RAG-таблице — убедиться, что ответ возвращается из базы.
|
||||
- [ ] Отправить вопрос, которого нет в таблице — убедиться, что ассистент либо не отвечает, либо использует LLM (по настройкам).
|
||||
|
||||
## 6. Проверка логов backend
|
||||
- [ ] Проверить логи на наличие сообщений о поиске по RAG, найденных совпадениях и выбранном провайдере эмбеддингов.
|
||||
- [ ] В случае ошибок — проанализировать и устранить их.
|
||||
|
||||
## 7. Тестирование через API (опционально)
|
||||
- [ ] Использовать Postman/curl для отправки запросов напрямую к backend.
|
||||
- [ ] Пример запроса:
|
||||
```http
|
||||
POST /api/chat/message
|
||||
{
|
||||
"userId": 137,
|
||||
"message": "Как зовут?"
|
||||
}
|
||||
```
|
||||
|
||||
## 8. Автоматизация тестирования (по желанию)
|
||||
- [ ] Написать автотесты (например, на Mocha/Jest), которые будут отправлять вопросы и сверять ответы с ожидаемыми из RAG.
|
||||
|
||||
## 9. Рекомендации
|
||||
- [ ] Для тестов использовать уникальные, простые вопросы и ответы.
|
||||
- [ ] После каждого изменения настроек проводить тестовые запросы.
|
||||
- [ ] Добавить в UI индикатор источника ответа (из базы или сгенерирован).
|
||||
|
||||
---
|
||||
|
||||
## Этапы внедрения сервиса векторного поиска (под ключ)
|
||||
|
||||
- [x] 1. Проектирование и создание структуры Python-сервиса (FastAPI + FAISS)
|
||||
- [x] 2. Реализация REST API: /upsert, /search, /delete, /rebuild, /health
|
||||
- [x] 3. Интеграция с Ollama для генерации эмбеддингов
|
||||
- [x] 4. Dockerfile и docker-compose для сервиса
|
||||
- [ ] 5. Интеграция Node.js backend с новым сервисом (HTTP-клиент)
|
||||
- [ ] 6. Перенос логики поиска из ragService.js на новый сервис
|
||||
- [ ] 7. Тестирование интеграции (ручное и через API)
|
||||
- [ ] 8. Документация по запуску и использованию
|
||||
- [ ] 9. Финальное тестирование через UI и API
|
||||
- [ ] 10. Передача проекта заказчику
|
||||
|
||||
---
|
||||
|
||||
**Прогресс:**
|
||||
- Сервис векторного поиска реализован, поддерживает кэширование, интеграцию с Ollama, все основные REST API.
|
||||
- Следующий этап — интеграция с Node.js backend и перенос логики поиска.
|
||||
|
||||
**Если потребуется пример кода или помощь с конкретной реализацией — обращайтесь!**
|
||||
293
md/WEBSSH_SETUP_GUIDE.md
Normal file
293
md/WEBSSH_SETUP_GUIDE.md
Normal file
@@ -0,0 +1,293 @@
|
||||
# Руководство по настройке WEB SSH
|
||||
|
||||
## Обзор
|
||||
|
||||
Система WEB SSH позволяет автоматически публиковать локальное Vue.js приложение в интернете через SSH-туннель и NGINX на удаленном сервере.
|
||||
|
||||
## Архитектура
|
||||
|
||||
```
|
||||
┌─────────────────────┐ ┌─────────────────────┐ ┌─────────────────────┐
|
||||
│ Vue.js Frontend │───▶│ WebSSH Agent │───▶│ VPS Server │
|
||||
│ (localhost:5173) │ │ (localhost:12345) │ │ (ваш сервер) │
|
||||
└─────────────────────┘ └─────────────────────┘ └─────────────────────┘
|
||||
│ │
|
||||
│ ▼
|
||||
│ ┌─────────────────────┐
|
||||
│ │ NGINX + SSL │
|
||||
│ │ (порт 80/443) │
|
||||
│ └─────────────────────┘
|
||||
│ │
|
||||
│ ▼
|
||||
│ ┌─────────────────────┐
|
||||
└─────────────▶│ SSH Reverse Tunnel │
|
||||
│ (порт 9000) │
|
||||
└─────────────────────┘
|
||||
```
|
||||
|
||||
## Требования
|
||||
|
||||
### Локальная машина
|
||||
- ✅ Node.js 16+
|
||||
- ✅ SSH клиент
|
||||
- ✅ Docker и Docker Compose
|
||||
- ✅ Yarn
|
||||
|
||||
### Удаленный сервер (VPS)
|
||||
- ✅ Ubuntu/Debian или CentOS/RHEL
|
||||
- ✅ SSH доступ с правами sudo/root
|
||||
- ✅ Открытые порты 80, 443, 22
|
||||
- ✅ Домен, указывающий на IP сервера
|
||||
|
||||
## Установка и настройка
|
||||
|
||||
### 1. Запуск основного приложения
|
||||
|
||||
```bash
|
||||
# Клонируйте проект
|
||||
git clone <your-repo-url>
|
||||
cd DApp-for-Business
|
||||
|
||||
# Запустите приложение
|
||||
docker-compose up -d
|
||||
|
||||
# Убедитесь, что фронтенд доступен
|
||||
curl http://localhost:5173
|
||||
```
|
||||
|
||||
### 2. Установка WebSSH Agent
|
||||
|
||||
```bash
|
||||
# Перейдите в директорию агента
|
||||
cd webssh-agent
|
||||
|
||||
# Установите зависимости
|
||||
npm install
|
||||
|
||||
# Запустите агент
|
||||
npm start
|
||||
# или в фоновом режиме:
|
||||
nohup node agent.js > agent.log 2>&1 &
|
||||
```
|
||||
|
||||
### 3. Проверка работы агента
|
||||
|
||||
```bash
|
||||
# Проверьте статус агента
|
||||
curl http://localhost:12345/health
|
||||
|
||||
# Ожидаемый ответ:
|
||||
# {"status":"ok","timestamp":"2025-07-06T18:08:57.789Z","version":"1.0.0","tunnelConnected":false}
|
||||
```
|
||||
|
||||
## Использование
|
||||
|
||||
### 1. Подготовка SSH ключей
|
||||
|
||||
```bash
|
||||
# Создайте SSH ключ (если еще нет)
|
||||
ssh-keygen -t rsa -b 4096 -C "webssh@yourdomain.com"
|
||||
|
||||
# Скопируйте публичный ключ на сервер
|
||||
ssh-copy-id -i ~/.ssh/id_rsa.pub user@your-server.com
|
||||
|
||||
# Проверьте подключение
|
||||
ssh -i ~/.ssh/id_rsa user@your-server.com
|
||||
```
|
||||
|
||||
### 2. Настройка через веб-интерфейс
|
||||
|
||||
1. Откройте приложение: `http://localhost:5173`
|
||||
2. Перейдите в **Настройки** → **WEB SSH**
|
||||
3. Заполните форму:
|
||||
|
||||
#### Обязательные поля:
|
||||
- **Домен**: `example.com` (ваш домен)
|
||||
- **Email для SSL**: `admin@example.com` (для Let's Encrypt)
|
||||
- **SSH Host/IP**: `192.168.1.100` или `server.example.com`
|
||||
- **SSH Пользователь**: `root` или ваш пользователь
|
||||
- **SSH Приватный ключ**: содержимое файла `~/.ssh/id_rsa`
|
||||
|
||||
#### Дополнительные настройки (заполняются автоматически):
|
||||
- **Локальный порт**: `5173` (порт Vue.js приложения)
|
||||
- **Порт сервера**: `9000` (порт для SSH туннеля)
|
||||
- **SSH порт**: `22` (стандартный SSH порт)
|
||||
|
||||
4. Нажмите **"Опубликовать"**
|
||||
|
||||
### 3. Процесс публикации
|
||||
|
||||
После нажатия "Опубликовать" агент автоматически:
|
||||
|
||||
1. ✅ Подключается к вашему серверу по SSH
|
||||
2. ✅ Устанавливает NGINX и certbot (если не установлены)
|
||||
3. ✅ Создает конфигурацию NGINX для вашего домена
|
||||
4. ✅ Перезапускает NGINX
|
||||
5. ✅ Получает SSL сертификат через Let's Encrypt
|
||||
6. ✅ Создает SSH reverse-туннель
|
||||
7. ✅ Ваше приложение становится доступным по адресу `https://yourdomain.com`
|
||||
|
||||
## Управление туннелем
|
||||
|
||||
### Через веб-интерфейс
|
||||
- **Статус**: отображается в верхней части страницы
|
||||
- **Отключить**: кнопка "Отключить" при активном туннеле
|
||||
- **Логи**: отображаются в нижней части страницы
|
||||
|
||||
### Через API
|
||||
```bash
|
||||
# Статус туннеля
|
||||
curl http://localhost:12345/tunnel/status
|
||||
|
||||
# Создание туннеля
|
||||
curl -X POST http://localhost:12345/tunnel/create \
|
||||
-H "Content-Type: application/json" \
|
||||
-d '{
|
||||
"domain": "example.com",
|
||||
"email": "admin@example.com",
|
||||
"sshHost": "192.168.1.100",
|
||||
"sshUser": "root",
|
||||
"sshKey": "-----BEGIN OPENSSH PRIVATE KEY-----\n...",
|
||||
"localPort": 5173,
|
||||
"serverPort": 9000,
|
||||
"sshPort": 22
|
||||
}'
|
||||
|
||||
# Отключение туннеля
|
||||
curl -X POST http://localhost:12345/tunnel/disconnect
|
||||
```
|
||||
|
||||
## Безопасность
|
||||
|
||||
### Локальная безопасность
|
||||
- ✅ Агент принимает соединения только с localhost
|
||||
- ✅ SSH ключи хранятся временно и удаляются после отключения
|
||||
- ✅ Все операции логируются
|
||||
|
||||
### Серверная безопасность
|
||||
- ✅ Используется HTTPS с автоматическими SSL сертификатами
|
||||
- ✅ NGINX настроен с безопасными заголовками
|
||||
- ✅ SSH туннель использует приватные ключи
|
||||
|
||||
## Устранение неполадок
|
||||
|
||||
### Агент не запускается
|
||||
```bash
|
||||
# Проверьте порт
|
||||
netstat -tulpn | grep 12345
|
||||
|
||||
# Проверьте логи
|
||||
tail -f webssh-agent/agent.log
|
||||
|
||||
# Убейте процесс и перезапустите
|
||||
pkill -f "node agent.js"
|
||||
nohup node agent.js > agent.log 2>&1 &
|
||||
```
|
||||
|
||||
### SSH соединение не устанавливается
|
||||
```bash
|
||||
# Проверьте SSH ключ
|
||||
ssh -i ~/.ssh/id_rsa user@server
|
||||
|
||||
# Проверьте доступность сервера
|
||||
ping your-server.com
|
||||
|
||||
# Проверьте SSH порт
|
||||
telnet your-server.com 22
|
||||
```
|
||||
|
||||
### NGINX не настраивается
|
||||
```bash
|
||||
# На сервере проверьте NGINX
|
||||
sudo nginx -t
|
||||
sudo systemctl status nginx
|
||||
|
||||
# Проверьте логи
|
||||
sudo tail -f /var/log/nginx/error.log
|
||||
```
|
||||
|
||||
### SSL сертификат не получается
|
||||
```bash
|
||||
# Проверьте DNS
|
||||
nslookup your-domain.com
|
||||
|
||||
# Проверьте доступность домена
|
||||
curl -I http://your-domain.com
|
||||
|
||||
# На сервере проверьте certbot
|
||||
sudo certbot certificates
|
||||
sudo tail -f /var/log/letsencrypt/letsencrypt.log
|
||||
```
|
||||
|
||||
### Туннель не работает
|
||||
```bash
|
||||
# Проверьте процесс SSH
|
||||
ps aux | grep ssh
|
||||
|
||||
# Проверьте порты на сервере
|
||||
sudo netstat -tulpn | grep 9000
|
||||
|
||||
# Проверьте логи агента
|
||||
tail -f webssh-agent/agent.log
|
||||
```
|
||||
|
||||
## Примеры использования
|
||||
|
||||
### Разработка
|
||||
```bash
|
||||
# Запустите локальное приложение
|
||||
docker-compose up -d
|
||||
|
||||
# Запустите агент
|
||||
cd webssh-agent && npm start
|
||||
|
||||
# Настройте туннель через веб-интерфейс
|
||||
# Ваше приложение доступно по https://yourdomain.com
|
||||
```
|
||||
|
||||
### Демонстрация клиентам
|
||||
```bash
|
||||
# Быстрая публикация для демо
|
||||
# 1. Заполните форму в веб-интерфейсе
|
||||
# 2. Нажмите "Опубликовать"
|
||||
# 3. Отправьте клиенту ссылку https://yourdomain.com
|
||||
```
|
||||
|
||||
### Тестирование на мобильных устройствах
|
||||
```bash
|
||||
# Опубликуйте приложение
|
||||
# Теперь можете тестировать на любых устройствах
|
||||
# через https://yourdomain.com
|
||||
```
|
||||
|
||||
## Файловая структура
|
||||
|
||||
```
|
||||
DApp-for-Business/
|
||||
├── webssh-agent/ # Локальный агент
|
||||
│ ├── agent.js # Основной файл агента
|
||||
│ ├── package.json # Зависимости
|
||||
│ ├── install.sh # Установочный скрипт
|
||||
│ └── README.md # Документация агента
|
||||
├── frontend/ # Vue.js приложение
|
||||
│ ├── src/
|
||||
│ │ ├── views/settings/
|
||||
│ │ │ └── WebSshSettingsView.vue # Страница настроек
|
||||
│ │ └── services/
|
||||
│ │ └── webSshService.js # Сервис для работы с агентом
|
||||
│ └── ...
|
||||
└── docker-compose.yml # Конфигурация Docker
|
||||
```
|
||||
|
||||
## Поддержка
|
||||
|
||||
Если у вас возникли проблемы:
|
||||
|
||||
1. Проверьте этот документ
|
||||
2. Посмотрите логи агента: `tail -f webssh-agent/agent.log`
|
||||
3. Проверьте статус: `curl http://localhost:12345/health`
|
||||
4. Создайте Issue в репозитории проекта
|
||||
|
||||
## Лицензия
|
||||
|
||||
MIT License
|
||||
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