Modelos Locales13 min de lecturaActualizado: 2026-10-28Ingeniería Verificada

Cómo Configurar Ollama en un Servidor Linux con GPU: Despliegue en Producción, Nginx y Seguridad

Respuesta Rápida y Protocolo de SoluciónResumen ejecutivo directo para ingenieros

Para desplegar Ollama en un servidor Linux de producción de forma segura y profesional: 1) Instala los controladores NVIDIA y NVIDIA Container Toolkit para aceleración CUDA; 2) Configura Ollama como servicio systemd aislado vinculándolo a localhost (OLLAMA_HOST=127.0.0.1:11434) para que jamás quede expuesto directamente a internet sin protección; 3) Configura OLLAMA_NUM_PARALLEL=4 y OLLAMA_MAX_LOADED_MODELS=2 para soportar concurrencia; 4) Coloca un proxy inverso Nginx con SSL (Let's Encrypt) delante para cifrar el tráfico y aplicar autenticación mediante API Key (Bearer token); y 5) Blinda el cortafuegos con UFW permitiendo solo puertos 22, 80 y 443.

⚡ Checklist Rápido de Producción para Ollama en Linux

  1. Aislamiento de red: Mantén siempre OLLAMA_HOST=127.0.0.1:11434. Nunca lo enlaces a 0.0.0.0 sin proxy.
  2. Autenticación API: Intercepta las llamadas en Nginx exigiendo una cabecera Authorization: Bearer TU_TOKEN_SECRETO.
  3. Variables de concurrencia: Ajusta OLLAMA_NUM_PARALLEL=4 y OLLAMA_KEEP_ALIVE=24h para evitar descargas y recargas lentas de pesos en VRAM.
  4. Proxy Nginx con streaming: Desactiva el buffering con proxy_buffering off; para soportar Server-Sent Events fluidos.

1. De la Comodidad en Escritorio al Rigor en el Datacenter

Ollama ha democratizado de forma brillante el uso de Modelos de Lenguaje Grande en ordenadores personales gracias a su instalador de un solo clic y su interfaz intuitiva basada en el motor de llama.cpp. Sin embargo, trasladar Ollama a un servidor dedicado en la nube (como Hetzner, OVH, AWS EC2 o servidores propios en rack) para alimentar aplicaciones web comerciales exige aplicar estándares estrictos de seguridad, administración de sistemas y optimización de recursos.

Un servidor con GPU en producción no puede depender de una sesión de terminal abierta con tmux. Debe orquestarse mediante un servicio del sistema tolerante a reinicios (systemd), monitorizarse con métricas de salud y protegerse contra accesos no autorizados mediante un proxy inverso con cifrado SSL moderno. En este tutorial configuraremos una arquitectura de producción paso a paso sobre Ubuntu Server 24.04 LTS.

PUBLICIDAD

2. Instalación de Drivers NVIDIA y Verificación CUDA

Antes de instalar Ollama, es preceptivo asegurar que los controladores privativos de NVIDIA y las bibliotecas de cálculo CUDA estén correctamente vinculadas con el kernel de Linux:

# Actualizar repositorios e instalar controladores privativos NVIDIA recomendados
sudo apt update && sudo apt upgrade -y
sudo apt install -y build-essential dkms linux-headers-$(uname -r) ubuntu-drivers-common
sudo ubuntu-drivers autoinstall

# Reiniciar el servidor para cargar los módulos del kernel
sudo reboot

# Tras reiniciar, verificar estado de la GPU
nvidia-smi

Debes observar una tabla detallando el modelo de tu GPU (por ejemplo, RTX 4090 o A100), la versión del driver (550.x o superior) y la versión de CUDA soportada (CUDA 12.x).

3. Instalación de Ollama y Creación del Usuario del Sistema

Ejecutamos el script de instalación oficial de Ollama, el cual crea automáticamente un usuario de sistema dedicado llamado ollama y su grupo correspondiente:

curl -fsSL https://ollama.com/install.sh | sh

Configuración Avanzada del Servicio systemd

Por defecto, Ollama se ejecuta con configuraciones conservadoras pensadas para un solo usuario. Editamos la unidad de servicio para dotarla de capacidad de producción:

sudo systemctl edit ollama.service

Esto abrirá un archivo de anulación (override). Pega la siguiente configuración de variables de entorno:

[Service]
# Vincular estrictamente a localhost para máxima seguridad
Environment="OLLAMA_HOST=127.0.0.1:11434"

# Permitir atender 4 peticiones simultáneas con el mismo modelo
Environment="OLLAMA_NUM_PARALLEL=4"

# Mantener hasta 2 modelos cargados en VRAM al mismo tiempo
Environment="OLLAMA_MAX_LOADED_MODELS=2"

# Mantener los pesos en VRAM durante 24 horas sin descargarlos por inactividad
Environment="OLLAMA_KEEP_ALIVE=24h"

# Ruta para almacenamiento de modelos en disco secundario (opcional)
Environment="OLLAMA_MODELS=/var/lib/ollama/models"

# Asignar límites de descriptores de archivos para alta concurrencia
LimitNOFILE=65536

Guardamos y recargamos el demonio de systemd:

sudo systemctl daemon-reload
sudo systemctl restart ollama
sudo systemctl status ollama
Variable de Entorno Ollama Valor por Defecto Valor Recomendado en Producción Propósito Operativo
OLLAMA_HOST 127.0.0.1:11434 127.0.0.1:11434 Previene la exposición pública del daemon sin autenticar
OLLAMA_NUM_PARALLEL 1 2 a 4 Permite atender múltiples usuarios en paralelo
OLLAMA_MAX_LOADED_MODELS 1 2 Mantiene un modelo de embeddings y un LLM en VRAM a la vez
OLLAMA_KEEP_ALIVE 5m (5 minutos) 24h o -1 (indefinido) Evita la latencia de 10 segundos al recargar pesos desde disco
OLLAMA_MODELS /usr/share/ollama/.ollama /mnt/data/ollama/models Evita saturar la partición raíz del sistema operativo
PUBLICIDAD

4. Securización con Nginx, Autenticación por Bearer Token y Certificado SSL

Para exponer la API de Ollama de forma segura a clientes remotos (como aplicaciones Next.js, apps móviles o microservicios), configuramos Nginx como proxy inverso. Implementaremos una directiva para exigir una API Key secreta en la cabecera Authorization:

# /etc/nginx/sites-available/ollama-api
map $http_authorization $es_token_valido {
    default 0;
    # Sustituye por tu clave criptográfica segura generada con openssl rand -hex 32
    "Bearer 9f8a3c42e1d74b88bf5a23091cd5e6f7a8b9c0d1e2f3a4b5c6d7e8f9a0b1c2d3" 1;
}

server {
    listen 80;
    server_name api-ia.tudominio.com;
    return 301 https://$host$request_uri;
}

server {
    listen 443 ssl http2;
    server_name api-ia.tudominio.com;

    ssl_certificate /etc/letsencrypt/live/api-ia.tudominio.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/api-ia.tudominio.com/privkey.pem;

    # Verificación de API Key obligatoria
    if ($es_token_valido = 0) {
        return 401 '{"error": "Acceso no autorizado: Bearer API Key inválida o ausente"}
';
    }

    # Límites de cuerpo de petición para prompts largos o subida de imágenes multimodales
    client_max_body_size 50M;

    location / {
        proxy_pass http://127.0.0.1:11434;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;

        # OBLIGATORIO para streaming sin pausas
        proxy_buffering off;
        proxy_cache off;
        proxy_read_timeout 600s;
        proxy_send_timeout 600s;
    }
}

5. Blindaje del Cortafuegos con UFW

Garantizamos que solo los puertos legítimos de la web y la administración SSH respondan a peticiones de red:

sudo ufw default deny incoming
sudo ufw default allow outgoing
sudo ufw allow 22/tcp comment 'SSH Seguro'
sudo ufw allow 80/tcp comment 'HTTP Let's Encrypt'
sudo ufw allow 443/tcp comment 'HTTPS API Segura'
sudo ufw enable
sudo ufw status verbose

6. Descarga y Despliegue de Modelos de Producción

Con el servicio levantado, descargamos como usuario ollama los modelos requeridos para el negocio:

# Descarga del modelo de embeddings corporativo
sudo -u ollama ollama pull bge-m3

# Descarga del LLM conversacional y de razonamiento
sudo -u ollama ollama pull deepseek-r1:14b
sudo -u ollama ollama pull llama3.1:8b

Ahora puedes consumir la API desde cualquier lenguaje respetando la compatibilidad nativa con OpenAI:

# Test remoto seguro mediante curl con API Key
curl -X POST https://api-ia.tudominio.com/v1/chat/completions      -H "Authorization: Bearer 9f8a3c42e1d74b88bf5a23091cd5e6f7a8b9c0d1e2f3a4b5c6d7e8f9a0b1c2d3"      -H "Content-Type: application/json"      -d '{
       "model": "deepseek-r1:14b",
       "messages": [{"role": "user", "content": "Verifica que el servidor responde correctamente."}]
     }'

