Приватное развёртывание и командное развёртывание Ollama

Сервер с GPU может стать общим сервисом моделей для всей команды: контейнерная оркестрация, общий доступ по локальной сети, обратный прокси и распространение моделей. В этой статье всё это собрано в полноценное решение для командного развертывания.

Сначала сформируйте базовое понимание: в самом Ollama нет механизма аутентификации; границу безопасности необходимо строить с помощью обратного прокси и сетевых политик.


Обзор топологии командного развертывания

Рекомендуемая стандартная топология — трёхуровневая: трафик участников сначала попадает на обратный прокси, и после завершения аутентификации на прокси он перенаправляет его в сервис Ollama, который слушает только локальный loopback.

团队部署拓扑:客户端、Nginx 反代、Ollama 服务与模型库

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


Оркестрация Docker и Compose

Для развёртывания на сервере предпочитайте Docker, а в командных сценариях используйте Compose, чтобы закрепить конфигурацию:

# 文件路径:docker-compose.yml
services:
  ollama:
    image: ollama/ollama          # AMD 显卡改用 ollama/ollama:rocm
    container_name: ollama
    restart: unless-stopped
    volumes:
      - ollama:/root/.ollama      # 模型持久化,升级镜像不丢模型
    ports:
      - "127.0.0.1:11434:11434"   # 只暴露给本机,交给 Nginx 对外
    # NVIDIA GPU 直通(需要先装好 NVIDIA Container Toolkit)
    deploy:
      resources:
        reservations:
          devices:
            - driver: nvidia
              count: all
              capabilities: [gpu]

volumes:
  ollama:

Команды, связанные с Docker:

# 启动 / 查看日志 / 升级
docker compose up -d
docker compose logs -f ollama
docker compose pull && docker compose up -d

Обратите внимание, что сопоставление портов записано как 127.0.0.1:11434:11434, а не 11434:11434: первое ограничивает порт локальным loopback, поэтому внешний доступ может идти только через Nginx; второе эквивалентно прямому раскрытию неаутентифицированного сервиса в сетевом интерфейсе, что является наиболее частым источником инцидентов безопасности в командах.


Совместное использование одного сервера моделей в локальной сети

Когда небольшая команда не хочет настраивать прокси, самый малозатратный способ совместного использования — позволить Ollama прослушивать напрямую внутреннюю сеть:

# 服务器端:监听所有网卡
OLLAMA_HOST=0.0.0.0:11434 ollama serve

На машинах участников укажите OLLAMA_HOST на сервер, и локальная команда ollama будет управлять удалённым сервисом:

# 成员电脑:CLI 与 SDK 都认这个变量
export OLLAMA_HOST=http://192.168.1.100:11434

# 之后所有命令都作用在服务器上
ollama run qwen3.5

Для планирования ёмкости при многопользовательском совместном использовании непосредственно обратитесь к формуле из раздела конфигурации: количество одновременных запросов, умноженное на длину контекста, определяет использование VRAM. Для команды из 10 человек не рекомендуется устанавливать NUM_PARALLEL равным 10; постановка в очередь часто изящнее, чем исчерпание VRAM.


Обратный прокси и туннели

Обратный прокси Nginx (рекомендуется)

# 文件路径:/etc/nginx/conf.d/ollama.conf
server {
    listen 80;
    server_name model.example.com;   # 换成你的域名或内网 IP

    location / {
        proxy_pass http://localhost:11434;
        proxy_set_header Host localhost:11434;
        # Ollama 流式响应为 NDJSON,建议关闭缓冲避免"卡顿"
        proxy_buffering off;
    }
}

Временные туннели: ngrok и Cloudflare Tunnel

Для демонстраций или удалённой совместной отладки можно использовать туннели, чтобы временно открыть локальный сервис в публичный интернет:

# ngrok
ngrok http 11434 --host-header="localhost:11434"

# Cloudflare Tunnel
cloudflared tunnel --url http://localhost:11434 --http-host-header="localhost:11434"

Туннель равносилен открытию неаутентифицированного сервиса в публичный интернет. Его рекомендуется использовать только для краткосрочных демонстраций и сразу отключать после использования. Для долговременного внешнего доступа используйте решение с аутентификацией на Nginx.


Аутентификация: построение собственной границы безопасности

В Ollama нет встроенной системы аккаунтов. При командном развёртывании необходимо реализовать собственную аутентификацию. Есть три распространённых подхода:

