Open WebUI: свой локальный ChatGPT на Linux с Ollama и Docker
Open WebUI превращает Ollama в локальный ChatGPT: один контейнер Docker, адрес localhost:3000 в браузере, чаты и документы остаются на вашем компьютере. Главное при установке - правильно связать контейнер с Ollama на хосте, сразу создать аккаунт администратора и закрыть регистрацию.

Содержание
Из чего состоит локальный ChatGPT
Связка состоит из двух частей. Ollama загружает модель в память и отвечает на запросы по API на порту 11434. Open WebUI - веб-интерфейс в стиле ChatGPT: история чатов, пользователи, загрузка документов, поиск по базе знаний, голосовой ввод. Интерфейс работает в Docker-контейнере, внутри слушает порт 8080, а наружу его обычно пробрасывают на 3000. Все чаты, настройки и загруженные файлы хранятся в томе Docker open-webui.
Проект развивается быстро: на 16 октября 2026 года последний релиз - 0.12.3. Лицензия с версии 0.6.6 своя (на основе BSD-3 с условием о сохранении бренда для крупных инсталляций), для домашнего использования это ничего не меняет.
Open WebUI не обязан работать именно с Ollama. В настройках подключений добавляется любой сервер с API в формате OpenAI: LM Studio, llama-server из llama.cpp, vLLM или облачный провайдер. Ollama просто самый простой вариант для старта.
Что должно стоять до запуска
Нужны Docker и Ollama. Если Docker ещё нет, поставьте его по инструкции об установке Docker вместе с плагином compose. Ollama ставится официальным скриптом, а работа с моделями подробно разобрана в статье про Ollama. Проверьте, что всё отвечает:
docker --version
ollama --version
ollama pull qwen3:8b
ollama list
curl http://127.0.0.1:11434/api/tagsПоследняя команда должна вернуть JSON со списком моделей. Видеокарта не обязательна, но с ней ответы приходят в разы быстрее. Для NVIDIA в контейнерах дополнительно понадобится nvidia-container-toolkit.
Запуск Open WebUI одной командой
Сначала сгенерируйте секретный ключ: им подписываются сессии, и если он меняется при каждом пересоздании контейнера, всех пользователей выкидывает из системы.
openssl rand -hex 32Вариант, когда Ollama уже стоит на хосте как служба:
docker run -d -p 3000:8080 \
--add-host=host.docker.internal:host-gateway \
-e OLLAMA_BASE_URL=http://host.docker.internal:11434 \
-e WEBUI_SECRET_KEY=ваш_ключ \
-v open-webui:/app/backend/data \
--name open-webui --restart always \
ghcr.io/open-webui/open-webui:mainОткройте http://localhost:3000. Первый запуск занимает минуту-две: контейнер скачивает модель эмбеддингов для работы с документами.
Контейнер не видит Ollama
Самая частая проблема. Ollama по умолчанию слушает только 127.0.0.1, а запросы из контейнера приходят с адреса моста Docker. Решений два. Первое - разрешить Ollama слушать все интерфейсы:
sudo systemctl edit ollama.service
# в открывшемся редакторе добавьте:
[Service]
Environment="OLLAMA_HOST=0.0.0.0:11434"
# затем
sudo systemctl daemon-reload
sudo systemctl restart ollamaПосле этого закройте порт 11434 фаерволом для внешней сети, иначе модель станет доступна всем в локалке. Второе решение - запустить контейнер в сети хоста. Тогда интерфейс будет на порту 8080, а не 3000:
docker run -d --network=host \
-e OLLAMA_BASE_URL=http://127.0.0.1:11434 \
-e WEBUI_SECRET_KEY=ваш_ключ \
-v open-webui:/app/backend/data \
--name open-webui --restart always \
ghcr.io/open-webui/open-webui:mainКакой образ выбрать
| Вариант | Образ или команда | Когда подходит |
|---|---|---|
| Ollama на хосте | open-webui:main | Ollama уже стоит и нужна другим программам |
| Всё в одном контейнере | open-webui:ollama с --gpus=all | чистая машина, хочется одну команду |
| Эмбеддинги и Whisper на GPU | open-webui:cuda | много документов и голосового ввода, есть NVIDIA |
| Без Docker | pip install open-webui | Python 3.11 или 3.12, тестовый запуск |
| Несколько сервисов | docker compose | домашний сервер, удобные обновления |
Образ :cuda ускоряет только то, что считает сам Open WebUI: эмбеддинги и распознавание речи. Модели при этом считает Ollama, и ей видеокарта нужна отдельно. Все варианты команд собраны в официальной инструкции Open WebUI.
Файл docker-compose.yml для домашнего сервера
Для постоянной работы удобнее описать обе службы в одном файле. Ollama тогда тоже живёт в контейнере, и Open WebUI обращается к ней по имени сервиса, без возни с адресами хоста. Создайте папку и файл docker-compose.yml:
services:
ollama:
image: ollama/ollama
volumes:
- ollama:/root/.ollama
restart: unless-stopped
deploy:
resources:
reservations:
devices:
- driver: nvidia
count: all
capabilities: [gpu]
open-webui:
image: ghcr.io/open-webui/open-webui:main
ports:
- "3000:8080"
environment:
- OLLAMA_BASE_URL=http://ollama:11434
- WEBUI_SECRET_KEY=${WEBUI_SECRET_KEY}
volumes:
- open-webui:/app/backend/data
depends_on:
- ollama
restart: unless-stopped
volumes:
ollama:
open-webui:Ключ положите рядом в файл .env строкой WEBUI_SECRET_KEY=.... Без видеокарты NVIDIA удалите блок deploy целиком. Запуск и загрузка модели внутрь контейнера:
docker compose up -d
docker compose exec ollama ollama pull qwen3:8b
docker compose logs -f open-webuiПодробнее про синтаксис и команды compose написано в статье о плагине Docker Compose.
Первый вход, администратор и закрытие регистрации
Первый зарегистрированный пользователь становится администратором. Зайдите сразу после запуска и создайте свой аккаунт, пока этого не сделал кто-то другой в сети. Почта при регистрации нигде не проверяется, это просто логин.
Дальше откройте Admin Panel, раздел Settings, и в General отключите регистрацию новых пользователей или оставьте её с ручным одобрением. То же самое задаётся переменной окружения ENABLE_SIGNUP=false при запуске контейнера. Членам семьи заведите аккаунты вручную в разделе Users.
В разделе Connections видно подключение к Ollama. Сюда же добавляются другие серверы с OpenAI API. Например, локальная LM Studio из соседней статьи про LM Studio подключается адресом http://host.docker.internal:1234/v1. Модели из всех подключений появятся в общем выпадающем списке над чатом.
Доступ к локальному ChatGPT с телефона
В домашней сети достаточно открыть на телефоне адрес компьютера с портом. Узнайте IP командой ip -4 addr и введите в браузере, например, http://192.168.1.50:3000. Если включён UFW, разрешите порт только для локальной подсети:
sudo ufw allow from 192.168.1.0/24 to any port 3000 proto tcpИнтерфейс адаптирован под смартфон. В меню браузера выберите "Добавить на главный экран", и Open WebUI будет открываться как отдельное приложение.
Есть нюанс с микрофоном: браузеры дают доступ к нему только на HTTPS или localhost. По голому HTTP голосовой ввод с телефона не заработает. Варианты:
- обратный прокси nginx с сертификатом, как описано в статье про nginx. В конфиге обязательно передавайте заголовки
UpgradeиConnection, иначе не будут работать потоковые ответы через WebSocket; - доступ извне через домашний VPN по инструкции о WireGuard: телефон подключается к домашней сети, и порт никуда не нужно открывать.
Пробрасывать порт 3000 на роутере напрямую в интернет не стоит: это страница входа без защиты от перебора паролей и без шифрования.
Документы и база знаний: как работает RAG
RAG - это когда модель отвечает не только по своей памяти, а по вашим файлам. Open WebUI режет документ на фрагменты, превращает их в векторы и при вопросе подставляет в запрос самые подходящие куски. Есть два способа:
- Файл прямо в чат. Нажмите плюс у поля ввода и прикрепите PDF, DOCX, TXT или Markdown. Подходит для разового вопроса по договору или инструкции.
- База знаний. Workspace, затем Knowledge, кнопка Create. Загрузите папку документов через Add Content и дождитесь обработки. В любом чате наберите
#и выберите базу, либо привяжите её к модели в Workspace, Models.
У прикреплённого файла есть два режима. Focused Retrieval (по умолчанию) берёт только релевантные куски и годится для больших подборок. Full Context вставляет документ целиком, это точнее для короткой инструкции на пару страниц, но съедает контекст модели.
Настройки обработки лежат в Admin Panel, Settings, Documents: модель эмбеддингов, размер фрагмента, гибридный поиск BM25 с переранжированием, движок извлечения текста. Для русских документов стандартная модель эмбеддингов работает посредственно. Лучше взять многоязычную, например bge-m3 через Ollama:
ollama pull bge-m3Затем в Documents выберите движок эмбеддингов Ollama и модель bge-m3, после чего переиндексируйте базу. Сканы без текстового слоя распознаются только при включённом OCR в движке извлечения (например, Docling или Tika).
Если модель отвечает "в документе нет такой информации", хотя она там есть, начните с двух вещей: увеличьте контекст модели в Ollama до 8-16 тысяч токенов (параметр num_ctx в настройках модели) и включите гибридный поиск. Обрезанный контекст и чисто векторный поиск по коротким русским запросам - самые частые причины плохих ответов.
Обновление, резервная копия и откат
Данные живут в томе, поэтому контейнер можно смело пересоздавать. Перед обновлением сохраните том в архив:
docker run --rm -v open-webui:/data -v "$PWD":/backup alpine \
tar czf /backup/open-webui-$(date +%F).tgz -C /data .Обновление при запуске через docker run:
docker rm -f open-webui
docker pull ghcr.io/open-webui/open-webui:main
# снова та же команда docker run с тем же томом и ключомДля compose хватит docker compose pull и docker compose up -d. Если новая версия сломала что-то важное, закрепите в файле конкретный тег версии из списка релизов на GitHub вместо main и восстановите архив тома командой tar xzf в обратную сторону. Миграции базы иногда необратимы, поэтому архив перед обновлением лучше не пропускать.
Когда что-то не работает
- Пустой список моделей. Проверьте из контейнера:
docker exec open-webui curl -s http://host.docker.internal:11434/api/tags. Нет ответа - смотрите раздел про OLLAMA_HOST выше. - Страница не открывается. Смотрите
docker logs -f open-webui, при первом запуске ждите окончания загрузки моделей. Порт может быть занят:ss -ltnp | grep 3000. - Выкидывает из аккаунта после обновления. Не задан постоянный
WEBUI_SECRET_KEY. - Ответы очень медленные. Ollama считает на процессоре. Команда
ollama psпокажет, сколько модели загружено в GPU. - Ошибка про GPU при запуске с
--gpus. Не установлен nvidia-container-toolkit или не перезапущен Docker после его установки.
Частые вопросы
Open WebUI бесплатный?
Да. Код открыт, использовать дома и в небольшой команде можно бесплатно. Ограничения лицензии касаются удаления бренда в крупных инсталляциях.
Можно ли поставить Open WebUI без Docker?
Можно через pip install open-webui в виртуальном окружении с Python 3.11 или 3.12, затем open-webui serve. Для постоянной работы разработчики рекомендуют Docker.
Нужна ли видеокарта?
Самому Open WebUI нет. Видеокарта нужна Ollama, чтобы модели отвечали быстро. На процессоре модели на 3-8 миллиардов параметров работают, но медленнее.
Где хранятся чаты и документы?
В томе Docker open-webui, внутри контейнера это /app/backend/data. Никуда наружу они не отправляются, если вы сами не подключили облачный API.
Можно ли подключить облачные модели вместе с локальными?
Да, в Admin Panel, Connections добавляется любой API в формате OpenAI. Локальные и облачные модели появятся в одном списке.
Документация и источники
- Open WebUI Quick Start, Open WebUI, 2026
- Knowledge, Open WebUI, 2026
- Ollama FAQ: How do I configure Ollama server?, Ollama, 2026
- Open WebUI releases, GitHub, 2026
Читайте также
- Локальные нейросети с Ollama в Linux: установка и выбор модели
- LM Studio в Linux: как установить и запустить локальную нейросеть без интернета
- Установка Docker в Ubuntu, Debian и Fedora: официальный репозиторий и работа без sudo
- Docker Compose plugin в Linux: современная работа с compose.yaml
- WireGuard в Linux: свой VPN до домашней сети за полчаса
Команды проверены на актуальных версиях дистрибутивов на момент обновления. Перед изменением системных настроек сделайте резервную копию.