
Fredy Acuna / December 8, 2025 / 9 min read
Esta guía te muestra cómo instalar correctamente el modelo de IA Gemma de Google en Dokploy usando Ollama. He corregido varios problemas de un tutorial existente para hacerlo listo para producción con almacenamiento persistente y manejo de concurrencia.
Antes de comenzar, asegúrate de tener:
Gemma es la familia de modelos de IA de código abierto de Google. Ollama es una herramienta que hace simple ejecutar modelos de IA localmente—maneja la descarga, servicio y endpoints de API automáticamente.
Cuando ejecutas ollama serve, inicia un servidor HTTP en el puerto 11434 que acepta solicitudes y devuelve respuestas generadas por IA. Esto es lo que desplegaremos.
El modelo gemma3:270m es ligero (~270MB), así que funciona en hardware mínimo. Elige tu configuración según tu caso de uso:
Usa esto para proyectos personales o instancias VPS económicas:
| Recurso | Especificación |
|---|---|
| CPU | 1 vCPU |
| RAM | 1 GB |
| Almacenamiento | 5 GB |
| GPU | No requerida |
Nota: Esto maneja 1 usuario rápidamente. Si 2 personas consultan al mismo tiempo, la segunda espera unos segundos.
Usa esto si esperas 5-10 usuarios concurrentes o bots automatizados consultando frecuentemente:
| Recurso | Especificación |
|---|---|
| CPU | 2 vCPUs |
| RAM | 2-4 GB |
| Almacenamiento | 5-10 GB |
| GPU | No requerida |
¿Por qué más RAM? Las conversaciones largas aumentan la ventana de contexto (memoria de mensajes anteriores), lo que puede disparar el uso de memoria. 2GB es la zona segura.
¿Por qué 2 vCPUs? El servidor HTTP manejando solicitudes JSON y el motor de inferencia compiten por CPU. 2 núcleos mantienen la API responsiva mientras el modelo piensa.
Si quieres respuestas de mejor calidad, considera modelos más grandes como gemma:2b (1.7GB) o gemma:7b (requiere más RAM/GPU).
gemma-serviceVe a la pestaña General, luego haz clic en Raw. Pega la siguiente configuración:
version: '3.8'
services:
ollama:
image: ollama/ollama:latest
container_name: ollama
restart: unless-stopped
environment:
- OLLAMA_HOST=0.0.0.0
- OLLAMA_ORIGINS=*
- OLLAMA_NUM_PARALLEL=4
- OLLAMA_MAX_LOADED_MODELS=1
volumes:
- ollama_storage:/root/.ollama
# Descomenta si tienes GPU disponible:
# deploy:
# resources:
# reservations:
# devices:
# - driver: nvidia
# count: 1
# capabilities: [gpu]
# Opcional: Interfaz web tipo ChatGPT
open-webui:
image: ghcr.io/open-webui/open-webui:main
container_name: open-webui
volumes:
- open-webui:/app/backend/data
depends_on:
- ollama
environment:
- OLLAMA_BASE_URL=http://ollama:11434
- WEBUI_SECRET_KEY=tu-clave-secreta-aqui
restart: unless-stopped
volumes:
ollama_storage:
open-webui:
Importante: No configuramos
OLLAMA_MODELScomo variable de entorno. Configurarlo cambia la ruta de almacenamiento y rompe la persistencia. En su lugar, descargamos modelos manualmente después del despliegue (Paso 4).
Haz clic en Save.
Desglosemos qué hace esta configuración lista para producción:
volumes:
- ollama_storage:/root/.ollama
Sin esto, perderías los modelos descargados cada vez que el contenedor se reinicia. El tutorial original omitió esto—lo que significa que tendrías que re-descargar el modelo después de cada despliegue.
- OLLAMA_NUM_PARALLEL=4
- OLLAMA_MAX_LOADED_MODELS=1
| Variable | Propósito |
|---|---|
OLLAMA_NUM_PARALLEL=4 | Permite 4 solicitudes concurrentes (4 usuarios al mismo tiempo) |
OLLAMA_MAX_LOADED_MODELS=1 | Mantiene solo 1 modelo en memoria (ahorra RAM) |
- OLLAMA_ORIGINS=*
Permite solicitudes desde cualquier origen. Útil si estás llamando a la API desde una aplicación frontend.
Necesitas agregar dominios para los servicios que quieres exponer. Ve a la pestaña Domains en tu servicio.
ollamaOpción A: Generar URL traefik.me (Recomendado para Pruebas)
Haz clic en el botón Generate en Dokploy. Creará automáticamente una URL como:
main-ollama-wv9tts-9dc2f9-209-112-91-61.traefik.me
Esto te da HTTPS instantáneo sin ninguna configuración DNS.
Opción B: Usar Tu Propio Dominio
Ingresa tu subdominio: ollama.tudominio.com
Asegúrate de tener un registro DNS A apuntando a la IP de tu servidor Dokploy.
11434 (este es el puerto que Ollama expone internamente)/Si incluiste el servicio Open WebUI, agrega otro dominio para él:
open-webuichat.tudominio.com)8080Ahora, aquí está el paso crítico—debes descargar el modelo manualmente:
ollamaollama pull gemma3:270m
Espera a que la descarga termine. Puedes verificar que funcionó con:
ollama list
Deberías ver:
NAME ID SIZE MODIFIED
gemma3:270m abc123... 270MB 2 minutes ago
Visita tu dominio en un navegador. Deberías ver:
Ollama is running
Ahora prueba la API con curl:
curl https://ollama.tudominio.com/api/generate -d '{
"model": "gemma3:270m",
"prompt": "¿Por qué el cielo es azul?",
"stream": false
}'
Deberías recibir una respuesta JSON con la respuesta generada por IA.
curl -X POST https://ollama.tudominio.com/api/generate \
-H "Content-Type: application/json" \
-d '{
"model": "gemma3:270m",
"prompt": "Explica Docker en una oración.",
"stream": false
}'
curl -X POST https://ollama.tudominio.com/api/generate \
-H "Content-Type: application/json" \
-d '{
"model": "gemma3:270m",
"prompt": "Escribe un haiku sobre programación.",
"stream": false,
"options": {
"temperature": 0.7,
"num_predict": 50
}
}'
curl -X POST https://ollama.tudominio.com/api/chat \
-H "Content-Type: application/json" \
-d '{
"model": "gemma3:270m",
"messages": [
{"role": "user", "content": "¿Qué es machine learning?"}
],
"stream": false
}'
Si incluiste Open WebUI en tu Docker Compose, ahora tienes una interfaz tipo ChatGPT para interactuar con tus modelos.
https://chat.tudominio.com)gemma3:270m del menú desplegable de modelosOpen WebUI proporciona:
Tip: Puedes descargar modelos adicionales directamente desde la configuración de Open WebUI, o vía la terminal del contenedor Ollama.
Si obtienes model not found, olvidaste descargarlo. Entra al contenedor y ejecuta:
ollama pull gemma3:270m
Revisa los logs en Dokploy. Causas comunes:
OLLAMA_NUM_PARALLEL si la RAM es limitada (prueba OLLAMA_NUM_PARALLEL=1 o 2)11434 para Ollama, 8080 para Open WebUI)Una vez que tu configuración esté funcionando, puedes cambiar modelos fácilmente:
# Dentro de la terminal del contenedor
ollama pull gemma:2b # 1.7 GB, mejor calidad
ollama pull gemma:7b # 4.2 GB, requiere más RAM
ollama pull llama3.2:3b # Modelo alternativo
Actualiza tus llamadas a la API para usar el nuevo nombre de modelo.
Para despliegues en producción:
tu-clave-secreta-aqui con una cadena aleatoria fuerte para Open WebUIOLLAMA_ORIGINS=* a dominios específicos si no usas Open WebUIAhora tienes un servicio de IA Gemma listo para producción corriendo en Dokploy con:
Esta configuración es significativamente más robusta que exponer puertos directamente y maneja patrones de uso del mundo real.