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:
|
||||
ollama:
|
||||
volumes:
|
||||
- ollama:/root/.ollama
|
||||
- /mnt/1TB/docker/ollama:/root/.ollama # Кастомный путь для данных
|
||||
container_name: ollama
|
||||
ports:
|
||||
- "11434:11434" # Пробрасываем порт 11434 наружу
|
||||
pull_policy: always
|
||||
tty: true
|
||||
restart: unless-stopped
|
||||
image: ollama/ollama:${OLLAMA_DOCKER_TAG-latest}
|
||||
image: ollama/ollama:latest
|
||||
|
||||
open-webui:
|
||||
build:
|
||||
context: .
|
||||
args:
|
||||
OLLAMA_BASE_URL: '/ollama'
|
||||
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
|
||||
volumes:
|
||||
- open-webui:/app/backend/data
|
||||
- /mnt/1TB/docker/open-webui:/app/backend/data # Кастомный путь для данных
|
||||
depends_on:
|
||||
- ollama
|
||||
ports:
|
||||
- ${OPEN_WEBUI_PORT-3000}:8080
|
||||
environment:
|
||||
- 'OLLAMA_BASE_URL=http://ollama:11434'
|
||||
- 'OLLAMA_BASE_URL=http://ollama:11434' # Внутри Docker-сети обращается к ollama по имени
|
||||
- 'WEBUI_SECRET_KEY='
|
||||
extra_hosts:
|
||||
- host.docker.internal:host-gateway
|
||||
restart: unless-stopped
|
||||
|
||||
volumes:
|
||||
ollama: {}
|
||||
open-webui: {}
|
||||
# Убраны volumes, так как используем bind mounts
|
||||
|
||||
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