12 KiB
12 KiB
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. Клонирование и настройка
cd /home/its/iiEasyWeb
cp .env.example .env
# Отредактируйте .env и заполните все необходимые переменные
2. Генерация API ключей
# Генерация QDRANT_API_KEY
openssl rand -hex 32
# Добавьте результат в .env
3. Запуск инфраструктуры
# Запуск всех сервисов
docker-compose up -d
# Проверка статуса
docker-compose ps
# Просмотр логов
docker-compose logs -f
4. Загрузка модели Ollama
# Загрузка модели Gemma 3
docker exec ollama ollama pull gemma3n:e4b-it-fp16
# Проверка загруженных моделей
docker exec ollama ollama list
5. Настройка Authentik
- Войдите в Authentik (https://auth.iieasy.ru)
- Создайте OIDC Provider:
- Redirect URI:
https://odo.iieasy.ru/oauth/oidc/callback - Client ID и Client Secret скопируйте в
.env
- Redirect URI:
- Обновите
OPENID_CONNECT_ISSUERв.env
6. Ребрендинг Open WebUI
После первого запуска Open WebUI выполните:
./scripts/rebrand.sh
Скрипт заменит:
- Логотипы и favicon
- Текстовые упоминания "Open WebUI" → "iiEasyWeb"
- Отключит проверку обновлений
- Удалит аналитику и телеметрию
7. Настройка API ключа Open WebUI
- Откройте https://odo.iieasy.ru
- Войдите через Authentik SSO
- Перейдите в Settings → Account → API Keys
- Создайте новый API ключ
- Добавьте ключ в
.envкакOPENWEBUI_API_KEY
8. Запуск воркера синхронизации Nextcloud
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:
# Создайте /etc/systemd/system/iieasy-sync.service
sudo nano /etc/systemd/system/iieasy-sync.service
[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
sudo systemctl daemon-reload
sudo systemctl enable iieasy-sync
sudo systemctl start iieasy-sync
Переменные окружения
Основной .env
См. .env.example для полного списка переменных. Основные:
DOMAIN_OPENWEBUI- URL Open WebUIDOMAIN_NEXTCLOUD- URL NextcloudDOMAIN_AUTHENTIK- URL AuthentikOAUTH_CLIENT_ID- Client ID из AuthentikOAUTH_CLIENT_SECRET- Client Secret из AuthentikOPENID_CONNECT_ISSUER- Issuer URL AuthentikQDRANT_API_KEY- API ключ Qdrant (сгенерировать)OPENWEBUI_API_KEY- API ключ Open WebUI (создать после первого запуска)
worker/.env
NC_USER- Пользователь NextcloudNC_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
- Проверьте, что Qdrant запущен:
docker-compose ps qdrant - Проверьте логи:
docker-compose logs qdrant - Убедитесь, что
QDRANT_API_KEYустановлен в.env - Проверьте переменную
QDRANT_URI=http://qdrant:6333
Ошибки аутентификации через Authentik
- Проверьте redirect URI в Authentik:
https://odo.iieasy.ru/oauth/oidc/callback - Убедитесь, что
OPENID_CONNECT_ISSUERправильный - Проверьте логи Open WebUI:
docker-compose logs open-webui
Воркер не синхронизирует файлы
- Проверьте логи:
tail -f worker/sync.log - Убедитесь, что
OPENWEBUI_API_KEYправильный - Проверьте доступность Nextcloud:
curl https://next.iieasy.ru - Проверьте права доступа к путям в
NC_SCAN_PATHS
Ollama не использует GPU
- Проверьте драйверы NVIDIA:
nvidia-smi - Установите nvidia-container-toolkit
- Перезапустите Docker:
sudo systemctl restart docker - Проверьте переменную
NVIDIA_VISIBLE_DEVICESв.env
Лицензия
Внутренний проект iiEasy Research Center.
Поддержка
Для вопросов и проблем обращайтесь к команде разработки iiEasy.