Установка Open WebUI на Ubuntu Server 24.04 для подключения ИИ

Как установить Open WebUI на Ubuntu Server 24.04 и подключить несколько ИИ для сотрудников

Open WebUI — это веб-интерфейс для работы с разными моделями искусственного интеллекта через браузер. Его можно развернуть на своём сервере, подключить сторонние ИИ через API и дать доступ нескольким сотрудникам.

Такой вариант удобен для небольшой компании: сотрудники заходят в один общий интерфейс, выбирают нужную модель и работают с ИИ без установки отдельных программ на каждый компьютер.

Open WebUI на Ubuntu Server 24.04 можно развернуть как единый веб-интерфейс для работы сотрудников с разными моделями искусственного интеллекта. Сервис устанавливается через Docker Compose и позволяет подключать сторонние ИИ через API.

В этой инструкции разберём установку Open WebUI на чистый Ubuntu Server 24.04, создание администратора, подключение внешних API-провайдеров и настройку доступа для сотрудников. Ollama и локальные модели использовать не будем.

Что такое Open WebUI и зачем он нужен

Open WebUI — это удобная веб-панель для работы с ИИ-моделями. По смыслу это похоже на собственный внутренний чат с ИИ для компании.

Через Open WebUI можно:

  • подключить разные ИИ-модели;
  • создать пользователей для сотрудников;
  • управлять доступом к моделям;
  • хранить историю чатов;
  • использовать единый интерфейс для всей команды;
  • не передавать сотрудникам API-ключи напрямую.

Например, можно подключить OpenAI, OpenRouter или другой OpenAI-compatible API-провайдер. В итоге сотрудник открывает в браузере адрес локального сервера, авторизуется и работает с ИИ через Open WebUI.

Схема получается такая:

Сотрудник
  → Open WebUI на локальном сервере
    → сторонний API-провайдер ИИ
      → модель искусственного интеллекта

В этой инструкции мы не будем устанавливать Ollama и локальные модели. Это отдельный сценарий. Здесь рассматриваем именно подключение сторонних ИИ через API.

Что понадобится для установки

Для тестового стенда достаточно:

  • чистый Ubuntu Server 24.04;
  • доступ по SSH;
  • пользователь с правами sudo;
  • доступ в интернет с сервера;
  • Docker;
  • Docker Compose plugin.

Желательно заранее понимать, кто будет пользоваться системой: только администратор или несколько сотрудников. Если сотрудников несколько, лучше сразу включить режим, при котором новые пользователи не получают доступ автоматически, а ждут подтверждения администратора.

Подготовка Ubuntu Server 24.04 к установке Open WebUI. Установка Docker

Сначала обновим систему:

sudo apt update
sudo apt upgrade -y
sudo reboot

После перезагрузки снова подключаемся к серверу по SSH.

Устанавливаем необходимые пакеты:

sudo apt install -y ca-certificates curl gnupg lsb-release nano htop ufw openssl

Удаляем старые версии Docker, если они вдруг были установлены:

for pkg in docker.io docker-doc docker-compose docker-compose-v2 podman-docker containerd runc; do
  sudo apt remove -y $pkg
done

Добавляем ключ Docker:

sudo install -m 0755 -d /etc/apt/keyrings
sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc
sudo chmod a+r /etc/apt/keyrings/docker.asc

Добавляем официальный репозиторий Docker:

echo \
  "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu \
  $(. /etc/os-release && echo "${UBUNTU_CODENAME:-$VERSION_CODENAME}") stable" | \
  sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

Обновляем список пакетов:

sudo apt update

Устанавливаем Docker Engine и Docker Compose plugin:

sudo apt install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

Проверяем установку:

sudo docker --version
sudo docker compose version
sudo systemctl status docker

Можно также выполнить тестовый запуск контейнера:

sudo docker run hello-world

Если команда отработала без ошибок, Docker установлен правильно.

Подготовка папки для Open WebUI

Создадим отдельную папку для проекта:

sudo mkdir -p /opt/openwebui
cd /opt/openwebui

Сгенерируем секретный ключ для Open WebUI:

openssl rand -base64 32

Команда выдаст строку примерно такого вида:

abcDEF1234567890abcDEF1234567890abcDEF12=

Скопируйте этот ключ. Он понадобится в файле docker-compose.yml.

Создание docker-compose.yml

Создаём файл:

sudo nano /opt/openwebui/docker-compose.yml

Вставляем содержимое:

