Приватное развёртывание и командное развёртывание Ollama
Сервер с GPU может стать общим сервисом моделей для всей команды: контейнерная оркестрация, общий доступ по локальной сети, обратный прокси и распространение моделей. В этой статье всё это собрано в полноценное решение для командного развертывания.
Сначала сформируйте базовое понимание: в самом Ollama нет механизма аутентификации; границу безопасности необходимо строить с помощью обратного прокси и сетевых политик.
Обзор топологии командного развертывания
Рекомендуемая стандартная топология — трёхуровневая: трафик участников сначала попадает на обратный прокси, и после завершения аутентификации на прокси он перенаправляет его в сервис Ollama, который слушает только локальный loopback.
Ключевая особенность этой структуры заключается в том, что 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 нет встроенной системы аккаунтов. При командном развёртывании необходимо реализовать собственную аутентификацию. Есть три распространённых подхода:
| Решение | Подход | Применимо к |
|---|---|---|
| Базовая аутентификация Nginx | htpasswd генерирует файл паролей, единая проверка на уровне прокси | Небольшие команды, можно реализовать за десять минут |
| 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 обычно является более беспроблемным выбором.