All checks were successful
Deploy Smart Search Backend Test / deploy (push) Successful in 1m24s
154 lines
5.2 KiB
Markdown
154 lines
5.2 KiB
Markdown
# Инструкция по развертыванию
|
||
|
||
## Архитектура
|
||
|
||
Сервис построен на:
|
||
- **rk-boot** - фреймворк для микросервисов с автоматической конфигурацией gRPC, логированием, метриками и трейсингом
|
||
- **pgx/v5** - нативный высокопроизводительный драйвер PostgreSQL с connection pooling
|
||
|
||
## Быстрый старт
|
||
|
||
### 1. Установка goose для миграций
|
||
|
||
```bash
|
||
go install github.com/pressly/goose/v3/cmd/goose@latest
|
||
```
|
||
|
||
### 2. Применение миграций
|
||
|
||
```bash
|
||
# Экспортируйте DATABASE_URL или используйте напрямую
|
||
export DB_URL="postgres://postgres:password@localhost:5432/b2b_search?sslmode=disable"
|
||
make migrate-up
|
||
```
|
||
|
||
### 3. Настройка переменных окружения
|
||
|
||
Создайте `.env` файл или экспортируйте переменные:
|
||
|
||
```bash
|
||
export DB_HOST=localhost
|
||
export DB_PORT=5432
|
||
export DB_NAME=b2b_search
|
||
export DB_USER=postgres
|
||
export DB_PASSWORD=password
|
||
export OPENAI_API_KEY=your-openai-key
|
||
export PERPLEXITY_API_KEY=your-perplexity-key
|
||
export GRPC_PORT=9091
|
||
```
|
||
|
||
**🧪 Mock-режим для тестирования:**
|
||
|
||
Если API ключи не указаны, сервис автоматически переключится в mock-режим:
|
||
- **OpenAI**: вернет структурированное mock ТЗ
|
||
- **Perplexity**: вернет 15 тестовых поставщиков
|
||
|
||
Это позволяет тестировать сервис без реальных API ключей!
|
||
|
||
```bash
|
||
# Запуск в mock-режиме (без API ключей)
|
||
make run
|
||
```
|
||
|
||
### 4. Запуск сервиса
|
||
|
||
```bash
|
||
# Локальный запуск
|
||
make run
|
||
|
||
# Или сборка и запуск
|
||
make build
|
||
./bin/server
|
||
```
|
||
|
||
## Docker Compose
|
||
|
||
```bash
|
||
# Запуск всех сервисов
|
||
docker-compose up -d
|
||
|
||
# Просмотр логов
|
||
docker-compose logs -f smart-search-service
|
||
|
||
# Остановка
|
||
docker-compose down
|
||
```
|
||
|
||
## Миграции
|
||
|
||
### Применить все миграции
|
||
|
||
```bash
|
||
make migrate-up DB_URL="postgres://user:pass@host:5432/dbname?sslmode=disable"
|
||
```
|
||
|
||
### Откатить последнюю миграцию
|
||
|
||
```bash
|
||
make migrate-down DB_URL="postgres://user:pass@host:5432/dbname?sslmode=disable"
|
||
```
|
||
|
||
### Создать новую миграцию
|
||
|
||
```bash
|
||
make migrate-create name=add_new_field
|
||
```
|
||
|
||
## Структура БД
|
||
|
||
После применения миграций будут созданы следующие таблицы:
|
||
|
||
1. **users** - пользователи с зашифрованными PII полями
|
||
2. **sessions** - сессии с JWT токенами
|
||
3. **invite_codes** - инвайт-коды
|
||
4. **mailing_status** - статусы рассылки (pending, in_progress, completed, failed)
|
||
5. **requests_for_suppliers** - запросы на поставщиков
|
||
6. **suppliers** - найденные поставщики
|
||
7. **request_token_usage** - учет использования AI токенов
|
||
|
||
## Background Workers
|
||
|
||
Сервис автоматически запускает два фоновых процесса:
|
||
|
||
- **Session Cleaner** - удаление истекших сессий (каждый час)
|
||
- **Invite Cleaner** - деактивация истекших инвайт-кодов (каждые 6 часов)
|
||
|
||
## rk-boot Возможности
|
||
|
||
Благодаря rk-boot сервис автоматически поддерживает:
|
||
|
||
- **gRPC Server** - на порту 9091
|
||
- **Логирование** - структурированные логи через zap
|
||
- **Метрики** - Prometheus метрики из коробки
|
||
- **Трейсинг** - распределенная трассировка запросов
|
||
- **Health Checks** - встроенные health endpoints
|
||
- **Graceful Shutdown** - корректное завершение работы
|
||
|
||
## gRPC Сервисы
|
||
|
||
Сервер запускается на порту 9091 и предоставляет следующие сервисы:
|
||
|
||
- **AuthService** - аутентификация и регистрация (Register, Login, Refresh, Validate, Logout)
|
||
- **UserService** - управление пользователями
|
||
- **InviteService** - управление инвайт-кодами
|
||
- **RequestService** - управление запросами
|
||
- **SupplierService** - экспорт поставщиков
|
||
|
||
## Проверка работоспособности
|
||
|
||
```bash
|
||
# Проверка соединения с БД
|
||
psql -h localhost -U postgres -d b2b_search -c "SELECT 1"
|
||
|
||
# Проверка gRPC сервера (требует grpcurl)
|
||
grpcurl -plaintext localhost:9091 list
|
||
```
|
||
|
||
## Безопасность
|
||
|
||
**ВАЖНО:** Секретные ключи для совместимости с существующим workflow:
|
||
- JWT Secret: `xM8KhJVkk28cIJeBo0306O2e6Ifni6tNVlcCMxDFAEc=`
|
||
- Crypto Secret: `xM8KhJVkk28cIJeBo0306O2e6Ifni6tNVlcCMxDFAEc=`
|
||
|
||
В production окружении **обязательно смените** эти ключи!
|