feat: docker-compose для локального запуска, .env.example, инструкция в README
Some checks are pending
CI / lint-backend (push) Waiting to run
CI / lint-frontend (push) Waiting to run
CI / build-backend (push) Blocked by required conditions
CI / build-frontend (push) Blocked by required conditions

This commit is contained in:
ed0ss 2026-06-25 12:24:57 +03:00
parent 14025ae30d
commit 11d018d4f6
2 changed files with 93 additions and 33 deletions

View file

@ -6,6 +6,61 @@
--- ---
## Быстрый старт (локальный Docker)
```bash
# 1. Клонировать репозиторий
git clone https://git.itoservice.ru/dosnav/support-bot-saas.git
cd support-bot-saas
# 2. Создать backend/.env из шаблона
cp backend/.env.example backend/.env
# отредактировать backend/.env — указать OPENROUTER_API_KEY и JWT_SECRET
# 3. Запустить
docker compose up --build -d
```
После запуска веб-интерфейс доступен по адресу: **http://localhost:8080**
### Первый вход
1. Открой **http://localhost:8080** в браузере
2. Зарегистрируйся (Email + пароль, тариф free)
3. После регистрации автоматически войдёшь в систему
4. Создай коллекцию (например «OFRS»)
5. Загрузи JSON-файл с тикетами через кнопку «Выбрать JSON/CSV файл»
Формат JSON:
```json
[
{
"ticket_id": "12345",
"category": "Сбой работы",
"description": "Описание проблемы",
"client": "Имя клиента",
"messages": [
{"role": "client", "text": "У меня проблема"},
{"role": "support", "text": "Решение проблемы"}
]
}
]
```
6. После загрузки тикетов введи вопрос в поле поиска и нажми «Найти»
Система найдёт похожие тикеты, а LLM сформирует ответ на их основе.
### Остановка
```bash
docker compose down
# С данными:
docker compose down -v
```
---
## Архитектура ## Архитектура
``` ```
@ -296,6 +351,8 @@ support-bot-saas/
│ ├── 00-namespace.yaml │ ├── 00-namespace.yaml
│ ├── 01-postgres.yaml ... 06-ingress.yaml │ ├── 01-postgres.yaml ... 06-ingress.yaml
│ └── traefik/ # Traefik CRDs + Deployment │ └── traefik/ # Traefik CRDs + Deployment
├── docker-compose.yml # локальный запуск (Docker)
├── tickets*.json # тестовые данные ├── tickets*.json # тестовые данные
└── README.md ├── README.md
└── backend/.env.example # шаблон .env для бэкенда
``` ```

View file

@ -1,55 +1,58 @@
services: services:
postgres: postgres:
image: postgres:16-alpine image: postgres:16
environment: environment:
POSTGRES_DB: support_bot
POSTGRES_USER: postgres POSTGRES_USER: postgres
POSTGRES_PASSWORD: postgres POSTGRES_PASSWORD: postgres
ports: POSTGRES_DB: support_bot
- "5432:5432"
volumes: volumes:
- pgdata:/var/lib/postgresql/data - pgdata:/var/lib/postgresql/data
healthcheck:
test: ["CMD-SHELL", "pg_isready -U postgres"]
interval: 5s
timeout: 3s
retries: 10
redis: redis:
image: redis:7-alpine image: redis:7-alpine
ports: healthcheck:
- "6379:6379" test: ["CMD", "redis-cli", "ping"]
interval: 5s
timeout: 3s
retries: 10
qdrant: qdrant:
image: qdrant/qdrant:latest image: qdrant/qdrant
ports:
- "6333:6333"
- "6334:6334"
volumes: volumes:
- qdrant_data:/qdrant/storage - qdrant_storage:/qdrant/storage
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:6333/healthz"]
interval: 5s
timeout: 3s
retries: 10
backend: backend:
build: ./backend build: ./backend
ports: env_file: ./backend/.env
- "8000:8000"
env_file: .env
environment: environment:
- DATABASE_URL=postgresql+asyncpg://postgres:postgres@postgres:5432/support_bot DATABASE_URL: postgresql+asyncpg://postgres:postgres@postgres:5432/support_bot
- REDIS_URL=redis://redis:6379/0 REDIS_URL: redis://redis:6379/0
- QDRANT_URL=http://qdrant:6333 QDRANT_URL: http://qdrant:6333
depends_on: depends_on:
- postgres postgres:
- redis condition: service_healthy
- qdrant redis:
condition: service_healthy
qdrant:
condition: service_healthy
worker: frontend:
build: ./backend build: ./frontend
command: celery -A app.workers.process_file worker --loglevel=info ports:
env_file: .env - "8080:80"
environment:
- DATABASE_URL=postgresql+asyncpg://postgres:postgres@postgres:5432/support_bot
- REDIS_URL=redis://redis:6379/0
- QDRANT_URL=http://qdrant:6333
depends_on: depends_on:
- postgres - backend
- redis
- qdrant
volumes: volumes:
pgdata: pgdata:
qdrant_data: qdrant_storage: