Harbor в Proxmox с GPU: все интерфейсы + бекенд локального ИИ с их автоматическим подключением

Полезные ссылки

Официальный репозиторий Harbor на GitHub:

Введение: проблема зоопарка локального AI

Привет самохостеры ! Сегодня я расскажу о своей проблеме с локальным ИИ и решении этого вопроса с помощью Harbor.

Когда начинаешь поднимать нейросети дома, сразу натыкаешься на полный хаос.
Для инференса моделей нужна Ollama или vLLM, для общения с ними хочется нормальный веб-интерфейс вроде Open WebUI или LibreChat, для поиска по документам нужны векторные базы (Qdrant, Chroma), а еще хочется прикрутить автоматизацию вроде n8n или Dify.
В итоге на сервере плодится куча разных docker-compose.yml, и через пару дней не разобраться что где находиться

Вместо того чтобы вручную собирать этого Франкенштейна на коленке, я нашел удобный комбайн —Harbor


Что такое Harbor

Harbor — это интерфейс командной строки и сопутствующее приложение, позволяющее развернуть полный локальный стек LLM — бэкенды, такие как Ollama, llama.cpp или vLLM, фронтенды, такие как Open WebUI, а также вспомогательные сервисы, такие как SearXNG для веб-поиска, Speaches для голосового чата и ComfyUI для генерации изображений — все это предварительно настроено для совместной работы с помощью одной команды harbor up. Никакой ручной настройки: просто выберите нужные сервисы, и Harbor возьмет на себя оркестрацию Docker Compose, конфигурацию и межсервисное взаимодействие


Настройка виртуальной машины в Proxmox

Ставим видеокарту NVIDIA проброс PCIe-устройства


Установка драйверов NVIDIA и Container Toolkit

1. Установим утилиту автоопределения драйвера

sudo apt update && sudo apt install -y ubuntu-drivers-common  

2. Установим рекомендованный драйвер

sudo ubuntu-drivers install

3. Перезагрузим систему

sudo reboot

После перезагрузки проверяем статус:

nvidia-smi

4. Подключим репозиторий NVIDIA Container Toolkit

curl -fsSL [https://nvidia.github.io/libnvidia-container/gpgkey](https://nvidia.github.io/libnvidia-container/gpgkey) | sudo gpg --dearmor -o /usr/share/keyrings/nvidia-container-toolkit-keyring.gpg \
  && curl -s -L [https://nvidia.github.io/libnvidia-container/stable/deb/nvidia-container-toolkit.list](https://nvidia.github.io/libnvidia-container/stable/deb/nvidia-container-toolkit.list) | \
    sed 's#deb https://#deb [signed-by=/usr/share/keyrings/nvidia-container-toolkit-keyring.gpg] https://#g' | \
    sudo tee /etc/apt/sources.list.d/nvidia-container-toolkit.list

5. Установим Toolkit и пропишем runtime в Docker

sudo apt update && sudo apt install -y nvidia-container-toolkit

sudo nvidia-ctk runtime configure --runtime=docker

sudo systemctl restart docker

6. Проверим видимость GPU внутри контейнера

docker run --rm --gpus all nvidia/cuda:12.4.0-base-ubuntu22.04 nvidia-smi

Установка Harbor

Запускаем автоматический скрипт:

Bash

curl -fsSL https://raw.githubusercontent.com/av/harbor/refs/heads/main/install.sh | bash

Этот скрипт делает всё под ключ:

  • Ставит системные зависимости (git, curl, Docker, Docker Compose plugin).

  • Клонирует репозиторий Harbor в ~/.harbor.

  • Добавляет утилиту harbor в переменную окружения PATH.

  • Сохраняет ваши настройки в .env при обновлениях.

Добавляем пользователя в группу docker, чтобы не вводить постоянно sudo:

Bash

sudo usermod -aG docker $USER
newgrp docker

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

Bash

harbor doctor

Если в выводе всё отмечено зелеными галочками:

Plaintext

✔ Docker is installed
✔ Docker daemon is running
✔ NVIDIA GPU detected
✔ NVIDIA Container Toolkit is installed

Значит, инфраструктура полностью готова к запуску сервисов.

Настройка Harbor

1. Просмотр доступных сервисов

В каталоге Harbor уже упаковано огромное количество открытых AI-инструментов. Чтобы увидеть полный список всего, что доступно для установки:

harbor ls

2. Запуск сервисов: команда harbor up

Базовая команда для поднятия инфраструктуры:

harbor up

Параметры и флаги команды harbor up:

  • [services...] — список сервисов через пробел. Можно указывать абсолютно любое количество сервисов одновременно
    (например, harbor up ollama webui). Harbor автоматически свяжет их между собой в общую изолированную сеть Docker. Если запустить harbor up вообще без параметров, запустится стандартный бэкенд по умолчанию.
:~$ harbor up webui ollama
16:38:50 [INFO] Starting services: webui ollama
[+] Running 5/5
 ✔ Network harbor_harbor-network  Created                                                                                                                                               0.0s
 ✔ Container harbor.ollama        Healthy                                                                                                                                              11.8s
 ✔ Container harbor.llamacpp      Healthy                                                                                                                                              11.8s
 ✔ Container harbor.webui         Healthy                                                                                                                                              15.8s
 ✔ Container harbor.ollama-init   Healthy                                                                                                                                              16.5s
16:39:08 [INFO]   webui - http://localhost:33801
16:39:08 [INFO]   ollama - http://localhost:33821

доступные сервисы

веб интерфейсы

AnythingLLM ⦁︎ AstrBot ⦁︎ BionicGPT ⦁︎ Chat Nio ComfyUI ⦁︎ Hollama ⦁︎ HuggingFace ChatUI ⦁︎ KoboldCpp LibreChat ⦁︎ Lobe Chat ⦁︎ Mikupad ⦁︎ ol1 Omnichain ⦁︎ Onyx ⦁︎ Open WebUI ⦁︎ oterm Parllama ⦁︎ SillyTavern ⦁︎ Voicebox

бекенд

AirLLM ⦁︎ Aphrodite ⦁︎ Chandra ⦁︎ faster-whisper-server ⦁︎ ik_llama.cpp KoboldCpp ⦁︎ KTransformers ⦁︎ Lemonade ⦁︎ llama.cpp lmdeploy ⦁︎ mistral.rs ⦁︎ Modular MAX ⦁︎ Needle Nexa SDK ⦁︎ Ollama ⦁︎ openedai-speech ⦁︎ Parler Docker Model Runner ⦁︎ MLX ⦁︎ oMLX ⦁︎ SGLang ⦁︎ Speaches TabbyAPI ⦁︎ Text Generation Inference ⦁︎ Text Embeddings Inference ⦁︎ vLLM

вспомогательные сервисы

Activepieces ⦁︎ Agent Zero ⦁︎ aichat ⦁︎ Aider Airweave ⦁︎ AstrBot ⦁︎ autogpt ⦁︎ Beszel Bifrost ⦁︎ Bolt.new ⦁︎ Browser Use ⦁︎ cloudflared cmdh ⦁︎ Cognee ⦁︎ DBHub ⦁︎ DeerFlow Dify ⦁︎ Docling ⦁︎ Drawio ⦁︎ Fabric facts ⦁︎ Flowise ⦁︎ gptme ⦁︎ Harbor Bench Harbor Boost ⦁︎ Hermes Agent ⦁︎ Home Assistant ⦁︎ JupyterLab K6 ⦁︎ Karakeep ⦁︎ Khoj ⦁︎ KoboldCpp Kotaemon ⦁︎ LangFlow ⦁︎ LangFuse ⦁︎ Latent Scope LibreTranslate ⦁︎ LiteLLM ⦁︎ LitLytics ⦁︎ llama-swap lm-evaluation-harness ⦁︎ Local Deep Research ⦁︎ LocalAI ⦁︎ MCP Forge mcpo ⦁︎ MetaMCP ⦁︎ mi ⦁︎ MindsDB ML Intern ⦁︎ Morphic ⦁︎ n8n ⦁︎ nanobot Netdata ⦁︎ npcsh ⦁︎ OmniParser ⦁︎ Open Design Open Interpreter ⦁︎ Open Notebook ⦁︎ Open Terminal ⦁︎ Open WebUI Pipelines OpenClaw ⦁︎ OpenCode ⦁︎ OpenFang ⦁︎ OpenHands OptiLLM ⦁︎ Perplexica ⦁︎ PhotoPrism ⦁︎ Plandex Postiz ⦁︎ Presenton ⦁︎ Promptfoo ⦁︎ Qdrant RAGLite ⦁︎ Repopack ⦁︎ Resume Matcher ⦁︎ ROS MCP Server SearXNG ⦁︎ Sim Studio ⦁︎ Solo CLI ⦁︎ SQL Chat SuperGateway ⦁︎ SurfSense ⦁︎ TextGrad ⦁︎ tokscale Traefik ⦁︎ txtai RAG ⦁︎ Unsloth ⦁︎ Unsloth Studio Webtop ⦁︎ Windmill ⦁︎ LightRAG ⦁︎ Paperless-ngx ⦁︎ Paperless-GPT ⦁︎ Whishper ⦁︎ Linkwarden

3. Запуск ИИ-моделей и загрузка через Harbor Pull

После того как нужные сервисы и бэкенды подняты, в систему нужно загрузить сами языковые модели (веса), с которыми будут общаться наши веб-интерфейсы.

Для этого в Harbor предусмотрена удобная команда скачивания:

harbor pull <модель>

Пример

harbor pull qwen2.5:7b

после этого модель автоматически будет доступна в open webui
более подробно можно прочитать на их вики
harbor wiki
С этой штукой можно все перепробовать и поразобраться в локальный нейронках
Так-же у него есть свое приложение с более комфортным запуском но я не стал его загружать

Интересный проект надо будет его препарировать, лично я не нашел готового решения и в итоге начал писать свое (ну этим сейчас никого не удивить) т.к. требуется

  • распределенная работа, например, у меня для open-webui отдельный контейнер с отдельным деплоем, контроллер тоже на отдельном lxc контейнере
  • есть несколько легковесных GPU агентов, которые запускаются серверах с видюхами и там запускают нужные бэкенды
  • контроллер управляет всем этим и проксирует через себя запросы т.е. у меня одна точка подключения с одним набором ключей, а по назвнию модели производится обращение на нужный сервер к нужному бэкенду
  • и все это с отдельным веб интерфейсом
  • есть поддержка различных бэкендов и профилей запуска, например, можно взять текущий конфиг запуска, добавить yarn или поменять размер контекста и сохранить под новым именем, потом взять и запустить
  • в будущем планирую добавить простенький бенчмаркинг для сравнивания моделей и профилей между собой

Ну а по поводу данного продукта

Т.е. вместо кучи разных docker-compose мы получили кучу docker-compose, но управляемых скриптом какого-то рандомного чувака из интернета, бинго.

весь open-sourse так и работает ,какой-то чувак или несколько людей написали что-то что упрощает тебе жизнь и ты этим пользуешься и в ус не дуешь , получаешь обновления , и не мучаешься что-бы это заработало . а так для меня это удобно , за короткое время попробую все популярные способы запуска ИИ и уже решу чем я буду пользоваться на постоянной основе .тем более я ещё не особо разираюсь в линуксе , докере и тд. , а попробовать локальные ии уже хочеться

да и вообще я просто хотел поделиться с остальными данной прогрой

Привет!
И у Вас получилось!
Я вот про проект не знал, нужно будет почитать, а может и записать видео-знакомство.

Роман у нас строг =)
Ну и сторонник чтобы мы себя не вели как script-kids, т.к. это может быть не безопасно.

Но реалии таковы, что такие проекты могут дать входную точку, минимальный набор навыков, а уже позже - решите, что нужно конкретно Вам.

Спасибо за тему!

ну я runtipi примерно так использовал (но последний раз запускал полгода назад) именно для быстрого запуска попробовать и потом уже решить надо оно или нет

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

Тут скрипт, конечно, незаменим будет