services:
  open-webui:
    image: ghcr.io/open-webui/open-webui:main
    container_name: open-webui
    restart: always
    ports:
      - "3000:8080"
    volumes:
      - open-webui:/app/backend/data
    environment:
      WEBUI_SECRET_KEY: "ВСТАВЬ_СЮДА_СВОЙ_СЕКРЕТНЫЙ_КЛЮЧ"
      DEFAULT_USER_ROLE: "pending"
      ENABLE_PASSWORD_VALIDATION: "true"
      PASSWORD_VALIDATION_REGEX_PATTERN: "^(?=.*[a-z])(?=.*[A-Z])(?=.*\\d)(?=.*[^\\w\\s]).{8,}$"
      PASSWORD_VALIDATION_HINT: "Минимум 8 символов: большая буква, маленькая буква, цифра и спецсимвол."

volumes:
  open-webui:

В строке:

WEBUI_SECRET_KEY: "ВСТАВЬ_СЮДА_СВОЙ_СЕКРЕТНЫЙ_КЛЮЧ"

нужно вставить ключ, который был получен командой:

openssl rand -base64 32

Обратите внимание: в этом варианте переменные окружения записаны через двоеточие и в кавычках:

ПЕРЕМЕННАЯ: "значение"

Такой формат удобнее, потому что YAML не ломается из-за двоеточий, русских символов или специальных символов в строках.

Сохраняем файл в nano:

Ctrl + O
Enter
Ctrl + X

Перед запуском проверим файл:

cd /opt/openwebui
sudo docker compose config

Если ошибок нет, можно запускать.

Первый запуск Open WebUI

Запускаем контейнер:

cd /opt/openwebui
sudo docker compose up -d

Проверяем, что контейнер запущен:

sudo docker ps

В списке должен быть контейнер:

open-webui

Посмотреть логи можно командой:

sudo docker logs -f open-webui

Теперь откройте Open WebUI в браузере:

http://IP_ВАШЕГО_СЕРВЕРА:3000

Например:

http://192.168.1.50:3000

IP-адрес сервера можно посмотреть командой:

ip a

Ищите адрес вида 192.168.x.x, 10.x.x.x или другой адрес вашей локальной сети.

Если страница не открывается

Проверьте, запущен ли контейнер:

sudo docker ps

Проверьте логи:

sudo docker logs -f open-webui

Если на сервере включён firewall, разрешите порт 3000:

sudo ufw allow 3000/tcp

Проверить статус firewall:

sudo ufw status

Если Open WebUI должен быть доступен только из локальной сети, лучше ограничить доступ по подсети. Например:

sudo ufw allow from 192.168.0.0/16 to any port 3000 proto tcp

Не рекомендуется открывать Open WebUI напрямую в интернет без HTTPS, обратного прокси и нормальной настройки доступа.

Создание администратора

После первого открытия Open WebUI нужно создать первый аккаунт.

Первый пользователь обычно становится администратором. Поэтому сначала регистрируйте именно свой основной аккаунт администратора, а уже потом сотрудников.

После входа проверьте, что доступна админка:

Admin Panel

Если админка открывается, значит аккаунт администратора создан корректно.

Подключение сторонних ИИ через API

Так как в этой инструкции мы не используем локальные модели, нужно подключить внешний API-провайдер.

Например, можно использовать:

  • OpenAI API;
  • OpenRouter;
  • другой OpenAI-compatible API;
  • корпоративный API-шлюз;
  • LiteLLM, если нужно объединить несколько провайдеров в одном месте.

В Open WebUI перейдите:

Admin Panel → Settings → Connections
Подключение OpenAI, OpenRouter, Claude и Gemini через API в Open WebUI
Раздел Connections в Open WebUI для подключения внешних ИИ-провайдеров через API

Далее добавьте подключение к API-провайдеру.

Для OpenAI-compatible API обычно указываются два основных параметра:

API Base URL
API Key

Пример для OpenAI:

API Base URL:
https://api.openai.com/v1

API Key:
ваш_api_ключ

Пример для OpenRouter:

API Base URL:
https://openrouter.ai/api/v1

API Key:
ваш_api_ключ_openrouter

После сохранения подключения в Open WebUI должны появиться доступные модели.

Проверить работу можно простым запросом в новом чате:

Напиши короткое описание услуги IT-аутсорсинга для малого бизнеса.

Если модель отвечает, значит подключение работает.

Почему удобно подключать ИИ через Open WebUI

Если сотрудники работают напрямую с разными ИИ-сервисами, быстро появляются проблемы:

  • у каждого свой аккаунт;
  • сложно контролировать доступ;
  • API-ключи могут попасть не туда;
  • неудобно менять провайдера;
  • нет единого интерфейса для команды.

