Instalar Ollama en un VPS
Instala Ollama en un VPS Ubuntu 22.04 con GPU NVIDIA, expón la API REST con HTTPS vía Caddy y sirve Llama 3, Qwen y DeepSeek compatibles con OpenAI.
Ollama es la forma más rápida de ejecutar LLMs en tu propio servidor. Expone una API REST compatible con OpenAI: cambias la URL y tu código sigue funcionando.
Cuándo usar Ollama
- Desarrollo / experimentación: cambiar de modelo (Llama 3, Qwen, DeepSeek) con 1 comando
- Inferencia ligera: hasta ~5 llamadas concurrentes
- Embeddings con
nomic-embed-textobge-m3 - Equipos pequeños que todavía no quieren montar Triton/vLLM
Para alta concurrencia (10+ requests simultáneas), cambia a vLLM.
Requisitos previos
- VPS con GPU NVIDIA (recomendamos GPU Estação o GPU Estúdio)
- Ubuntu 22.04 LTS
- Driver NVIDIA + CUDA 12.x ya instalados
- Dominio propio (
ollama.sua-empresa.com.br)
Confirma que la GPU es visible:
nvidia-smi
Salida esperada (ejemplo con RTX 4090):
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 535.154.05 Driver Version: 535.154.05 CUDA Version: 12.2 |
+-----------------------------------------------------------------------------+
| GPU Name | Memory-Usage | GPU-Util |
| 0 NVIDIA RTX 4090 | 0MiB / 24576MiB | 0% |
+-----------------------------------------------------------------------------+
Paso 1: instalar Ollama
curl -fsSL https://ollama.com/install.sh | sh
El script detecta la GPU e instala el soporte CUDA automáticamente. Confirma:
ollama --version
systemctl status ollama
El servicio ya está ejecutándose en localhost:11434.
Paso 2: descargar y probar un modelo
ollama pull llama3.1:8b
ollama run llama3.1:8b "Em uma frase, por que o céu é azul?"
La primera vez descarga ~5 GB. Después se ejecuta directamente.
Paso 3: exponer la API con HTTPS
Por defecto, Ollama escucha en 127.0.0.1:11434, solo local. Para acceder desde fuera, lo expondremos vía Caddy con HTTPS.
Configura Ollama para escuchar en todas las interfaces:
sudo systemctl edit ollama.service
Agrega:
[Service]
Environment="OLLAMA_HOST=0.0.0.0:11434"
Environment="OLLAMA_ORIGINS=*"
Reinicia:
sudo systemctl restart ollama
Instala Caddy:
sudo apt install -y caddy
Configura /etc/caddy/Caddyfile:
ollama.sua-empresa.com.br {
reverse_proxy localhost:11434
# Autenticación simple por API key (Caddy header_up matcher)
@authorized header Authorization "Bearer rh_ollama_token_secreto_grande"
handle @authorized {
reverse_proxy localhost:11434
}
handle {
respond "Unauthorized" 401
}
}
Reinicia Caddy:
sudo systemctl restart caddy
Espera a que el DNS se propague y Caddy emita el SSL. Prueba:
curl https://ollama.sua-empresa.com.br/api/tags \
-H "Authorization: Bearer rh_ollama_token_secreto_grande"
Respuesta: la lista de modelos descargados.
Paso 4: usar la API compatible con OpenAI
Ollama expone /v1/chat/completions compatible con OpenAI:
curl https://ollama.sua-empresa.com.br/v1/chat/completions \
-H "Authorization: Bearer rh_ollama_token_secreto_grande" \
-H "Content-Type: application/json" \
-d '{
"model": "llama3.1:8b",
"messages": [
{"role": "system", "content": "Responda em português, breve."},
{"role": "user", "content": "O que é Q4_K_M?"}
]
}'
Paso 5: usarlo en n8n
Agrega un nodo OpenAI Chat Model con:
- Credential personalizada: API Key =
rh_ollama_token_secreto_grande - Base URL (en advanced):
https://ollama.sua-empresa.com.br/v1 - Model:
llama3.1:8b
Listo: tu n8n habla con tu GPU local.
Embeddings
Para RAG, descarga un modelo de embeddings:
ollama pull nomic-embed-text
Úsalo en código:
curl https://ollama.sua-empresa.com.br/api/embed \
-H "Authorization: Bearer rh_ollama_token_secreto_grande" \
-d '{
"model": "nomic-embed-text",
"input": "Texto para gerar embedding"
}'
Devuelve un vector de 768 dimensiones.
Monitoreo
Observa el uso de la GPU en tiempo real:
watch -n 1 nvidia-smi
Y los logs de Ollama:
journalctl -u ollama -f
Para Grafana, expón métricas vía nvidia-dcgm-exporter:
docker run -d --gpus all --rm \
-p 9400:9400 \
nvcr.io/nvidia/k8s/dcgm-exporter:3.3.0-3.2.0-ubuntu22.04
Solución de problemas
| Problema | Causa probable | Solución |
|---|---|---|
cuda: out of memory | Modelo demasiado grande | Usa una cuantización menor (:Q4, :Q5_K_M) |
| Respuesta lenta (~5 tok/s) | Se está ejecutando en CPU | Revisa nvidia-smi durante la inferencia: si marca 0%, la GPU no se está usando |
connection refused en el puerto 11434 | OLLAMA_HOST no se aplicó | sudo systemctl daemon-reload && sudo systemctl restart ollama |
| Caddy no emite el SSL | El DNS no se propagó | dig ollama.sua-empresa.com.br debe devolver la IP del VPS |
Próximos pasos
- Servir Llama 3 con vLLM (para alta concurrencia)
- RAG con Qdrant + LangChain (Ollama + base vectorial)
- Stack n8n + EvolutionAPI (reemplaza el nodo OpenAI por tu Ollama)
Última actualización: