Add project and deployment instruction (docs/DEPLOYMENT.md)
Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
294
README.md
Normal file
294
README.md
Normal file
@@ -0,0 +1,294 @@
|
||||
# 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.
|
||||
Reference in New Issue
Block a user