РешениеПодходПрименимо к
Базовая аутентификация Nginxhtpasswd генерирует файл паролей, единая проверка на уровне проксиНебольшие команды, можно реализовать за десять минут
API-шлюзШлюзы, такие как Kong, APISIX, для выдачи API-ключей, ограничения скорости и аудитаСовместное использование несколькими командами, требуется учёт потребления
Изоляция сетиOllama размещается только во внутренней сети или подсети VPN и не открыт в публичный интернетСреды с корпоративным контролем сети

Возьмём в качестве примера самый распространённый Nginx Basic Auth:

# 生成密码文件
sudo htpasswd -c /etc/nginx/.htpasswd zhangsan

# Nginx location 块中追加两行:
# auth_basic "Ollama API";
# auth_basic_user_file /etc/nginx/.htpasswd;

Приведённые выше решения аутентификации происходят из обычных практик сообщества, а не из официальных возможностей Ollama. При выборе ориентируйтесь на существующую инфраструктуру команды. Есть только один принцип: не выставляйте 11434 напрямую в недоверенной сети.


Распространение приватных моделей и управление версиями

Хорошие модели, настроенные командой, нуждаются в механизме распространения. Подход Ollama — это пространства имён плюс push.

Процесс состоит из четырёх шагов: зарегистрировать аккаунт на ollama.com; привязать локальный публичный ключ (~/.ollama/id_ed25519.pub) на странице настроек официального сайта; скопировать модель под именем, содержащим имя пользователя; выполнить push.

# 复制成带命名空间的名字,用 tag 标版本
ollama cp example-helper myteam/example-helper:v1

# 推送到 ollama.com
ollama push myteam/example-helper:v1

# 成员拉取使用(私有模型需登录授权账号)
ollama run myteam/example-helper:v1

Управление версиями выражается тегами: v1, v2 независимы друг от друга, а откат — это просто переключение обратно на старый тег.

Существует и полностью офлайн-альтернатива для интранета: поместите настроенный Modelfile и файлы весов во внутренний репозиторий кода или файловый сервис, а участники локально запускают create для сборки. Ollama в настоящее время не предоставляет сервер для самостоятельно размещаемых приватных реестров, поэтому распространение между сетями в основном принимает эти две формы.


Мониторинг и эксплуатация

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

Официальные ключевые точки контроля — это ollama ps (загрузка модели и VRAM), логи (расположение в сводной таблице раздела конфигурации) и поле usage в API (статистика таймингов на уровне токенов).

Решения сообщества восполняют пробел в мониторинге на основе метрик: открытый Ollama exporter может экспортировать метрики, такие как количество запросов и пропускная способность токенов, в Prometheus и использовать Grafana для дашбордов. Когда требования простые, достаточно и скрипта, который периодически опрашивает /api/ps и отправляет оповещения по ключевым словам в логах.

Большинство решений для мониторинга поддерживаются сообществом; перед выбором уточните поддерживаемую версию Ollama. В этой статье не фиксируются конкретные названия проектов; вы также можете создать своё собственное, следуя подходу из трёх компонентов: «экспонирование метрик — база данных временных рядов — дашборд».


Введение в Kubernetes Deployment

Команды с существующей инфраструктурой K8s могут запускать Ollama в кластере с помощью Deployment. Есть три ключевых момента: использовать PVC для сохранения данных моделей, использовать декларации планирования ресурсов для узлов GPU и открывать сервис через Service внутри кластера.

# 骨架示意:Deployment + GPU 资源声明
apiVersion: apps/v1
kind: Deployment
metadata:
  name: ollama
spec:
  replicas: 1
  template:
    spec:
      containers:
        - name: ollama
          image: ollama/ollama
          ports:
            - containerPort: 11434
          volumeMounts:
            - name: models          # 模型持久化,避免 Pod 重建重新拉取
              mountPath: /root/.ollama
          resources:
            limits:
              nvidia.com/gpu: 1    # 声明 GPU,配合集群 GPU 调度
      volumes:
        - name: models
          persistentVolumeClaim:
            claimName: ollama-models

Ollama не опубликовала официальный Helm Chart; кластерное развёртывание в основном опирается на чарты сообщества или собственные манифесты. Преимущества перехода на K8s заключаются главным образом в планировании и самовосстановлении. Если у вас только один сервер с GPU, Docker Compose обычно является более беспроблемным выбором.