Оригинал: https://timofei-ermolaev.ru/courses/open-webui/configure/lokalnye-servery/

# Локальные серверы: LM Studio, llama.cpp и vLLM

Подключим один локальный сервер модели к Open WebUI. Разберём LM Studio, llama.cpp и vLLM, адрес для контейнера, авторизацию и проверку ответа.

[![Тимофей Ермолаев](https://timofei-ermolaev.ru/_astro/timofei-ermolaev-portrait.s0mCFw-J_Z1x8STQ.webp)](<https://timofei-ermolaev.ru/ob-avtore/>)

[Тимофей Ермолаев](<https://timofei-ermolaev.ru/ob-avtore/>) Директор по информационным технологиям (CIO)

**Опубликовано**

16 октября 2026 г.

**Обновлено**

16 октября 2026 г.

**На урок**

15 мин

**Тема**

[Настройка](<https://timofei-ermolaev.ru/courses/open-webui/configure/>)

## После урока вы сможете

- Выбрать один локальный сервер для своей среды
- Определить адрес API со стороны сервера Open WebUI
- Согласовать авторизацию и ID модели и проверить полный ответ

**Проверяемый результат:** Один выбранный локальный сервер возвращает полный ответ через Open WebUI. Понятно, где он запущен и какой адрес использует серверная часть интерфейса.

Если языковая модель уже работает на вашем компьютере или на отдельном сервере в локальной сети, подключим её к существующему Open WebUI. Для этого включим у сервера модели программный интерфейс (API), совместимый со стандартом OpenAI, и добавим его адрес в знакомом разделе подключений. Переустанавливать Open WebUI или менять способ его запуска не требуется.

Для этого подходят LM Studio, `llama-server` из пакета llama.cpp и серверный движок vLLM. Все три подключаются через OpenAI-совместимое соединение, а не через настройки Ollama. Ваш способ запуска Open WebUI сохраняется: контейнер Docker, проект Docker Compose, локальная серверная служба или настольный клиент.

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

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

## Выберем один сервер модели

Устанавливать и запускать LM Studio, llama.cpp и vLLM одновременно не нужно. В этом упражнении подключим к Open WebUI одну уже работающую локальную модель и получим от неё законченный ответ. Выберите вариант под свою задачу:

- **LM Studio** пригодится, если вы хотите искать, скачивать и запускать модели через наглядный графический интерфейс, а локальный API включать одной кнопкой.
- **`llama-server` (llama.cpp)** подойдёт, если у вас уже есть собранный исполняемый файл и готовая модель в формате GGUF, которую удобно запустить одной явной командой в терминале.
- **vLLM** рассчитан на уже подготовленную совместимую среду Linux и задачи серверного обслуживания моделей (serving).

Это варианты для выбора маршрута в уроке, а не рейтинг скорости или полный список возможностей программ. Например, у LM Studio тоже есть консольные инструменты и режим работы без графического окна, а llama.cpp умеет задействовать графические ускорители.

Основным сквозным примером урока станет **LM Studio**. Если вы планируете идти по этому маршруту, проверьте [системные требования LM Studio](<https://lmstudio.ai/docs/app/system-requirements>) : актуальная настольная версия работает на Mac с Apple Silicon и macOS 14.0 или новее (поддержка Intel Mac не заявлена), Windows (x64 с поддержкой AVX2 или ARM) и Linux (x64 или ARM64, AppImage).

Если на компьютере, который запускает модель (компьютере инференса), уже настроен `llama-server` или подготовлено окружение vLLM в Linux, пропустите настройку LM Studio. Сверьтесь с правилами выбора сетевого адреса и перейдите к памяткам команд в разделе «Добавим выбранное подключение».

## Подготовим API в LM Studio

Все действия этого раздела выполняются в программе LM Studio на том компьютере, где непосредственно запускается языковая модель. Открывать LM Studio внутри контейнера Open WebUI или переносить её внутрь служебной среды Ubuntu WSL2, если само приложение установлено в Windows, не нужно.

Сначала убедимся, что сама модель способна отвечать локально:

1. Откройте вкладку поиска **Discover** в LM Studio и скачайте модель, которая подходит под объём памяти и возможности вашего оборудования.
2. Перейдите в раздел **Chat**, выберите скачанную модель в верхнем загрузчике, дождитесь окончания загрузки в память и отправьте любое короткое сообщение. Ответ в окне LM Studio подтверждает, что модель загрузилась и отвечает локально. Названия моделей из других программ (например, короткие теги из Ollama) здесь не подойдут.

Теперь включим API-сервер. Перейдите на вкладку **Developer**. Подписи кнопок могут немного отличаться в зависимости от версии и перевода интерфейса. В настройках сервера (**Server Settings**) проверьте поле порта (**Server Port**): для этого урока мы явно выбираем порт `1234`, если он свободен на вашем компьютере.

Если вы планируете обращаться к LM Studio из контейнера или с другого устройства в своей сети, заранее включите проверку подлинности. Начиная с версии 0.4.0, [локальный сервер LM Studio поддерживает токены доступа](<https://lmstudio.ai/docs/developer/core/authentication>) :

1. Включите переключатель **Require Authentication**.
2. Нажмите **Manage Tokens**, затем **Create Token**, задайте нужные разрешения и создайте секретный токен.
3. Сразу скопируйте полученное значение в надёжное место. Это внутренний ключ вашего локального сервера LM Studio, а не платная подписка или ключ платформы OpenAI.

После этого запустите сервер кнопкой **Start server**.

Остаётся узнать точный идентификатор модели, который ожидает программный интерфейс. В [режиме совместимости с OpenAI](<https://lmstudio.ai/docs/developer/openai-compat>) LM Studio отдаёт список доступных идентификаторов по запросу `GET /v1/models` и показывает их в интерфейсе разработчика. Скопируйте оттуда точную строку идентификатора (`id`), а не произвольное название файла на диске.

При включённой автоматической подгрузке по запросу (JIT loading) список `/v1/models` может перечислять все скачанные в LM Studio модели, даже если они прямо сейчас не загружены в оперативную память или видеопамять. Поэтому различайте три состояния: модель скачана на диск, модель загружена в память сервера и модель реально возвращает ответ. Само присутствие имени в списке ещё не означает, что модель готова мгновенно ответить.

## Определим адрес со стороны backend WebUI

Чтобы выбрать адрес сервера, проследим путь запроса:

**Браузер (или окно настольного приложения) → серверная часть (backend) Open WebUI → API локального сервера модели → загруженная модель.**

Сетевой запрос к порту `1234` отправляет не ваша вкладка браузера и не графическое окно Open WebUI Desktop, а именно **серверная часть Open WebUI**. Браузер или настольный клиент может быть открыт на компьютере с LM Studio, а серверная часть Open WebUI работать в контейнере или на другой машине. Тогда адрес `127.0.0.1` (`localhost`) для неё указывает внутрь контейнера или удалённого хоста, а не на компьютер с моделью.

Выберем правильный базовый адрес (`Base URL`) для порта `1234` по расположению серверной части Open WebUI:

| Где работает серверная часть (backend) Open WebUI | Какой Base URL указывать в настройках | Обязательное условие для работы маршрута |
| --- | --- | --- |
| Нативно (без Docker) на том же самом компьютере, где запущена LM Studio | `http://127.0.0.1:1234/v1` | Оба процесса работают в одной системе на одном хосте, сервер LM Studio слушает локальный интерфейс (loopback). |
| В контейнере под управлением Docker Desktop (Windows или macOS), а LM Studio на этом же хосте | `http://host.docker.internal:1234/v1` | Специальное имя поддерживается средой Docker Desktop, а сам порт сервера модели реально достижим для контейнера; при выходе за пределы loopback включите токен и ограничения частной сети. |
| В контейнере Docker Engine на Linux или на отдельном компьютере в частной сети | `http://<фактический-доступный-IP>:1234/v1` | Замените обозначение в угловых скобках реальным частным IP-адресом компьютера с LM Studio. Сервер должен слушать доступный сетевой интерфейс, а маршрут и межсетевой экран должны разрешать доступ от хоста Open WebUI. |

- **Особенности контейнеров и `host.docker.internal`.** В [сетевой документации Docker Desktop](<https://docs.docker.com/desktop/features/networking/>) имя `host.docker.internal` описано как внутреннее DNS-имя для обращения из контейнера к службам хоста. При этом само наличие имени не гарантирует, что сервер LM Studio, привязанный только к локальному `localhost` хост-машины, окажется доступен из контейнера в любой конфигурации. В среде Linux Docker Engine опция `host-gateway` (если вы добавляли её при создании контейнера) решает только задачу преобразования имени в IP-адрес, но не открывает доступ к службам, которые слушают исключительно внутренний интерфейс `127.0.0.1` хоста.
- **Переход к локальной сети в LM Studio.** Если серверная часть Open WebUI работает в контейнере Linux Docker Engine или на соседнем компьютере, один только `localhost` не подойдёт. В LM Studio для этого предусмотрен режим **Serve on Local Network**. Прежде чем включать его, обязательно активируйте проверку токена (**Require Authentication**) и убедитесь, что вы находитесь в доверенной частной сети, а межсетевой экран разрешает входящие подключения к порту `1234` только с узла, где работает Open WebUI. Никогда не пробрасывайте этот порт на роутере в открытый интернет.
- **Какой адрес копировать после включения сетевого режима.** Когда вы включаете **Serve on Local Network**, LM Studio меняет привязку сетевого интерфейса и показывает в окне актуальный адрес для подключения. В поле `Base URL` используйте фактический частный IP-адрес компьютера с моделью. Запись с угловыми скобками в таблице служит шаблоном; копировать её буквально нельзя. Служебное обозначение `0.0.0.0`, которое иногда встречается в настройках серверов, означает «слушать все доступные интерфейсы», но в качестве адреса подключения в Open WebUI никогда не вводится. Передача токена по протоколу `http://` не шифрует сетевой трафик.

## Добавим выбранное подключение

Когда сервер модели запущен, а подходящий сетевой адрес определён, откроем интерфейс Open WebUI с правами администратора. Поля URL, Auth и Model IDs разобраны в уроке про [настройку OpenAI-совместимых подключений](<https://timofei-ermolaev.ru/courses/open-webui/configure/openai-compatible/>) . Как различать одинаковые ID с помощью Prefix ID, объясняется в уроке [«Облачные модели»](<https://timofei-ermolaev.ru/courses/open-webui/configure/oblachnye-modeli/>) . Здесь укажем значения для локального сервера. Существующие подключения (например, ранее настроенные локальные или облачные провайдеры) удалять или отключать не нужно.

Перейдите в **Settings → Admin → Connections**, найдите блок **Manage OpenAI API Connections** и нажмите кнопку добавления нового подключения (**Add Connection**). Заполните поля:

1. **URL (`Base URL`).** Укажите выбранный в предыдущем разделе адрес, который обязательно заканчивается суффиксом `/v1` (например, `http://127.0.0.1:1234/v1` для нативной установки на том же компьютере). Не вставляйте сюда собственный внутренний адрес LM Studio вида `/api/v1/chat` и не дописывайте в конец полный путь `/chat/completions`.
2. **Проверка подлинности (`Auth`).** Если вы включили проверку токена в LM Studio, выберите режим **Bearer** и вставьте созданный вами токен сервера. Если же вы используете локальный сервер, в котором проверка ключа действительно отключена, выберите вариант **None** (не нужно вводить поддельные строки вроде `sk-...` или оставлять пустой Bearer в качестве обходного пути).
3. **Идентификатор модели (`Model IDs`).** Вставьте точный идентификатор модели, который вы скопировали из LM Studio или из вывода `/v1/models`, и добавьте его в список. Если в вашем Open WebUI уже есть модель с точно таким же именем от другого источника, вы можете задать `Prefix ID`, разобранный в уроке «Облачные модели», чтобы легко различать их в списке.

Нажмите **Verify Connection**, затем сохраните настройки кнопкой **Save**.

Если вместо LM Studio вы подключаете уже установленный на компьютере инференса `llama-server` или подготовленную среду vLLM, воспользуйтесь соответствующей памяткой ниже. Обе карточки рассчитаны на то, что сам инструмент и модель у вас уже есть: мы не выполняем здесь сборку или установку драйверов.

### Вариант для готового llama-server (llama.cpp)

Эта карточка подойдёт, если на компьютере инференса у вас уже есть исполняемый файл `llama-server` и совместимый файл модели в формате `.gguf`. Команда выполняется на самом компьютере инференса в каталоге с бинарным файлом, а не внутри контейнера Open WebUI. Замените условный путь к файлу модели на ваш реальный полный путь. Мы явно задаём порт `8080`, чтобы адрес был предсказуемым.

В терминале Linux или macOS:

```
./llama-server  --model  /ABS/PATH/model.gguf  --alias  local-model  --host  127.0.0.1  --port  8080  
```

В окне Windows PowerShell:

```
.\ llama-server.exe  -- model C:\ABS\PATH\model.gguf  -- alias local - model  -- host  127.0 . 0.1  -- port  8080  
```

Как указано в [официальном руководстве llama-server](<https://raw.githubusercontent.com/ggml-org/llama.cpp/master/tools/server/README.md>) , флаг `--alias` позволяет задать понятное имя модели для API.

Параметры для добавления в Open WebUI:

- **Условие для адреса:** так как в команде указан `--host 127.0.0.1`, базовый адрес `http://127.0.0.1:8080/v1` сработает **только** в том случае, если серверная часть Open WebUI запущена нативно на этом же самом компьютере. Если backend Open WebUI работает в контейнере Docker или на другом узле, сервер `llama-server` должен слушать доступный частный интерфейс, а в качестве `Base URL` нужно выбрать адрес по правилам из таблицы предыдущего раздела, сохранив порт `8080` из этой команды.
- **Model ID:** `local-model` (значение, переданное во флаге `--alias`).
- **Auth:** выберите **None**, так как в команде выше ключ не задан. Если вы запускаете сервер с флагом `--api-key` или `--api-key-file`, выберите в Open WebUI режим **Bearer** и укажите свой ключ (не подставляйте секретные ключи прямо в публичные заметки или общие скрипты). Оставить тип провайдера в значении по умолчанию достаточно для обычного чата; специальный режим управления llama.cpp в настройках нужен только для дополнительных административных функций.

### Вариант для подготовленной среды vLLM в Linux

Этот вариант подходит, если на Linux-хосте инференса уже развёрнуто совместимое окружение vLLM и проверена поддержка оборудования. Здесь описан стандартный официальный маршрут для Linux. Нативная работа в Windows не поддерживается; специализированные ветки и плагины для других платформ выходят за рамки урока. Упомянутая в [документации быстрого старта vLLM](<https://docs.vllm.ai/en/latest/getting_started/quickstart/>) модель `Qwen/Qwen2.5-1.5B-Instruct` приведена только как документированный пример синтаксиса, а не как универсальная рекомендация под любое оборудование.

Команда выполняется в терминале Linux на самом хосте инференса (не внутри контейнера Open WebUI и не в локальном терминале ноутбука, если сервер удалённый):

```
vllm  serve  Qwen/Qwen2.5-1.5B-Instruct  --host  127.0.0.1  --port  8000  
```

Параметры для добавления в Open WebUI:

- **Условие для адреса:** при запуске с `--host 127.0.0.1` базовый адрес `http://127.0.0.1:8000/v1` подходит **только** для нативной серверной части Open WebUI, работающей на том же самом Linux-хосте. Для контейнерного или удалённого backend Open WebUI потребуется запуск на доступном частном сетевом интерфейсе, защита периметра и адрес по правилам предыдущего раздела с портом `8000` из этой команды.
- **Model ID:** скопируйте точный идентификатор из ответа `GET /v1/models` вашего сервера (для команды из примера это `Qwen/Qwen2.5-1.5B-Instruct`).
- **Auth:** выберите **None**, если сервер запущен без проверки ключа. Если вы задали ключ флагом `--api-key` или через переменную окружения `VLLM_API_KEY`, выберите **Bearer** и введите этот токен. Ключ проверяет доступ к API, но не заменяет межсетевой экран и не шифрует трафик. Не публикуйте порт vLLM в интернет.

## Получим ответ и найдём место сбоя

Проверка соединения в настройках оценивает отклик сервера, но ещё не генерацию ответа. Одно появление имени модели в списке тоже не подтверждает её работу. Проверим весь путь до ответа:

1. Откройте новый чат в Open WebUI.
2. В селекторе моделей сверху выберите именно то локальное подключение и тот точный идентификатор модели (`Model ID`), который вы только что добавили.
3. Отправьте короткий проверочный запрос:

```
Ответь одним коротким предложением: для чего нужен список дел?  
```

Упражнение успешно завершено, когда выбранная локальная модель вернула в окно чата один законченный осмысленный ответ обычным текстом без сообщений об ошибке. Конкретная формулировка фразы у разных моделей будет отличаться, главное, чтобы ответ пришёл именно через созданный вами локальный маршрут.

Если проверка соединения не проходит или вместо ответа в чате появляется ошибка, не спешите переустанавливать Open WebUI или удалять тома с данными. Проверьте цепочку по шагам от сервера модели к интерфейсу:

1. **Состояние модели и сервера на хосте инференса.** Посмотрите в окно или в терминал вашего локального сервера (LM Studio, `llama-server` или vLLM). Запущен ли сам API-сервер? Загружена ли модель в память, или сервер пытается подгрузить слишком тяжёлую модель по запросу (JIT) и сталкивается с нехваткой ресурсов? В журналах (логах) сервера на компьютере инференса поищите, дошёл ли запрос от Open WebUI и не возникла ли ошибка при генерации.
2. **Сетевая достижимость со стороны backend Open WebUI.** Если сервер модели исправно отвечает в браузере на самом компьютере инференса, это ещё не доказывает, что до него есть маршрут из изолированного контейнера Docker. Проверьте, не оставили ли вы в настройках контейнера адрес `127.0.0.1` вместо `host.docker.internal` или фактического частного IP-адреса. При работе через частный IP убедитесь, что в LM Studio включён режим **Serve on Local Network** (или указан нужный `--host` в консольных серверах), а межсетевой экран разрешает подключение именно от хоста Open WebUI. Не отключайте брандмауэр полностью и не открывайте порт для всех внешних сетей ради быстрой проверки.
3. **Точность параметров в Open WebUI.** Проверьте, что `Base URL` заканчивается на `/v1` без лишних сегментов, режим `Auth` точно соответствует настройкам сервера (**None** для сервера без ключа или **Bearer** с актуальным токеном), а `Model ID` скопирован без опечаток из `/v1/models`.

Правила заполнения полей и коды ошибок доступа разобраны в уроке про [настройку OpenAI-совместимых подключений](<https://timofei-ermolaev.ru/courses/open-webui/configure/openai-compatible/>) , а работа с префиксами при совпадении ID моделей — в уроке [«Облачные модели»](<https://timofei-ermolaev.ru/courses/open-webui/configure/oblachnye-modeli/>) . Первый законченный ответ от выбранной локальной модели подтверждает работу базового текстового чата по этому маршруту.

## Материалы урока

- [LM Studio: локальный сервер lmstudio.ai](<https://lmstudio.ai/docs/developer/core/server>)
- [llama.cpp: HTTP server github.com](<https://github.com/ggml-org/llama.cpp/tree/master/tools/server>)
- [vLLM: OpenAI-compatible server docs.vllm.ai](<https://docs.vllm.ai/en/latest/serving/online_serving/>)

## Отметить прохождение

Отметьте урок после того, как получили проверяемый результат из практической части.

Урок пройден

![Тимофей Ермолаев](https://timofei-ermolaev.ru/_astro/timofei-ermolaev-portrait.s0mCFw-J_2r7Nkv.webp)

## Об авторе

### Тимофей Ермолаев

Директор по информационным технологиям (CIO)

Пишу о больших языковых моделях, автоматизации и применении ИИ в бизнесе. В статьях разделяю личный опыт, выводы исследований и практические рекомендации.

[Подробнее об авторе](<https://timofei-ermolaev.ru/ob-avtore/>)
