115 lines
4.6 KiB
Markdown
115 lines
4.6 KiB
Markdown
# Развёртывание через 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`.
|