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