Files
iiEsaywebUI/README.md

295 lines
12 KiB
Markdown
Raw Permalink Normal View History

# iiEasy AI-платформа
Корпоративная AI-платформа на базе Open WebUI с интеграцией Ollama, Qdrant, SearXNG и синхронизацией Nextcloud.
## Архитектура
```
┌─────────────────────────────────────────────────────────────┐
│ Reverse Proxy (Nginx) │
│ *.iieasy.ru (odo.iieasy.ru) │
└─────────────────────────────────────────────────────────────┘
┌───────────────────┼───────────────────┐
│ │ │
┌───────▼────────┐ ┌───────▼────────┐ ┌───────▼────────┐
│ Open WebUI │ │ Authentik │ │ Nextcloud │
│ odo.iieasy.ru │ │ auth.iieasy.ru │ │next.iieasy.ru │
└───────┬────────┘ └─────────────────┘ └───────┬────────┘
│ │
│ ┌──────────────────────────────────────┘
│ │
▼ ▼
┌─────────────────────────────────────────────────────────────┐
│ Docker Network (iieasy-ai) │
│ │
│ ┌──────────┐ ┌──────────┐ ┌──────────┐ │
│ │ Ollama │ │ Qdrant │ │ SearXNG │ │
│ │ (GPU) │ │ (Vector) │ │ (Search) │ │
│ └──────────┘ └──────────┘ └──────────┘ │
└─────────────────────────────────────────────────────────────┘
┌───────────────┐
│ Python Worker │
│ (Nextcloud → │
│ Qdrant Sync) │
└───────────────┘
```
## Компоненты
- **Open WebUI** - Веб-интерфейс для работы с AI моделями
- **Ollama** - Локальный запуск LLM моделей (Gemma 3)
- **Qdrant** - Векторная база данных для RAG
- **SearXNG** - Метапоисковая система для веб-поиска
- **Authentik** - Централизованный SSO (OIDC)
- **Nextcloud Sync Worker** - Автоматическая синхронизация документов из Nextcloud
## Быстрый старт
### Предварительные требования
- Docker и Docker Compose
- NVIDIA GPU с драйверами (для Ollama)
- Reverse proxy (Nginx) настроенный для доменов *.iieasy.ru
- Authentik настроенный и доступный на auth.iieasy.ru
### 1. Клонирование и настройка
```bash
cd /home/its/iiEasyWeb
cp .env.example .env
# Отредактируйте .env и заполните все необходимые переменные
```
### 2. Генерация API ключей
```bash
# Генерация QDRANT_API_KEY
openssl rand -hex 32
# Добавьте результат в .env
```
### 3. Запуск инфраструктуры
```bash
# Запуск всех сервисов
docker-compose up -d
# Проверка статуса
docker-compose ps
# Просмотр логов
docker-compose logs -f
```
### 4. Загрузка модели Ollama
```bash
# Загрузка модели Gemma 3
docker exec ollama ollama pull gemma3n:e4b-it-fp16
# Проверка загруженных моделей
docker exec ollama ollama list
```
### 5. Настройка Authentik
1. Войдите в Authentik (https://auth.iieasy.ru)
2. Создайте OIDC Provider:
- Redirect URI: `https://odo.iieasy.ru/oauth/oidc/callback`
- Client ID и Client Secret скопируйте в `.env`
3. Обновите `OPENID_CONNECT_ISSUER` в `.env`
### 6. Ребрендинг Open WebUI
После первого запуска Open WebUI выполните:
```bash
./scripts/rebrand.sh
```
Скрипт заменит:
- Логотипы и favicon
- Текстовые упоминания "Open WebUI" → "iiEasyWeb"
- Отключит проверку обновлений
- Удалит аналитику и телеметрию
### 7. Настройка API ключа Open WebUI
1. Откройте https://odo.iieasy.ru
2. Войдите через Authentik SSO
3. Перейдите в Settings → Account → API Keys
4. Создайте новый API ключ
5. Добавьте ключ в `.env` как `OPENWEBUI_API_KEY`
### 8. Запуск воркера синхронизации Nextcloud
```bash
cd worker
# Установка зависимостей
pip install -r requirements.txt
# Настройка переменных окружения
cp .env.example .env
# Отредактируйте .env
# Запуск однократной синхронизации
python nextcloud_sync.py --once
# Или запуск в режиме daemon
python nextcloud_sync.py --daemon
```
Для production рекомендуется использовать systemd:
```bash
# Создайте /etc/systemd/system/iieasy-sync.service
sudo nano /etc/systemd/system/iieasy-sync.service
```
```ini
[Unit]
Description=iiEasy Nextcloud Sync Worker
After=network.target
[Service]
Type=simple
User=its
WorkingDirectory=/home/its/iiEasyWeb/worker
ExecStart=/usr/bin/python3 /home/its/iiEasyWeb/worker/nextcloud_sync.py --daemon
Restart=always
RestartSec=10
[Install]
WantedBy=multi-user.target
```
```bash
sudo systemctl daemon-reload
sudo systemctl enable iieasy-sync
sudo systemctl start iieasy-sync
```
## Переменные окружения
### Основной .env
См. `.env.example` для полного списка переменных. Основные:
- `DOMAIN_OPENWEBUI` - URL Open WebUI
- `DOMAIN_NEXTCLOUD` - URL Nextcloud
- `DOMAIN_AUTHENTIK` - URL Authentik
- `OAUTH_CLIENT_ID` - Client ID из Authentik
- `OAUTH_CLIENT_SECRET` - Client Secret из Authentik
- `OPENID_CONNECT_ISSUER` - Issuer URL Authentik
- `QDRANT_API_KEY` - API ключ Qdrant (сгенерировать)
- `OPENWEBUI_API_KEY` - API ключ Open WebUI (создать после первого запуска)
### worker/.env
- `NC_USER` - Пользователь Nextcloud
- `NC_APP_PASSWORD` - App Password (не основной пароль!)
- `NC_SCAN_PATHS` - Пути для сканирования
- `OPENWEBUI_API_KEY` - API ключ Open WebUI
## Структура проекта
```
iiEasyWeb/
├── docker-compose.yml # Основной compose файл
├── .env # Переменные окружения
├── .env.example # Шаблон переменных
├── .gitignore # Игнорируемые файлы
├── scripts/
│ └── rebrand_safe_final.sh # ✅ Рекомендуемый скрипт ребрендинга (безопасный)
│ ├── rebrand.sh # ⚠️ Старый скрипт (может ломать OAuth)
│ └── rebrand_fast.sh # ⚠️ Быстрый скрипт (может ломать функциональность)
├── media/
│ ├── logo-light.svg # Логотип светлая тема
│ ├── logo-dark.svg # Логотип темная тема
│ └── favicon.svg # Favicon
├── worker/
│ ├── nextcloud_sync.py # Главный скрипт воркера
│ ├── config.py # Конфигурация
│ ├── nextcloud_client.py # WebDAV клиент
│ ├── openwebui_client.py # Open WebUI API клиент
│ ├── document_processor.py # Обработка документов
│ ├── requirements.txt # Python зависимости
│ └── .env.example # Шаблон для воркера
└── README.md # Эта документация
```
## Сетевая архитектура
Все сервисы работают в Docker сети `iieasy-ai` и доступны только внутри сети, кроме Open WebUI, который доступен через reverse proxy.
### Порты
- **Open WebUI**: 3001 (внутренний) → Nginx → 443 (HTTPS)
- **Qdrant**: 6333 (gRPC), 6334 (HTTP) - только внутри сети
- **SearXNG**: 8080 - только внутри сети
- **Ollama**: 11434 - только внутри сети
### Безопасность
- Все сервисы изолированы в Docker сети
- Доступ к Qdrant только через API ключ
- Open WebUI использует Authentik SSO для аутентификации
- Воркер использует App Password для Nextcloud (не основной пароль)
- CrowdSec и OPNsense фильтруют трафик на уровне reverse proxy
## Поддерживаемые форматы файлов
Воркер синхронизации поддерживает:
- **PDF** (.pdf) - извлечение текста через pypdf
- **DOCX** (.docx, .doc) - извлечение текста через python-docx
- **Текстовые** (.txt, .md, .markdown) - прямое чтение
- **CSV** (.csv) - конвертация в текстовый формат
Файлы больше 100MB обрабатываются потоково с ограничением количества страниц.
## Устранение неполадок
### Open WebUI не подключается к Qdrant
1. Проверьте, что Qdrant запущен: `docker-compose ps qdrant`
2. Проверьте логи: `docker-compose logs qdrant`
3. Убедитесь, что `QDRANT_API_KEY` установлен в `.env`
4. Проверьте переменную `QDRANT_URI=http://qdrant:6333`
### Ошибки аутентификации через Authentik
1. Проверьте redirect URI в Authentik: `https://odo.iieasy.ru/oauth/oidc/callback`
2. Убедитесь, что `OPENID_CONNECT_ISSUER` правильный
3. Проверьте логи Open WebUI: `docker-compose logs open-webui`
### Воркер не синхронизирует файлы
1. Проверьте логи: `tail -f worker/sync.log`
2. Убедитесь, что `OPENWEBUI_API_KEY` правильный
3. Проверьте доступность Nextcloud: `curl https://next.iieasy.ru`
4. Проверьте права доступа к путям в `NC_SCAN_PATHS`
### Ollama не использует GPU
1. Проверьте драйверы NVIDIA: `nvidia-smi`
2. Установите nvidia-container-toolkit
3. Перезапустите Docker: `sudo systemctl restart docker`
4. Проверьте переменную `NVIDIA_VISIBLE_DEVICES` в `.env`
## Лицензия
Внутренний проект iiEasy Research Center.
## Поддержка
Для вопросов и проблем обращайтесь к команде разработки iiEasy.