7. Artículos Relacionados en The Calata

Sigue ampliando la infraestructura técnica de tus servicios con nuestras guías especializadas:

Puntos Clave y Mejores Prácticas de Ingeniería

Checklist de validación técnica en producción
  • Optimización de hardware primero: Evita escalar a instancias más caras antes de aplicar técnicas de precisión reducida (FP8, AWQ, 4-bit) y reducción de activación en memoria GPU.
  • Monitorización empírica continua: Audita la asignación activa y el ancho de banda con herramientas nativas de Linux (nvidia-smi dmon, torch.cuda.memory_summary, perfiles HNSW).
  • Arquitectura modular y streaming: Desacopla la lógica de recuperación de vectores (RAG) o el servicio de inferencia mediante microservicios con soporte SSE (Server-Sent Events) para minimizar el Time-To-First-Token.
RESOLUCIÓN DE DUDAS

Preguntas Frecuentes Técnicas

Dudas habituales planteadas por ingenieros y desarrolladores en entornos de producción:

?¿Por qué es muy peligroso exponer el puerto 11434 de Ollama directamente a Internet?

Por defecto, Ollama no incluye capa de autenticación, control de acceso basado en roles ni límites de tasa (rate limiting). Si abres el puerto 11434 a internet (0.0.0.0), cualquier atacante o bot automatizado puede saturar tu GPU enviando prompts infinitos, descargar modelos arbitrarios en tu disco o extraer datos de conversaciones previas.