Open WebUI решает эту задачу как единая внутренняя точка доступа.

Сотрудник заходит в Open WebUI, а администратор уже решает, какие модели ему доступны и через какого провайдера идут запросы.

Настройка доступа для сотрудников

В нашем docker-compose.yml указана переменная:

DEFAULT_USER_ROLE: "pending"

Это значит, что новые пользователи после регистрации не получают доступ автоматически. Они попадают в ожидание подтверждения.

Это правильный вариант для компании.

Порядок работы такой:

1. Сотрудник открывает Open WebUI.
2. Регистрирует аккаунт.
3. Аккаунт попадает в статус ожидания.
4. Администратор заходит в Admin Panel.
5. Администратор подтверждает пользователя.
6. Пользователь получает доступ к Open WebUI.

Не стоит выдавать сотрудникам роль администратора. Для обычной работы достаточно роли пользователя.

Если в Open WebUI используются группы и права доступа к моделям, можно сделать отдельную группу, например:

Сотрудники

И уже этой группе разрешить только нужные модели.

Что важно учесть по безопасности

Open WebUI не стоит открывать в интернет «как есть». Минимальный безопасный вариант:

  • доступ только из локальной сети или через VPN;
  • сложные пароли;
  • новые пользователи только через ручное подтверждение;
  • API-ключи не выдавать сотрудникам напрямую;
  • не давать сотрудникам права администратора;
  • регулярно обновлять контейнер.

Если нужен внешний доступ, лучше использовать Nginx как обратный прокси и выпустить SSL-сертификат. Но для тестового локального стенда достаточно доступа по локальному IP или через VPN.

Полезные команды для обслуживания

Посмотреть запущенные контейнеры:

sudo docker ps

Посмотреть логи Open WebUI:

sudo docker logs -f open-webui

Остановить Open WebUI:

cd /opt/openwebui
sudo docker compose down

Запустить Open WebUI:

cd /opt/openwebui
sudo docker compose up -d

Перезапустить:

cd /opt/openwebui
sudo docker compose restart

Обновить Open WebUI:

cd /opt/openwebui
sudo docker compose pull
sudo docker compose up -d

Посмотреть итоговую конфигурацию Docker Compose:

cd /opt/openwebui
sudo docker compose config

Эта команда полезна, если Open WebUI не запускается из-за ошибки в docker-compose.yml.

Частая ошибка: unexpected type map[string]interface

Иногда при запуске можно увидеть ошибку вида:

services.open-webui.environment.[4]: unexpected type map[string]interface {}

Чаще всего причина в неправильном формате переменных окружения в docker-compose.yml.

Например, если написать так:

environment:
  - PASSWORD_VALIDATION_HINT=Минимум 8 символов: большая буква, маленькая буква, цифра и спецсимвол.

YAML может неправильно обработать двоеточие в русском тексте.

Чтобы избежать этой проблемы, лучше писать переменные окружения так:

environment:
  PASSWORD_VALIDATION_HINT: "Минимум 8 символов: большая буква, маленькая буква, цифра и спецсимвол."

То есть через двоеточие и в кавычках.

Нужно ли ставить Ollama

Для этой инструкции — нет.

Ollama нужна, если вы хотите запускать локальные модели прямо на своём сервере. Например, Llama, Qwen или Mistral. Но для этого желательно иметь достаточно мощное железо, а лучше видеокарту.

Если задача — дать сотрудникам доступ к сторонним ИИ через API, Ollama не нужна.

Правильная схема для такого варианта:

Сотрудник
  → Open WebUI
    → внешний API-провайдер
      → ИИ-модель

А не такая:

Сотрудник
  → Open WebUI
    → Ollama
      → локальная модель

Для начала лучше запустить Open WebUI без Ollama, подключить один внешний API и проверить работу сотрудников.

Итог

Open WebUI удобно использовать как внутренний интерфейс для работы с разными ИИ-моделями. Его можно быстро развернуть на Ubuntu Server 24.04 через Docker Compose, подключить сторонние API-провайдеры и выдать доступ сотрудникам.

Для тестового стенда достаточно:

Ubuntu Server 24.04
Docker
Open WebUI
сторонний API-провайдер ИИ
несколько пользователей

Такой вариант не требует мощного сервера, потому что сами ИИ-модели работают на стороне API-провайдера. Локальный сервер в этом случае отвечает за веб-интерфейс, пользователей, настройки и историю чатов.

Если в дальнейшем понадобится больше контроля, можно добавить Nginx, HTTPS, VPN-доступ, группы пользователей, ограничения по моделям и отдельный API-шлюз вроде LiteLLM.

Прокрутить вверх