ваше сообщение коммита

This commit is contained in:
2025-07-09 01:18:58 +03:00
parent c18b674364
commit 81dced1f11
54 changed files with 15732 additions and 214 deletions

View File

@@ -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
View 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
View 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@ваш-сервер
```
---
## С локальным агентом публикация действительно становится "в один клик"!