Compare commits
2 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 8f0fb295df | |||
| 16190b3b0d |
19
MOK.crt
Normal file
19
MOK.crt
Normal file
@@ -0,0 +1,19 @@
|
|||||||
|
-----BEGIN CERTIFICATE-----
|
||||||
|
MIIDEzCCAfugAwIBAgIUeSRdboyaHjkf4gS+bJst5Zw9vGQwDQYJKoZIhvcNAQEL
|
||||||
|
BQAwGDEWMBQGA1UEAwwNTXkgTlZJRElBIE1PSzAgFw0yNTA1MDcwOTU1MjNaGA8y
|
||||||
|
MTI1MDQxMzA5NTUyM1owGDEWMBQGA1UEAwwNTXkgTlZJRElBIE1PSzCCASIwDQYJ
|
||||||
|
KoZIhvcNAQEBBQADggEPADCCAQoCggEBANHjKi57HN2R+l3vPwgo5ppm42adv82l
|
||||||
|
lEsVNYkQwsMqbj19Ixr42kkysJnvU3fUAM41VN6WbJIwY6gi1AAa8MBOa67+aOXi
|
||||||
|
LvoY3LPSbg30jfDF8YTDxOjyobXHpyA5eq5MshJiKeJsEFeWS/uMkCbuLZgzi4j8
|
||||||
|
UpJbr0uNwAPCAer32ajUGGRSaF/RIhYwoRIH666rKMDbbNnCV4EqTxMXAblBej5i
|
||||||
|
TrSxF1/n/T1KxZJn5gWcTvvFHfPpBJdiFeQd68kEBF7ia7wT8fduoJnby5LgYrSI
|
||||||
|
mrG46+cbY9HurRvBYqZWiQqQubeKgcYL57xwN2IMC/EOlbKUiNiGeH8CAwEAAaNT
|
||||||
|
MFEwHQYDVR0OBBYEFKCrW0cdxE/8/cX3Dt0EtYOyuFdYMB8GA1UdIwQYMBaAFKCr
|
||||||
|
W0cdxE/8/cX3Dt0EtYOyuFdYMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQEL
|
||||||
|
BQADggEBAJzctv8tz3TqL18+8K5I9c9vodF4XnOEJHj3jam/cPMAXahcSI0Lfg08
|
||||||
|
sibp8Wg16KeQxqWfT+z0ayyTjnK9sy/w46+y5BpVV+5+HjY25CdCI35HEshqmRp8
|
||||||
|
2KM0+t7nTIQFUnOt/FSD16s8QAgQ1gNssjOGbgRup+F52lI6p9e507TWFTIBwA7p
|
||||||
|
dZe9SCVLnmuoBrtLBiQEDq/cH8gf3M+98yFTL9NakYBVmZyZwq28qS80YD0aPNjm
|
||||||
|
4OwbYz81kyHXZYbd/cEUFwtgUGdMVZqyMLTf7YrKGS4YwIMddbbZt3NAQkAIEcLA
|
||||||
|
nU1vFA0yAgl+BvSZIglJfOlhqFnzdcs=
|
||||||
|
-----END CERTIFICATE-----
|
||||||
28
MOK.key
Normal file
28
MOK.key
Normal file
@@ -0,0 +1,28 @@
|
|||||||
|
-----BEGIN PRIVATE KEY-----
|
||||||
|
MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQDR4youexzdkfpd
|
||||||
|
7z8IKOaaZuNmnb/NpZRLFTWJEMLDKm49fSMa+NpJMrCZ71N31ADONVTelmySMGOo
|
||||||
|
ItQAGvDATmuu/mjl4i76GNyz0m4N9I3wxfGEw8To8qG1x6cgOXquTLISYinibBBX
|
||||||
|
lkv7jJAm7i2YM4uI/FKSW69LjcADwgHq99mo1BhkUmhf0SIWMKESB+uuqyjA22zZ
|
||||||
|
wleBKk8TFwG5QXo+Yk60sRdf5/09SsWSZ+YFnE77xR3z6QSXYhXkHevJBARe4mu8
|
||||||
|
E/H3bqCZ28uS4GK0iJqxuOvnG2PR7q0bwWKmVokKkLm3ioHGC+e8cDdiDAvxDpWy
|
||||||
|
lIjYhnh/AgMBAAECggEAGlDKJCPJfbpk0sxBcet25lsKHf6fYtBk5HkXSkUwtjmm
|
||||||
|
sszyztnuvIi/fb11EKwjIbesGXBw0m+Avz8Gp7C5CNOMSteZHWGblD3zxhQXOma0
|
||||||
|
OUEIRCYrlS1+uwT6Xl72k84H8agfKkV0UxcEFdkM5eStEM09rII+dB1MwENYlN/P
|
||||||
|
E/kzhhQDQlmU7lyK8WlhH2dff4xHRjvoWub9KjzRDjyQSNLg5nzUsxO3YPd/Mkxv
|
||||||
|
1il1hese+pBcrh40iPutYLGFOkwM5R8++Norxm3HnDQRNlm9UfJOIMaMpx5U5hyO
|
||||||
|
izgBQ9q02mRtcydXGgBzRG5MC3XODi82Cxi0abUaaQKBgQD2RrO4XqIt/iEELJAZ
|
||||||
|
aKAPrYnQ1K/gM8krG/ANiJ3sAavHS3wNpsv2SNl9xb2BWQHUXfmFAIpnXgVBiLkE
|
||||||
|
PGiGuFhWZCNEzrP88UobCMWs44ruZN5lwxy0EbEEqtbbfdfedxlJTsEkSx02A0MD
|
||||||
|
Hut+A+gBT8xqrOpCLXeBOzd6VQKBgQDaLKdXzV8kXgEPtbdR1MdaUUErPc8UgaG8
|
||||||
|
7xkKKJcAbg3nK7e5gJJ58mMo7Lr5s6HiowWdYuN0ugcK2xGC83C/K07C2tJhQHuR
|
||||||
|
xqvpS4P4St9igoBc2QH4yTJSqv4nLHIiDUn3A4dKG3lgYziAUxWn+NlyzL8hiAUq
|
||||||
|
Cw5m94RjgwKBgQC3ebsA+3fF3hNI4c5FL743j+khrKKO3OXdeQXhf0tv/Vq1slXs
|
||||||
|
cbx4cpOd8Qia6e3EAnMXlGyIT/KIfUyhjEOvQn2FdzsTUw+ivTyhYWqrwCXML1fE
|
||||||
|
5pRmzttbh89kXJ/LfF1ZURPxbwiHKezt0UZObqiU+ZdoTgSEYw0qOSy+tQKBgBIO
|
||||||
|
gAsURDuOTCgwsetj4NvovawGgY0A7ZHld/0PPvAaK6xmQd5odbcCCJLqhM8FvvAy
|
||||||
|
7dQIyypt+wc6+kgMPdiUjQAzfBXwcEmwV6oHRfTWvYY5psYIb9FXVYLiBAbZ9tg6
|
||||||
|
oVSARkIr4+/GRnbYaYJtZhHKQEdWKpdAMwDym1JhAoGBAO3N1Ecr7gqcbxN31tYh
|
||||||
|
pHWitfTAOim+bJKUOtYPPokUX2PR6zO6H9p32hCphVdFWr/75Jk2gZIqX/wNsb0U
|
||||||
|
IIuW10Or8NP6eA8FrNhchNYwiOIh3TARqrCVkSuwpNbq5uN4ZeA+uOQyu4hhbORu
|
||||||
|
annRruopQB2/wd+KtZmzT9U1
|
||||||
|
-----END PRIVATE KEY-----
|
||||||
154
README_CUSTOM.md
Normal file
154
README_CUSTOM.md
Normal file
@@ -0,0 +1,154 @@
|
|||||||
|
# 🦾 Open WebUI — Кастомная сборка (open-webui-custom)
|
||||||
|
|
||||||
|
> **Версия:** 0.9.1 (на базе upstream v0.8.1 + dev-коммиты)
|
||||||
|
> **Репозиторий upstream:** [github.com/open-webui/open-webui](https://github.com/open-webui/open-webui)
|
||||||
|
> **Дата сборки:** 2026-04-22
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 📋 Что это такое
|
||||||
|
|
||||||
|
Это **форк Open WebUI** с нашими кастомными настройками развёртывания. Основной проект Open WebUI — это мощный веб-интерфейс для LLM-моделей (Ollama, OpenAI-совместимые API и др.), а наша сборка добавляет конфигурацию для конкретного сервера.
|
||||||
|
|
||||||
|
Все изменения вынесены в ветку custom, ветка main синхронизирована с upstream.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 🔧 Наши изменения (ветка custom)
|
||||||
|
|
||||||
|
| Файл | Изменение |
|
||||||
|
|------|-----------|
|
||||||
|
| docker-compose.yaml | Bind mounts на /mnt/1TB/docker/, порт Ollama 11434 наружу, GPU-образ |
|
||||||
|
| docker-compose.override.yaml | 3 реплики Ollama + Nginx reverse proxy для балансировки |
|
||||||
|
| nginx.conf | Upstream-балансировщик между инстансами Ollama |
|
||||||
|
| MOK.crt/der/key | Ключи MOK для Secure Boot |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 🚀 Возможности Open WebUI v0.9.1
|
||||||
|
|
||||||
|
### 💬 Чат и коммуникации
|
||||||
|
- **Мульти-модельный чат** - одновременная работа с несколькими LLM-моделями, сравнение ответов
|
||||||
|
- **Очередь сообщений** - можно писать сообщения пока идет генерация
|
||||||
|
- **Каналы (Channels)** - групповые чаты с уведомлениями и моделями
|
||||||
|
- **Общие чаты (Shared chats)** - деление чатами и управление доступом
|
||||||
|
- **Временные чаты** - без сохранения истории
|
||||||
|
- **Ветки диалогов** - ответвление от любой точки разговора
|
||||||
|
|
||||||
|
### 🧠 RAG и база знаний
|
||||||
|
- **Knowledge Base** - загрузка документов (PDF, DOCX, CSV, TXT, MD, HTML, JSON, изображения)
|
||||||
|
- **Автоматический RAG** - модели сами решают, когда обратиться к базе знаний
|
||||||
|
- **Векторные БД** - ChromaDB, Milvus, Qdrant, OpenSearch, pgvector, Weaviate, ElasticSearch
|
||||||
|
- **Конфигурируемый чанкинг** - PDF: страницы или единый документ
|
||||||
|
|
||||||
|
### 🔧 Инструменты и интеграции (Tools and Functions)
|
||||||
|
- **Tools** - Python-функции, вызываемые моделью в чате
|
||||||
|
- **Functions** - Filter (пре-пост обработка), Pipe (пайплайны), Action (действия)
|
||||||
|
- **Pipelines API** - серверные пайплайны: rate-limiting, moderation, routing
|
||||||
|
- **MCP (Model Context Protocol)** - внешние tool-серверы с OAuth 2.1
|
||||||
|
- **OpenAPI Import** - импорт REST API как инструментов чата
|
||||||
|
- **Function Calling** - модели вызывают Python-код и API напрямую
|
||||||
|
- **Web Search** - Google, Bing, DuckDuckGo, SearxNG, Brave, Kagi, Yandex
|
||||||
|
|
||||||
|
### 🎯 Skills (Навыки) - экспериментальная функция v0.9.1
|
||||||
|
- Переиспользуемые инструкции, вызов через $ в чате
|
||||||
|
- Привязка к конкретным моделям для автоматического контекста
|
||||||
|
|
||||||
|
### 📊 Аналитика
|
||||||
|
- Dashboard - статистика использования, токены, рейтинг пользователей
|
||||||
|
- Фильтрация по группам, история фидбека по моделям
|
||||||
|
|
||||||
|
### 🛡️ Управление доступом
|
||||||
|
- **Access Grants** - права чтения/записи для групп и пользователей
|
||||||
|
- **SCIM** - интеграция с Microsoft Entra ID и Okta
|
||||||
|
- **OAuth 2.0** - Google, Microsoft, GitHub, OIDC + Token Exchange
|
||||||
|
- **LDAP** - аутентификация через Active Directory
|
||||||
|
- **Trusted Header Auth** - аутентификация через reverse proxy
|
||||||
|
- **API-ключи** - доступ к API с правами админа или пользователя
|
||||||
|
|
||||||
|
### 🗣️ Голос и аудио
|
||||||
|
- Speech-to-Text (Whisper, OpenAI API)
|
||||||
|
- Text-to-Speech (ElevenLabs, OpenAI TTS, локальные модели)
|
||||||
|
|
||||||
|
### ⚡ Производительность
|
||||||
|
- 34% быстрее аутентификация
|
||||||
|
- Sub-second Time-To-First-Token с кешированием
|
||||||
|
- Асинхронные операции (Pipeline, Web Search, Эмбеддинги)
|
||||||
|
- Batch-запросы в 4-5 раз быстрее
|
||||||
|
- Redis Sentinel для кластеризации
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 🔄 Интеграция с пайплайнами и мультиагентными системами
|
||||||
|
|
||||||
|
### Что возможно из коробки
|
||||||
|
|
||||||
|
| Возможность | Описание | Статус |
|
||||||
|
|-------------|----------|--------|
|
||||||
|
| Pipelines API | Серверные пайплайны: rate-limiting, moderation, routing | ✅ |
|
||||||
|
| Filter Functions | Пре/пост-обработка сообщений | ✅ |
|
||||||
|
| Pipe Functions | Маршрутизация запросов к разным моделям/провайдерам | ✅ |
|
||||||
|
| MCP Protocol | Внешние tool-серверы с авторизацией | ✅ |
|
||||||
|
| OpenAPI Import | Импорт REST API как инструментов | ✅ |
|
||||||
|
| Function Calling | Модели вызывают Python-код и API | ✅ |
|
||||||
|
| Skills | Переиспользуемые инструкции для моделей | ⚠️ Экспериментально |
|
||||||
|
| Event Emitters | Внешние инструменты отправляют события в чат | ✅ |
|
||||||
|
|
||||||
|
### Как интегрировать свои пайплайны
|
||||||
|
|
||||||
|
3 уровня интеграции:
|
||||||
|
|
||||||
|
1. **Functions (Python)** - встраиваются в UI, пишутся прямо в админке
|
||||||
|
2. **Pipelines** - отдельные серверы-посредники (Lua, JS, Python)
|
||||||
|
3. **MCP + OpenAPI** - подключение внешних сервисов как инструментов чата
|
||||||
|
|
||||||
|
### Интеграция с мультиагентной системой
|
||||||
|
|
||||||
|
Open WebUI = фронтенд для мультиагентной системы:
|
||||||
|
|
||||||
|
Пользователь -> Open WebUI -> Pipe Function -> Pipeline -> Агенты -> Модели
|
||||||
|
|
|
||||||
|
Event Emitters -> Чат UI
|
||||||
|
|
||||||
|
Ключевые точки:
|
||||||
|
- **Pipe Function** - перехватывает запрос и направляет в Pipeline Runner
|
||||||
|
- **MCP Server** - экспортирует агентов как инструменты (task delegation, code review)
|
||||||
|
- **Event Emitters** - агент шлёт промежуточные статусы в чат
|
||||||
|
- **Skills** - привязка инструкций к конкретной модели
|
||||||
|
- **Knowledge Base** - загрузка документации в векторную БД
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 📁 Структура деплоя
|
||||||
|
|
||||||
|
/mnt/1TB/docker/
|
||||||
|
+-- ollama/ # Данные Ollama (модели)
|
||||||
|
+-- open-webui/ # Данные Open WebUI (БД, загрузки)
|
||||||
|
|
||||||
|
/root/open-webui/
|
||||||
|
+-- docker-compose.yaml # Основной (наш)
|
||||||
|
+-- docker-compose.gpu.yaml # GPU-профиль (upstream)
|
||||||
|
+-- docker-compose.override.yaml # Наш: реплики + nginx
|
||||||
|
+-- nginx.conf # Балансировщик Ollama
|
||||||
|
+-- MOK.* # Ключи Secure Boot
|
||||||
|
+-- dump/ # SQL-дампы
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 🐛 Исправленные баги в нашей сборке
|
||||||
|
|
||||||
|
| Баг | Описание |
|
||||||
|
|-----|----------|
|
||||||
|
| No module aiosqlite | Добавлен aiosqlite в pyproject.toml |
|
||||||
|
| No module asyncpg | Добавлен asyncpg для PostgreSQL |
|
||||||
|
| no such table: calendar_event | Исправлена Alembic-миграция (версия head != реальная схема) |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## ⚠️ Важно
|
||||||
|
|
||||||
|
- Бэкапы БД перед каждым обновлением: /mnt/1TB/docker/open-webui/webui.db
|
||||||
|
- Проверяйте alembic_version перед запуском новой версии
|
||||||
|
- Ветка main - чистый upstream, не модифицировать
|
||||||
|
- Ветка custom - наши изменения, merge с main при обновлениях
|
||||||
|
|
||||||
17
docker-compose.override.yaml
Normal file
17
docker-compose.override.yaml
Normal file
@@ -0,0 +1,17 @@
|
|||||||
|
version: '3.8'
|
||||||
|
|
||||||
|
services:
|
||||||
|
ollama:
|
||||||
|
deploy:
|
||||||
|
replicas: 3 # Укажите количество экземпляров для балансировки нагрузки
|
||||||
|
ports:
|
||||||
|
- "11434" # Убедитесь, что порт не конфликтует
|
||||||
|
|
||||||
|
nginx:
|
||||||
|
image: nginx:latest
|
||||||
|
ports:
|
||||||
|
- "80:80" # Порт для доступа к Nginx
|
||||||
|
volumes:
|
||||||
|
- ./nginx.conf:/etc/nginx/nginx.conf # Ваш файл конфигурации Nginx
|
||||||
|
depends_on:
|
||||||
|
- ollama
|
||||||
@@ -1,32 +1,34 @@
|
|||||||
services:
|
services:
|
||||||
ollama:
|
ollama:
|
||||||
volumes:
|
volumes:
|
||||||
- ollama:/root/.ollama
|
- /mnt/1TB/docker/ollama:/root/.ollama # Кастомный путь для данных
|
||||||
container_name: ollama
|
container_name: ollama
|
||||||
|
ports:
|
||||||
|
- "11434:11434" # Пробрасываем порт 11434 наружу
|
||||||
pull_policy: always
|
pull_policy: always
|
||||||
tty: true
|
tty: true
|
||||||
restart: unless-stopped
|
restart: unless-stopped
|
||||||
image: ollama/ollama:${OLLAMA_DOCKER_TAG-latest}
|
image: ollama/ollama:latest
|
||||||
|
|
||||||
open-webui:
|
open-webui:
|
||||||
build:
|
build:
|
||||||
context: .
|
context: .
|
||||||
|
args:
|
||||||
|
OLLAMA_BASE_URL: '/ollama'
|
||||||
dockerfile: Dockerfile
|
dockerfile: Dockerfile
|
||||||
image: ghcr.io/open-webui/open-webui:${WEBUI_DOCKER_TAG-main}
|
image: ghcr.io/open-webui/open-webui:latest
|
||||||
container_name: open-webui
|
container_name: open-webui
|
||||||
volumes:
|
volumes:
|
||||||
- open-webui:/app/backend/data
|
- /mnt/1TB/docker/open-webui:/app/backend/data # Кастомный путь для данных
|
||||||
depends_on:
|
depends_on:
|
||||||
- ollama
|
- ollama
|
||||||
ports:
|
ports:
|
||||||
- ${OPEN_WEBUI_PORT-3000}:8080
|
- ${OPEN_WEBUI_PORT-3000}:8080
|
||||||
environment:
|
environment:
|
||||||
- 'OLLAMA_BASE_URL=http://ollama:11434'
|
- 'OLLAMA_BASE_URL=http://ollama:11434' # Внутри Docker-сети обращается к ollama по имени
|
||||||
- 'WEBUI_SECRET_KEY='
|
- 'WEBUI_SECRET_KEY='
|
||||||
extra_hosts:
|
extra_hosts:
|
||||||
- host.docker.internal:host-gateway
|
- host.docker.internal:host-gateway
|
||||||
restart: unless-stopped
|
restart: unless-stopped
|
||||||
|
|
||||||
volumes:
|
# Убраны volumes, так как используем bind mounts
|
||||||
ollama: {}
|
|
||||||
open-webui: {}
|
|
||||||
|
|||||||
22
nginx.conf
Normal file
22
nginx.conf
Normal file
@@ -0,0 +1,22 @@
|
|||||||
|
http {
|
||||||
|
upstream ai {
|
||||||
|
server 192.168.2.43:11434;
|
||||||
|
server 192.168.2.197:11434; # Добавьте дополнительные экземпляры, если необходимо
|
||||||
|
# server ollama:11434;
|
||||||
|
}
|
||||||
|
|
||||||
|
server {
|
||||||
|
listen 80;
|
||||||
|
|
||||||
|
location /ollama/ {
|
||||||
|
proxy_pass http://ai/;
|
||||||
|
proxy_set_header Host $host;
|
||||||
|
proxy_set_header X-Real-IP $remote_addr;
|
||||||
|
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
|
||||||
|
proxy_set_header X-Forwarded-Proto $scheme;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
events {
|
||||||
|
worker_connections 1024; # Adjust this as needed
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user