LinuxRuLinux без лишней теории
Локальный ИИ

Open WebUI: свой локальный ChatGPT на Linux с Ollama и Docker

Редакция LinuxRu8 мин чтенияИнструкции

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

Open WebUI: свой локальный ChatGPT на Linux с Ollama и Docker
Фото: mikemacmarketing, CC BY 2.0, Wikimedia Commons
Содержание
  1. Как устроено
  2. Что поставить
  3. Запуск
  4. Docker Compose
  5. Первый вход
  6. С телефона
  7. Документы и RAG
  8. Обновление и бэкап
  9. Ошибки
  10. Частые вопросы

Из чего состоит локальный 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:mainOllama уже стоит и нужна другим программам
Всё в одном контейнереopen-webui:ollama с --gpus=allчистая машина, хочется одну команду
Эмбеддинги и Whisper на GPUopen-webui:cudaмного документов и голосового ввода, есть NVIDIA
Без Dockerpip install open-webuiPython 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 режет документ на фрагменты, превращает их в векторы и при вопросе подставляет в запрос самые подходящие куски. Есть два способа:

  1. Файл прямо в чат. Нажмите плюс у поля ввода и прикрепите PDF, DOCX, TXT или Markdown. Подходит для разового вопроса по договору или инструкции.
  2. База знаний. 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. Локальные и облачные модели появятся в одном списке.

Документация и источники

Читайте также

Команды проверены на актуальных версиях дистрибутивов на момент обновления. Перед изменением системных настроек сделайте резервную копию.