Ollama: despliegue privado y en equipo
Un servidor con GPU puede convertirse en el servicio de modelos compartido de todo el equipo: orquestación de contenedores, compartición en la intranet, proxy inverso, distribución de modelos. Este artículo los integra en una solución completa de despliegue para equipos.
Primero, lo esencial: Ollama no dispone de un mecanismo de autenticación propio; el perímetro de seguridad debe construirse con un proxy inverso y políticas de red.
Resumen de la topología de despliegue en equipo
La topología estándar recomendada consta de tres segmentos: el tráfico de los miembros llega primero al proxy inverso; el proxy realiza la autenticación y reenvía al servicio de Ollama que solo escucha en la interfaz de bucle local.
El diseño clave de esta estructura es que Ollama solo escucha en 127.0.0.1; todo acceso externo debe pasar por el proxy, de modo que la entrada de autenticación es única y controlable.
Orquestación con Docker y Compose
Para el despliegue en servidores, Docker es la primera opción; en escenarios de equipo, se usa Compose para fijar la configuración:
# 文件路径: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:
Comandos relacionados con Docker:
# 启动 / 查看日志 / 升级 docker compose up -d docker compose logs -f ollama docker compose pull && docker compose up -d
Observa que el mapeo de puertos está escrito como 127.0.0.1:11434:11434 en lugar de 11434:11434: el primero limita el puerto al bucle local, y el exterior solo puede acceder a través de Nginx; el segundo equivale a exponer el servicio sin autenticación directamente en la tarjeta de red, siendo la causa más común de incidentes de seguridad en equipos.
Compartir un servidor de modelos en la red local
Cuando un equipo pequeño no quiere montar un proxy, la forma de compartir de menor costo es hacer que Ollama escuche directamente en la intranet:
# 服务器端:监听所有网卡 OLLAMA_HOST=0.0.0.0:11434 ollama serve
En las máquinas de los miembros, se apunta OLLAMA_HOST al servidor, y el comando ollama local operará sobre el servicio remoto:
# 成员电脑:CLI 与 SDK 都认这个变量 export OLLAMA_HOST=http://192.168.1.100:11434 # 之后所有命令都作用在服务器上 ollama run qwen3.5
La planificación de capacidad para uso compartido por varias personas se remite directamente a la fórmula del capítulo de configuración: el número de solicitudes concurrentes multiplicado por la longitud del contexto determina la ocupación de memoria de video. Para un equipo de 10 personas no se recomienda subir NUM_PARALLEL a 10; hacer cola suele ser más decoroso que reventar la memoria de video.
Proxy inverso y túneles
Proxy inverso con Nginx (recomendado)
# 文件路径:/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;
}
}
Túneles temporales: ngrok y Cloudflare Tunnel
En escenarios de demostración o depuración remota conjunta, se pueden usar túneles para exponer temporalmente el servicio local a Internet:
# ngrok ngrok http 11434 --host-header="localhost:11434" # Cloudflare Tunnel cloudflared tunnel --url http://localhost:11434 --http-host-header="localhost:11434"
Un túnel equivale a abrir el servicio sin autenticación a Internet; solo se recomienda para demostraciones de corta duración, y hay que cerrarlo al terminar. Para acceso externo a largo plazo, usa la solución Nginx con autenticación.
Autenticación: construir el perímetro de seguridad por uno mismo
Ollama no tiene un sistema de cuentas integrado; en un despliegue para equipos es necesario implementar autenticación propia. Hay tres vías comunes:
| Solución | Método | Ámbito de aplicación |
|---|---|---|
| Nginx Basic Auth | htpasswd genera un archivo de contraseñas; el proxy realiza la verificación unificada. | Para equipos pequeños, implementable en diez minutos. |
| API Gateway | Pasarelas como Kong, APISIX, etc., para emisión de API Keys, limitación de tráfico y auditoría. | Compartido entre varios equipos, requiere medición. |
| Aislamiento de red | Ollama solo accesible desde la intranet o segmento de VPN, sin exposición a Internet. | Entornos con control de red empresarial. |
Tomando como ejemplo el Basic Auth de Nginx, el más utilizado:
# 生成密码文件 sudo htpasswd -c /etc/nginx/.htpasswd zhangsan # Nginx location 块中追加两行: # auth_basic "Ollama API"; # auth_basic_user_file /etc/nginx/.htpasswd;
Las soluciones de autenticación anteriores provienen de prácticas comunes de la comunidad y no de funciones oficiales de Ollama. Al elegir, guíate por la infraestructura existente del equipo; el principio es uno solo: no expongas el puerto 11434 directamente en una red no confiable.
Distribución y gestión de versiones de modelos privados
Un buen modelo personalizado por el equipo necesita un mecanismo de distribución. La solución de Ollama es un espacio de nombres más un push.
El proceso consta de cuatro pasos: registrarse en ollama.com; vincular la clave pública local en la página de configuración del sitio oficial (~/.ollama/id_ed25519.pub); copiar el modelo a un nombre que incluya el nombre de usuario; y hacer push.
# 复制成带命名空间的名字,用 tag 标版本 ollama cp ejemplo-helper myteam/ejemplo-helper:v1 # 推送到 ollama.com ollama push myteam/ejemplo-helper:v1 # 成员拉取使用(私有模型需登录授权账号) ollama run myteam/ejemplo-helper:v1
La gestión de versiones se expresa con tags: v1, v2 son independientes; retroceder consiste en volver al tag anterior.
También existe una alternativa de intranet totalmente offline: colocar el Modelfile personalizado y los archivos de pesos en el repositorio de código interno o en un servicio de archivos, y los miembros ejecutan create localmente para construir. Actualmente, Ollama oficial no proporciona un servidor para construir un repositorio privado propio; la distribución entre redes se basa principalmente en estas dos formas.
Monitoreo y operaciones
La operación diaria de un servicio autohospedado gira en torno a tres cosas: que el servicio esté vivo, que los recursos sean suficientes y que los errores se puedan consultar.
Las herramientas oficiales son ollama ps (carga de modelos y memoria de video), los registros (ubicación en la tabla resumen del capítulo de configuración) y el campo usage de la API (estadísticas de tiempo a nivel de token).
Las soluciones de la comunidad complementan la monitorización basada en métricas: el exporter de Ollama de código abierto puede exponer métricas como número de solicitudes o rendimiento de tokens a Prometheus, y usar Grafana para crear paneles. Cuando el requisito es simple, basta un script que sondee periódicamente /api/ps y alerte sobre palabras clave en los registros.
La mayoría de las soluciones de monitoreo son mantenidas por la comunidad; antes de elegir, verifica la versión de Ollama que soportan. Este artículo no se limita a nombres de proyectos específicos; también puedes construir la tuya con el enfoque de tres piezas: 'exposición de métricas - base de datos de series temporales - panel'.
Introducción al despliegue en Kubernetes
Los equipos que ya tienen infraestructura K8s pueden ejecutar Ollama en el clúster con un Deployment. Hay tres puntos clave: los datos del modelo se persisten con PVC, los nodos GPU se declaran con programación de recursos, y la exposición del servicio se realiza a través de un Service dentro del clúster.
# 骨架示意: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 no ha publicado un Helm Chart oficial; el despliegue en clústeres suele depender de Charts comunitarios o manifiestos propios. El beneficio de usar K8s está principalmente en la programación y la auto-recuperación. Si solo tienes un servidor GPU, Docker Compose suele ser una opción más sencilla.