Files
smart-search-back/DEPLOYMENT.md
vallyenfail 80e5f318a9
All checks were successful
Deploy Smart Search Backend Test / deploy (push) Successful in 1m24s
add service
2026-01-18 01:48:46 +03:00

154 lines
5.2 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Инструкция по развертыванию
## Архитектура
Сервис построен на:
- **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 окружении **обязательно смените** эти ключи!