Open WebUI — это open-source веб-интерфейс для работы с языковыми моделями, который выглядит и работает как ChatGPT, но размещается на вашем сервере. Вы полностью контролируете данные, можете подключить любые модели — от локальных через Ollama до облачных OpenAI и Claude — и настроить систему под нужды своей команды. В этом руководстве мы развернём Open WebUI с нуля и настроим его для production-использования.
Что такое Open WebUI
Open WebUI (ранее известный как Ollama WebUI) — это self-hosted платформа для взаимодействия с LLM, которая предоставляет:
- Чат-интерфейс — знакомый UX в стиле ChatGPT
- Поддержка множества моделей — Ollama, OpenAI, Anthropic Claude, любые OpenAI-совместимые API
- RAG — загрузка документов и использование их как контекста для модели
- Управление пользователями — мультитенантная система с ролями и правами
- Промпт-библиотека — сохранение и шаринг системных промптов
- Генерация изображений — интеграция с DALL-E и Stable Diffusion
- Голосовой ввод/вывод — Speech-to-Text и Text-to-Speech
- API — полноценный API для интеграции с другими системами
Зачем нужен self-hosted ChatGPT
Есть несколько весомых причин развернуть собственный интерфейс вместо использования chat.openai.com:
- Приватность данных — ваши данные не покидают вашу инфраструктуру (при использовании локальных моделей)
- Контроль затрат — единая точка управления API-ключами и лимитами
- Кастомизация — системные промпты, RAG, кастомные модели
- Командная работа — общий доступ для команды с разделением ролей
- Экономия — одна подписка на API вместо ChatGPT Plus для каждого сотрудника
- Локальные модели — возможность работать полностью офлайн
Установка через Docker
Предварительные требования
- Docker и Docker Compose установлены на сервере
- Минимум 4 ГБ RAM (8+ ГБ рекомендуется при использовании локальных моделей)
- 10 ГБ свободного места на диске
Вариант 1: Только Open WebUI (с облачными API)
Если вы планируете использовать только облачные модели (OpenAI, Claude), установка максимально проста:
docker run -d \
--name open-webui \
-p 3000:8080 \
-v open-webui:/app/backend/data \
--restart always \
ghcr.io/open-webui/open-webui:main
Откройте http://localhost:3000 — готово. Первый зарегистрированный пользователь автоматически становится администратором.
Вариант 2: Open WebUI + Ollama (рекомендуемый)
Для полного стека с локальными моделями создайте docker-compose.yml:
version: "3.8"
services:
ollama:
image: ollama/ollama:latest
container_name: ollama
volumes:
- ollama_data:/root/.ollama
ports:
- "11434:11434"
# Для GPU (NVIDIA):
# deploy:
# resources:
# reservations:
# devices:
# - driver: nvidia
# count: all
# capabilities: [gpu]
restart: unless-stopped
open-webui:
image: ghcr.io/open-webui/open-webui:main
container_name: open-webui
ports:
- "3000:8080"
volumes:
- open-webui_data:/app/backend/data
environment:
- OLLAMA_BASE_URL=http://ollama:11434
depends_on:
- ollama
restart: unless-stopped
volumes:
ollama_data:
open-webui_data:
Запуск:
docker compose up -d
Вариант 3: С поддержкой GPU (NVIDIA)
Для ускорения inference на GPU раскомментируйте секцию deploy в конфигурации Ollama выше и убедитесь, что установлен NVIDIA Container Toolkit:
# Установка NVIDIA Container Toolkit (Ubuntu)
curl -fsSL https://nvidia.github.io/libnvidia-container/gpgkey | \
sudo gpg --dearmor -o /usr/share/keyrings/nvidia-container-toolkit-keyring.gpg
curl -s -L https://nvidia.github.io/libnvidia-container/stable/deb/nvidia-container-toolkit.list | \
sed 's#deb https://#deb [signed-by=/usr/share/keyrings/nvidia-container-toolkit-keyring.gpg] https://#g' | \
sudo tee /etc/apt/sources.list.d/nvidia-container-toolkit.list
sudo apt update
sudo apt install -y nvidia-container-toolkit
sudo systemctl restart docker
Подключение локальных моделей через Ollama
Загрузка моделей
После запуска стека загрузите модели через CLI Ollama:
# Компактная и быстрая модель для повседневных задач
docker exec ollama ollama pull llama3.2:3b
# Мощная модель для сложных задач
docker exec ollama ollama pull llama3.1:70b
# Модель для программирования
docker exec ollama ollama pull qwen2.5-coder:14b
# DeepSeek R1 для reasoning-задач
docker exec ollama ollama pull deepseek-r1:14b
# Компактная модель для русского языка
docker exec ollama ollama pull mistral:7b
Рекомендации по выбору моделей
| Задача | Рекомендуемая модель | Размер | RAM |
|---|---|---|---|
| Повседневный чат | Llama 3.2 3B | 2 ГБ | 4 ГБ |
| Рабочие задачи | Llama 3.1 8B | 4.7 ГБ | 8 ГБ |
| Программирование | Qwen 2.5 Coder 14B | 9 ГБ | 16 ГБ |
| Сложный анализ | Llama 3.1 70B | 40 ГБ | 48 ГБ |
| Математика/логика | DeepSeek R1 32B | 20 ГБ | 32 ГБ |
Создание кастомной модели
Ollama позволяет создавать модели с предустановленными системными промптами:
# Создаём Modelfile
cat > Modelfile << 'EOF'
FROM llama3.1:8b
SYSTEM """
Ты — AI-ассистент компании QZX Studio. Ты помогаешь команде с разработкой,
код-ревью и техническими вопросами. Отвечай на русском языке.
Будь конкретен и давай практические советы с примерами кода.
"""
PARAMETER temperature 0.7
PARAMETER top_p 0.9
PARAMETER num_ctx 8192
EOF
# Создаём модель
docker exec -i ollama ollama create qzx-assistant -f - < Modelfile
После этого модель qzx-assistant появится в Open WebUI.
Подключение облачных API
OpenAI (GPT-4o, o1)
- Откройте Open WebUI и войдите как администратор
- Перейдите в Admin Panel (иконка шестерёнки) -> Settings -> Connections
- В секции OpenAI API введите:
- API URL:
https://api.openai.com/v1 - API Key: ваш ключ OpenAI
- API URL:
Или через переменные окружения в docker-compose.yml:
environment:
- OPENAI_API_BASE_URL=https://api.openai.com/v1
- OPENAI_API_KEY=sk-your-key-here
Anthropic Claude
Claude подключается через OpenAI-совместимый прокси или напрямую. Самый простой способ — через LiteLLM прокси:
# Добавляем в docker-compose.yml
services:
litellm:
image: ghcr.io/berriai/litellm:main-latest
container_name: litellm
ports:
- "4000:4000"
environment:
- ANTHROPIC_API_KEY=sk-ant-your-key-here
command: >
--model anthropic/claude-3-5-sonnet-latest
--model anthropic/claude-3-haiku-20240307
restart: unless-stopped
Затем в настройках Open WebUI добавьте:
- API URL:
http://litellm:4000/v1 - API Key: любой непустой текст (LiteLLM не требует ключ при локальном доступе)
Альтернативно, Open WebUI поддерживает прямое подключение к Anthropic через раздел Connections -> Add Connection, где можно выбрать тип подключения Anthropic.
DeepSeek API
DeepSeek использует OpenAI-совместимый формат:
- API URL:
https://api.deepseek.com/v1 - API Key: ваш ключ DeepSeek
Настройка RAG (Retrieval-Augmented Generation)
RAG — одна из самых мощных функций Open WebUI. Она позволяет загружать документы и использовать их как контекст для ответов модели.
Загрузка документов
- В боковой панели нажмите Workspace -> Knowledge
- Создайте новую коллекцию (например, «Документация проекта»)
- Загрузите файлы — поддерживаются PDF, DOCX, TXT, MD, CSV и другие форматы
- Open WebUI автоматически разобьёт документы на чанки и создаст эмбеддинги
Настройка параметров RAG
В Admin Panel -> Settings -> Documents можно настроить:
Chunk Size: 1000 # Размер чанков (символы)
Chunk Overlap: 200 # Перекрытие между чанками
Top K: 5 # Количество релевантных чанков
Relevance Threshold: 0.3 # Минимальная релевантность
Рекомендации по настройке:
- Для технической документации: chunk size 500-800, overlap 100-150
- Для длинных текстов: chunk size 1000-1500, overlap 200-300
- Для FAQ/короткие документы: chunk size 300-500, overlap 50-100
Использование RAG в чате
После загрузки документов вы можете:
- Через символ # — введите
#в поле ввода и выберите коллекцию документов - Через настройки чата — нажмите «+» рядом с полем ввода и прикрепите файл напрямую
- Автоматически — настройте модель на использование конкретной коллекции по умолчанию
Выбор Embedding-модели
Для RAG нужна модель для создания эмбеддингов. Варианты:
Локальная (через Ollama):
docker exec ollama ollama pull nomic-embed-text
В настройках Open WebUI выберите nomic-embed-text как Embedding Model.
Облачная (OpenAI):
В настройках выберите text-embedding-3-small или text-embedding-3-large.
Управление пользователями
Роли и права
Open WebUI поддерживает три роли:
| Роль | Чат | Загрузка документов | Настройки | Управление пользователями |
|---|---|---|---|---|
| User | Да | Нет | Нет | Нет |
| Admin | Да | Да | Да | Да |
| Pending | Нет | Нет | Нет | Нет |
Настройка регистрации
В Admin Panel -> Settings -> General:
- Default User Role — роль по умолчанию для новых пользователей (рекомендуем
pendingдля контроля доступа) - Enable Signup — разрешить/запретить самостоятельную регистрацию
Ограничение моделей для пользователей
Администратор может ограничить, какие модели доступны обычным пользователям. Это полезно для контроля расходов:
- Admin Panel -> Settings -> Models
- Для каждой модели укажите, кому она доступна
- Дорогие модели (GPT-4o, Claude 3.5 Sonnet) можно ограничить только для определённых пользователей
Кастомизация интерфейса
Брендирование
Open WebUI позволяет настроить интерфейс под ваш бренд:
В Admin Panel -> Settings -> General:
- Name — название вашего инстанса (например, «QZX AI Assistant»)
- Description — описание для страницы входа
Системные промпты для моделей
Создайте набор промптов для разных задач:
- Перейдите в Workspace -> Prompts
- Создайте промпт, например:
Название: Code Review
Команда: /review
Промпт:
Проведи code review предоставленного кода. Обрати внимание на:
1. Потенциальные баги и edge cases
2. Производительность
3. Читаемость и соответствие best practices
4. Безопасность
Дай конкретные предложения по улучшению с примерами кода.
Теперь любой пользователь может ввести /review в чате и получить предзаполненный промпт.
Пайплайны и функции
Open WebUI поддерживает кастомные Python-функции, которые расширяют возможности моделей:
# Пример функции для автоматического перевода
class Pipeline:
def __init__(self):
self.name = "Auto Translate"
async def pipe(self, body: dict) -> dict:
# Добавляем инструкцию перевода к каждому запросу
messages = body.get("messages", [])
if messages:
last_message = messages[-1]
if last_message["role"] == "user":
last_message["content"] += (
"\n\n[Ответь на русском языке]"
)
return body
Бэкапы и обслуживание
Бэкап данных
Все данные Open WebUI хранятся в Docker volume. Для бэкапа:
# Бэкап Open WebUI
docker run --rm \
-v open-webui_data:/data \
-v $(pwd)/backups:/backup \
alpine tar czf /backup/open-webui-backup-$(date +%Y%m%d).tar.gz /data
# Бэкап моделей Ollama
docker run --rm \
-v ollama_data:/data \
-v $(pwd)/backups:/backup \
alpine tar czf /backup/ollama-backup-$(date +%Y%m%d).tar.gz /data
Обновление
# Обновление Open WebUI
docker compose pull
docker compose up -d
# Обновление конкретной модели Ollama
docker exec ollama ollama pull llama3.1:8b
Мониторинг
Полезные команды для мониторинга:
# Логи Open WebUI
docker logs -f open-webui
# Статус Ollama
docker exec ollama ollama list
# Использование ресурсов
docker stats open-webui ollama
Сравнение с ChatGPT Plus
| Критерий | Open WebUI + Ollama | ChatGPT Plus |
|---|---|---|
| Стоимость | Бесплатно + хостинг | $20/мес за пользователя |
| Приватность данных | Полная (локально) | Данные у OpenAI |
| Выбор моделей | Любые (Ollama, OpenAI, Claude) | Только GPT |
| RAG | Встроенный | Ограниченный (GPTs) |
| Кастомизация | Полная | Минимальная |
| Мультипользовательность | Да, с ролями | Индивидуальные аккаунты |
| Офлайн-работа | Да (с локальными моделями) | Нет |
| Качество GPT-4o | Через API — идентичное | Нативное |
| Настройка | Требует технических знаний | Не требует |
| Поддержка | Сообщество | Коммерческая |
Когда Open WebUI лучше
- Команда из 5+ человек — экономия на подписках окупает затраты на настройку
- Работа с конфиденциальными данными — полный контроль над данными
- Нужны разные модели — возможность переключаться между провайдерами
- Специфичные требования — RAG, кастомные промпты, интеграции
Когда ChatGPT Plus лучше
- Индивидуальное использование — проще и быстрее начать
- Нет технических ресурсов для настройки серверов
- Нужны последние фичи OpenAI сразу после релиза
- Достаточно возможностей стандартного ChatGPT
Советы по production-развёртыванию
1. Используйте reverse proxy
Разместите Open WebUI за Nginx или Caddy для HTTPS:
server {
listen 443 ssl http2;
server_name ai.yourdomain.com;
ssl_certificate /path/to/cert.pem;
ssl_certificate_key /path/to/key.pem;
location / {
proxy_pass http://localhost:3000;
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;
# WebSocket support
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
}
2. Настройте автоматические бэкапы
Добавьте cron-задачу для ежедневного бэкапа:
# crontab -e
0 3 * * * /path/to/backup-script.sh
3. Ограничьте сетевой доступ
Ollama не должен быть доступен из интернета:
# docker-compose.yml
services:
ollama:
ports: [] # Убираем внешний порт
# Ollama доступен только внутри Docker network
4. Мониторинг расходов на API
Если вы используете облачные модели, настройте лимиты расходов в панели провайдера (OpenAI, Anthropic) и отслеживайте usage через логи Open WebUI.
Заключение
Open WebUI — это зрелый и функциональный инструмент, который превращает любой сервер в полноценную AI-платформу. Установка занимает считанные минуты, а возможности кастомизации позволяют адаптировать систему под любые бизнес-потребности.
Для команды из 5-10 человек это однозначно выгоднее, чем индивидуальные подписки на ChatGPT Plus. А возможность подключить локальные модели через Ollama делает решение идеальным для компаний с жёсткими требованиями к безопасности данных.
Если вам нужна помощь с развёртыванием Open WebUI, настройкой RAG-пайплайнов или интеграцией AI в корпоративную инфраструктуру — команда QZX Studio имеет опыт внедрения self-hosted AI-решений и готова помочь.