Compare commits

2 Commits
main ... custom

Author SHA1 Message Date
NW
8f0fb295df docs-russian-readme-custom-build 2026-04-22 22:02:03 +01:00
NW
16190b3b0d feat-custom-deployment-config 2026-04-22 21:50:07 +01:00
7 changed files with 250 additions and 8 deletions

19
MOK.crt Normal file
View 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-----

BIN
MOK.der Normal file

Binary file not shown.

28
MOK.key Normal file
View 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
View 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 при обновлениях

View 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

View File

@@ -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
View 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
}