?¿Cómo puedo permitir que Ollama atienda múltiples peticiones simultáneas?

Añade en el archivo de configuración del servicio systemd la variable de entorno OLLAMA_NUM_PARALLEL=4 (o el número de streams concurrentes que permita la VRAM de tu GPU). Cada stream paralelo reserva una copia de KV Cache adicional en memoria.

?¿Dónde almacena Ollama los modelos descargados y cómo cambiar el disco de destino?

Por defecto, Ollama guarda los pesos en /usr/share/ollama/.ollama/models. Si tienes un disco secundario NVMe más espacioso (ej. /mnt/nvme/ollama), define la variable OLLAMA_MODELS=/mnt/nvme/ollama en la unidad systemd para evitar llenar la partición raíz.

?¿Cómo verificar que Ollama está aprovechando realmente la GPU y no la CPU?

Ejecuta ollama ps mientras el modelo genera texto o monitoriza la tarjeta con nvidia-smi. Si el proceso ollama_llama_server figura consumiendo VRAM y la columna GPU Util se incrementa al 90-100%, la aceleración por hardware está operando correctamente.

TC

Equipo Técnico y de Arquitectura · The Calata

Ingeniería Verificada

Especialistas en Inferencia de alto rendimiento, optimización de VRAM y CUDA en PyTorch, arquitecturas RAG avanzadas y evaluación de modelos Open Source. Todas las recomendaciones y scripts de código publicados en The Calata son probados en entornos Linux de producción con aceleradores Nvidia y clusters locales.

Publicidad Patrocinada