
В прошлом гайде мы поднимали Ollama и запускали модели прямо в терминале. Работает, но не для всех и не всегда: заходить в чёрное окно ради вопроса к модели быстро надоедает, а показать её близким или коллегам так вообще не выйдет. Open WebUI закрывает эту часть: веб-интерфейс в духе ChatGPT, который ставится на свой сервер и открывается в браузере.
Внутри не просто окно для промптов. Несколько пользователей с правами, базы знаний с поиском по документам, голосовой режим, установка на телефон как приложение. Под капотом интерфейс умеет разговаривать с Ollama и с любыми OpenAI-совместимыми API, так что вместе с локальными моделями можно держать и облачные.
Что такое Open WebUI и что он умеет
Open WebUI это self-hosted-платформа для работы с моделями через браузер. Ставится на Linux, macOS и Windows, включая ARM-платы вроде Raspberry Pi. Есть и режим работы совсем без интернета: модели, переписка и данные живут на вашем железе, а внешние интеграции в этом сценарии просто не подключают.
У репозитория на GitHub больше 155 тысяч звёзд, и релизы выходят почти каждую неделю: только с 10 по 16 октября вышли версии 0.12.0, 0.12.1, 0.12.2 и 0.12.3. В свежих выпусках появились двухфакторный вход, голосовые звонки с моделями и шифрованные чаты; всё это отдельные опции, которые включаются в настройках.
Лицензия у проекта своя: Open WebUI License, переработанная BSD 3-Clause. Кроме обычных условий BSD там есть своё про брендинг: менять или убирать название и лого нельзя установкам, где за последние тридцать дней набралось больше пятидесяти пользователей. Дома и в небольшой команде про это условие можно не думать.
Вопрос можно отправить сразу нескольким моделям и сравнить ответы. Есть каналы для командной работы, заметки с ИИ-редактором и память, которая переносит контекст из чата в чат. Для домашнего сценария важнее базовые вещи:
- несколько пользователей с ролями и правами;
- базы знаний: загружаете документы и спрашиваете по ним;
- голосовой режим с распознаванием речи и озвучкой ответов;
- генерация картинок через локальный ComfyUI или облачные движки;
- установка на телефон как обычное приложение, через PWA.
Для интеграций есть свои плагины и инструменты: внешние сервисы подключаются через OpenAPI, а из вариантов MCP напрямую поддерживается Streamable HTTP, для остальных понадобится мост вроде MCPO.
Как Open WebUI связан с Ollama и другими моделями
Своих чат-моделей у Open WebUI нет. Это интерфейс и сервер, который ходит к чужому API. Основной сценарий такой: модели крутит Ollama на той же машине, а Open WebUI показывает их в браузере. Схема удобная: модели живут в одном месте, а интерфейс можно обновлять и перезапускать отдельно от них.
Кроме Ollama, подключаются любые OpenAI-совместимые сервисы. Адрес и ключ API добавляются в настройках подключений, и их модели появляются в том же списке, что и локальные. Схема удобная для смешанной работы: часть запросов уходит на свою модель, часть на облачную, а переключаться между ними можно прямо в переписке.
Если позже появится второй сервер с GPU, он подключится туда же обычным адресом. Open WebUI не привязан к одной машине: он просто знает список адресов, к которым можно обратиться.
Установка Open WebUI в Docker
Путь для дома и для сервера один: Docker. Понадобятся сам Docker с плагином Compose, немного места под данные и хотя бы один источник моделей: локальная Ollama или внешний API. Команда запуска выглядит так:
docker run -d -p 127.0.0.1:3000:8080 --add-host=host.docker.internal:host-gateway \
-v open-webui:/app/backend/data -e WEBUI_SECRET_KEY=ваш-ключ \
--name open-webui --restart always ghcr.io/open-webui/open-webui:main
Порт 3000 это адрес на вашей машине, внутри контейнера живёт 8080; привязка к 127.0.0.1 означает, что наружу порт не смотрит. Том open-webui хранит переписку, аккаунты и настройки: без него данные исчезнут при первом же пересоздании контейнера, так что запускать без тома нельзя. Флаг --add-host нужен, чтобы контейнер видел Ollama на хост-машине, а --restart always возвращает сервис после перезагрузки.
Секретный ключ WEBUI_SECRET_KEY сгенерируйте один раз командой openssl rand -hex 32 и сохраните. Ключ подписывает сессии: без фиксированного значения каждый пересозданный контейнер будет разлогинивать всех пользователей. Убедиться, что всё поднялось, можно в логах: docker logs open-webui 2>&1 | tail -20 покажет последние строки, включая ошибки старта.
Вариантов образа несколько, и выбирать лучше осознанно:
:mainэто полный вариант: интерфейс плюс локальные модели распознавания речи и эмбеддинги для базы знаний.:slimвесит заметно меньше, примерно 196 МБ против 1,62 ГБ. Годится, если вы ходите только к внешним или отдельно стоящим моделям: локального стека внутри нет.:cudaдобавляет CUDA-сборку для внутренних моделей интерфейса (распознавание речи, эмбеддинги), запускается с флагом--gpus all; на Ollama и другие внешние модели это не влияет.:ollamaтащит Ollama внутрь того же контейнера: подходит для совсем компактной установки, только не забудьте отдельный том под модели.
:slim не сочетается с :cuda и :ollama, а для баз знаний на нём понадобится внешний движок эмбеддингов, иначе поиск по документам просто не заработает. Тег :main не закреплён за версией: он всегда указывает на свежую сборку из основной ветки. На сервере тег лучше зафиксировать сразу: замените :main на :v0.12.3, и новая версия приедет только тогда, когда вы сами её выберете.
На Windows всё то же самое через Docker Desktop или WSL2. А если контейнеры не хочется трогать вообще, есть десктопное приложение: оно умеет и поднимать интерфейс локально без Docker, и подключаться к уже работающему серверу. Для постоянной серверной инсталляции всё равно берут контейнеры.
Для сервера удобнее Docker Compose: конфигурация под рукой, обновление одной командой, а версия в примере закреплена явно.
services:
open-webui:
image: ghcr.io/open-webui/open-webui:v0.12.3
ports:
- "127.0.0.1:3000:8080"
volumes:
- open-webui:/app/backend/data
extra_hosts:
- host.docker.internal:host-gateway
environment:
- WEBUI_SECRET_KEY=ваш-ключ
restart: unless-stopped
volumes:
open-webui:
Первый вход и подключение моделей
Откройте http://адрес-машины:3000. Первый зарегистрированный аккаунт становится администратором, он же получает доступ ко всем настройкам. Заведите его до открытия внешнего доступа, иначе администратором может стать случайный человек. Дальше регистрацию новых пользователей можно закрыть в админке и заводить людей вручную.
Связка с Ollama на том же хосте настраивается сама через host.docker.internal:11434, но на Linux есть оговорка: по умолчанию Ollama слушает только 127.0.0.1 своей машины, и из контейнера к ней не постучаться. Лечится одной настройкой службы: sudo systemctl edit ollama, в секцию [Service] добавить строку Environment="OLLAMA_HOST=0.0.0.0:11434", затем перезапустить службу. Порт заодно закройте файрволом, чтобы наружу 11434 не смотрел.
На машинах без Ollama интерфейс тоже рабочий: добавьте в настройках подключение к любому OpenAI-совместимому API, и его модели появятся в общем списке. Если провайдер не отдаёт список моделей, их идентификаторы вписываются вручную.
Модели из библиотеки Ollama скачиваются прямо из интерфейса: выбираете имя, интерфейс передаёт запрос, прогресс загрузки виден тут же. Заходить в терминал за этим больше не нужно.
Переписка живёт в боковой панели с поиском, ответы рендерятся в Markdown с таблицами и формулами, каждую переписку можно выгрузить или расшарить ссылкой, выбрав уровень доступа. Именно из-за таких мелочей в терминал возвращаться не хочется.
Домен и HTTPS
Открывать интерфейс по адресу вида http://192.168.1.50:3000 можно, но неудобно: ни нормального имени, ни сертификата, ни работы с телефона вне дома. Правильный путь это домен и HTTPS, раздавать его удобно через Nginx Proxy Manager.
У нас есть отдельный гайд по Nginx Proxy Manager: поднять панель, выпустить сертификат Let’s Encrypt и направить домен на порт 3000 занимает минут десять. Панель поставите рядом с Open WebUI на том же сервере, порт контейнера откройте только ей, а наружу оставьте 80 и 443.
Причин перейти на HTTPS несколько, и дело не только в замочке в адресной строке. Микрофон и камера в браузере работают только на защищённом соединении, установка приложения на телефон по http не предложится, а потоковые ответы нужно отдавать без буферизации, иначе текст будет появляться рывками. Ещё понадобятся websockets: на них держатся звонки и живые функции каналов. И задайте интерфейсу публичный адрес через WEBUI_URL (переменную окружения или настройку в админке): иначе входы через сторонние сервисы и часть внутренних ссылок будут вести на localhost.
Одна оговорка для домашних серверов: домен и сертификат сами не откроют сервер наружу. Для доступа извне понадобится публичный адрес или туннель и проброс портов. На арендованном сервере этого не нужно.
Пользователи, роли и права
Open WebUI задуман как многопользовательский сервис: у каждого свой аккаунт, своя история и свои настройки. Администратор может объединять пользователей в группы и выдавать права точечно: кому-то только чат, кому-то модели, кому-то управление. Регистрацию отключают одним тумблером, когда круг пользователей определился.
Если интерфейсом пользуется команда, посмотрите на свежие возможности: двухфакторный вход и шифрованные переписки в приватных каналах (по умолчанию выключены и включаются в настройках).
А для совсем одиночного использования есть режим без логинов вообще: переменная WEBUI_AUTH=false открывает интерфейс сразу, без экрана входа. Годится только внутри доверенной сети, выставлять такое в интернет не стоит.
Мощные VPS для ваших Docker-контейнеров
Идеально подходит для Nginx Proxy Manager, Portainer и Nextcloud. Высокая производительность (NVMe), защита от DDoS и скидка 5% по промокоду.
Базы знаний и работа с документами
Сильная часть Open WebUI это RAG, поиск по вашим документам. Загружаете PDF, файлы Word, тексты в базу знаний, и модель отвечает уже по ним. В чате документ подключается точечно: наберите #, и подсказка покажет ваши файлы, коллекции знаний и кнопку загрузки. Там же отдельным пунктом вставка ссылки на веб-страницу.
Одно условие для надёжного поиска: модель должна уметь вызывать инструменты, а базу знаний прикрепляют к чату или к модели в настройках. И после первой загрузки проверьте, какой текст интерфейс вытащил из документа.
По умолчанию поиск работает на встроенной ChromaDB с локальными эмбеддингами, а для крупных инсталляций подключаются Qdrant, pgvector, Milvus и другие хранилища. Если образ у вас :slim, эмбеддинги придётся подключить внешним движком: без него индексация не заведётся. Если обычного поиска не хватает, включается гибридный режим с ключевыми словами и переранжированием результатов.
Есть и поиск в интернете: подключаются SearXNG, Brave, Exa и ещё десятки провайдеров, а ответ приходит со ссылками на источники. Кому важна приватность, ставят свой SearXNG: тогда поиск идёт через ваш сервер, а не из браузера напрямую.
Обновление и бэкап
Данные лежат в томе open-webui: контейнер можно удалять и пересоздавать без потерь, поэтому обновление это замена образа. С Compose всё выглядит так:
docker compose pull
docker compose up -d
Обновляться вслепую каждый раз не стоит: перед pull загляните в заметки о релизе и проверьте, нет ли миграций.
Перед обновлением делайте бэкап. База внутри работает в режиме WAL, поэтому сначала остановите контейнер (docker compose stop open-webui), иначе копия может получиться битой:
docker run --rm -v open-webui:/data -v $(pwd):/backup \
alpine tar czf /backup/openwebui-$(date +%Y%m%d).tar.gz /data
Сам WEBUI_SECRET_KEY храните рядом с бэкапом: без него после восстановления слетят все сессии.
И одна грабля, о которой узнают только когда припечёт: миграции базы данных могут быть односторонними. Если новая версия поменяла схему, подмена образа на старый не гарантирует, что всё поднимется; надёжный путь назад один: бэкап. Поэтому обновление на сервере выглядит так: бэкап, чтение заметок о релизе, потом уже pull. Автоматические обновления через инструменты вроде Watchtower я бы на рабочей инсталляции не включал: один несовместимый релиз, и разбираться с этим придётся на выходных. Безопасный компромисс это утилиты вроде Diun: они только уведомляют о новой версии, а решение обновляться остаётся за вами.
Open WebUI на своём сервере
Всё то же самое работает и на домашнем компьютере, но главный сценарий у Open WebUI серверный: интерфейс и модели крутятся круглосуточно, а зайти можно с ноутбука, с телефона, из другого города. Дома под это годится мини-ПК или простаивающая машина, а если держать железо не хочется, связка спокойно живёт в облаке.
По железу ориентируйтесь на модели, а не на интерфейс. Самому Open WebUI много ресурсов не нужно, всё решает запас памяти под модели: до 8B хватает скромной конфигурации, а модели от 14B на CPU тоже работают, но интерактивной скорости на них уже не будет, так что на практике под них берут GPU. Ориентиры по памяти мы раскладывали в гайде по Ollama, а про аренду видеокарт есть отдельный разбор.
Если своего железа нет, подойдёт обычный облачный сервер: интерфейсу с парой лёгких моделей хватит и скромной конфигурации. У Selectel есть и такие облачные машины, и отдельная линейка серверов с GPU, если захочется моделей побольше.
Итог
Open WebUI превращает локальные модели в нормальный сервис: браузер вместо терминала, аккаунты для семьи или команды, базы знаний и доступ со всех устройств. Ставится он одной Docker-командой, а в связке с Ollama закрывает локальный сценарий целиком.
Дальше инсталляция расширяется под задачи: подключить внешние API, добавить документы в базы знаний, подцепить инструменты через MCP. Всё это прирастает к текущей установке, без переездов.
Если модели у вас уже работают под Ollama, считайте, полдела сделано: осталась одна команда и домен.
Источники:
- Документация Open WebUI: docs.openwebui.com
- Быстрый старт и варианты образов: docs.openwebui.com/getting-started/quick-start
- Репозиторий проекта: github.com/open-webui/open-webui