# Развёртывание через Docker

## Требования

- Docker Engine 24+
- Docker Compose v2+
- Git

## Состав

Сервис состоит из 5 компонентов:

| Компонент   | Образ                              | Назначение           |
|-------------|------------------------------------|----------------------|
| postgres    | `postgres:16`                      | База данных          |
| redis       | `redis:7-alpine`                   | Кэш / Celery broker  |
| qdrant      | `qdrant/qdrant`                    | Векторная БД         |
| backend     | сборка из `./backend`              | FastAPI приложение   |
| frontend    | сборка из `./frontend`             | React SPA (nginx)    |

Опционально — мониторинг (Prometheus + Grafana) из `docker-compose.monitoring.yml`.

## 1. Клонирование и настройка

```bash
git clone <repo-url> support-bot-saas
cd support-bot-saas
```

Создайте файл `.env` в корне проекта:

```ini
OPENROUTER_API_KEY=sk-or-v1-...
OPENROUTER_EMBEDDING_MODEL=nvidia/llama-nemotron-embed-vl-1b-v2:free
OPENROUTER_LLM_MODEL=openai/gpt-oss-120b:free
JWT_SECRET=<случайная строка 32+ символов>

# Опционально: HTTP-прокси для OpenRouter
PROXY_URL=192.168.1.1:3128
PROXY_LOGIN=
PROXY_PASS=

# Эти переменные переопределяются в docker-compose.yml для работы по container name:
# DATABASE_URL, REDIS_URL, QDRANT_URL — можно не указывать
```

## 2. Запуск

```bash
docker compose up -d
```

Проверка:

```bash
docker compose ps
curl http://localhost:8080/api/health
# {"status":"ok"}
```

Фронтенд будет доступен на `http://localhost:8080`.

## 3. Мониторинг (опционально)

```bash
docker compose -f docker-compose.monitoring.yml up -d
```

- Prometheus: `http://localhost:9090`
- Grafana: `http://localhost:3001` (admin / admin)

## 4. Остановка

```bash
docker compose down
# С удалением томов БД:
docker compose down -v
```

## 5. Переменные окружения

| Переменная                    | По умолчанию                                       | Обязательная |
|-------------------------------|---------------------------------------------------|--------------|
| `OPENROUTER_API_KEY`          | `""`                                              | Да           |
| `OPENROUTER_EMBEDDING_MODEL`  | `nvidia/llama-nemotron-embed-vl-1b-v2:free`      | Нет          |
| `OPENROUTER_LLM_MODEL`        | `openrouter/owl-alpha`                            | Нет          |
| `JWT_SECRET`                  | `change-me-in-production`                         | Да (в проде) |
| `DATABASE_URL`                | `postgresql+asyncpg://postgres:postgres@localhost:5432/support_bot` | Нет (переопределяется в compose) |
| `REDIS_URL`                   | `redis://localhost:6379/0`                        | Нет (переопределяется в compose) |
| `QDRANT_URL`                  | `http://localhost:6333`                           | Нет (переопределяется в compose) |
| `PROXY_URL`                   | `""`                                              | Нет          |
| `PROXY_LOGIN`                 | `""`                                              | Нет          |
| `PROXY_PASS`                  | `""`                                              | Нет          |
| `JWT_EXPIRE_MINUTES`          | `1440`                                            | Нет          |

## 6. Сборка образов вручную

```bash
# Бэкенд
docker build -t support-bot-backend ./backend

# Фронтенд
docker build -t support-bot-frontend ./frontend
```

После сборки замените `build: ./backend` и `build: ./frontend` в `docker-compose.yml` на `image: support-bot-backend` и `image: support-bot-frontend`, либо удалите `build` секции и пересоберите compose.

## 7. Тома (volumes)

| Том             | Назначение           | Размер по умолчанию |
|-----------------|----------------------|---------------------|
| `pgdata`        | Данные PostgreSQL    | без ограничения     |
| `qdrant_storage`| Данные Qdrant        | без ограничения     |

Тома создаются автоматически в `docker compose up`.
