Servidores Linux

Instalar un LLM local con Ollama y Open WebUI: requisitos de CPU, HTTPS y API

7 pasos 18 min de lectura 31 vistas 0
Contenido

Puede ejecutar un asistente privado al estilo de ChatGPT en su propio servidor sin GPU. Ollama descarga y ejecuta modelos de lenguaje de pesos abiertos como Qwen, Llama y Gemma detrás de una API sencilla, y Open WebUI añade una interfaz de chat con usuarios, historial y carga de documentos. Como todo se ejecuta en su servidor, las consultas y los documentos nunca salen de él. Esta guía explica cómo elegir el tamaño del servidor, instalar Ollama, escoger un modelo que funcione bien en CPU, añadir Open WebUI con HTTPS y usar la API desde sus propias aplicaciones.

La API de Ollama no tiene autenticación. No exponga nunca el puerto 11434 a internet: manténgalo en localhost o detrás del firewall, y publique únicamente Open WebUI a través de HTTPS y con cuentas de usuario. Los servidores Ollama expuestos se escanean y se explotan de forma activa.

Paso 1: Elegir el tamaño de servidor adecuado

En CPU, la cantidad de RAM determina qué modelos puede cargar, y el número y la velocidad de los núcleos determinan la rapidez con la que aparecen las respuestas. Los modelos cuantizados (las versiones Q4 predeterminadas de Ollama) necesitan aproximadamente la siguiente memoria:

Tamaño del modeloRAM para el modeloServidor recomendadoUso típico
1–4B parámetrosunos 1–3 GB4 núcleos, 8 GB de RAMClasificación, respuestas cortas, pruebas
7–8B parámetrosunos 5–6 GB8+ núcleos, 16 GB de RAMAsistente de chat, resúmenes, base de conocimiento interna
14B parámetrosunos 9–10 GB16+ núcleos, 32 GB de RAMMejor razonamiento y redacción, más lento en CPU

Con modelos de 7–8B en una CPU multinúcleo moderna, cuente con unas pocas palabras por segundo: suficiente para un equipo pequeño o tareas en segundo plano, demasiado lento para cientos de usuarios simultáneos. Para un uso más intensivo, elija un servidor dedicado con más núcleos y RAM en lugar de un VPS pequeño, y no ejecute en la misma máquina otros servicios que consuman mucha memoria.

Paso 2: Instalar Ollama

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

systemctl status ollama --no-pager
ollama --version
ss -lntp | grep 11434        # should show 127.0.0.1:11434

El instalador crea un usuario de sistema ollama y un servicio systemd que escucha en 127.0.0.1:11434. Los modelos se guardan en /usr/share/ollama/.ollama/models; asegúrese de que ese disco tenga espacio suficiente (un modelo de 7B ocupa unos 4–5 GB).

Paso 3: Descargar y probar un modelo

# Strong multilingual model, good at Chinese and English
ollama pull qwen2.5:7b

# Smaller and faster alternative
ollama pull llama3.2:3b

ollama run qwen2.5:7b "Explain in three sentences what a reverse proxy is."
ollama list        # downloaded models
ollama ps          # loaded models and how much memory they use

Explore la biblioteca de modelos de ollama.com para encontrar otros modelos y tamaños. Empiece con un modelo de 3B o 7B, compruebe la velocidad y pase a uno mayor solo si las respuestas no son lo bastante buenas.

Paso 4: Instalar Open WebUI

Open WebUI se ejecuta en Docker (consulte nuestra guía de instalación de Docker). El contenedor debe poder llegar a Ollama en el host, así que haga que Ollama escuche en todas las interfaces y asegúrese de que el firewall bloquee el puerto 11434 desde el exterior.

# Let Ollama accept connections from Docker containers
mkdir -p /etc/systemd/system/ollama.service.d
cat > /etc/systemd/system/ollama.service.d/override.conf <<'EOF2'
[Service]
Environment="OLLAMA_HOST=0.0.0.0:11434"
EOF2
systemctl daemon-reload && systemctl restart ollama

# Allow Docker networks to reach Ollama, block everyone else (ufw: rules are matched in order)
ufw allow from 172.16.0.0/12 to any port 11434 proto tcp
ufw deny 11434/tcp
# firewalld: simply do not open 11434; Docker's own zone already lets containers reach the host

# Start Open WebUI, reachable only from the server itself until Nginx is in front
docker run -d --name open-webui --restart always \
  -p 127.0.0.1:3000:8080 \
  --add-host=host.docker.internal:host-gateway \
  -e OLLAMA_BASE_URL=http://host.docker.internal:11434 \
  -v open-webui:/app/backend/data \
  ghcr.io/open-webui/open-webui:main

Desde otra máquina, confirme que http://YOUR_SERVER_IP:11434 no responde. Si responde, corrija el firewall antes de continuar.

Paso 5: Publicar Open WebUI por HTTPS

Apunte un subdominio como ai.example.com al servidor, obtenga un certificado (consulte SSL gratis con Certbot o acme.sh) y configure el proxy hacia el contenedor. Open WebUI transmite las respuestas mediante WebSockets, así que mantenga las cabeceras de upgrade y un tiempo de espera de lectura largo.

server {
    listen 443 ssl;
    http2 on;
    server_name ai.example.com;

    ssl_certificate     /etc/letsencrypt/live/ai.example.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/ai.example.com/privkey.pem;
    client_max_body_size 50m;      # document uploads

    location / {
        proxy_pass         http://127.0.0.1:3000;
        proxy_http_version 1.1;
        proxy_set_header   Upgrade $http_upgrade;
        proxy_set_header   Connection "upgrade";
        proxy_set_header   Host $host;
        proxy_set_header   X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header   X-Forwarded-Proto $scheme;
        proxy_read_timeout 600s;
    }
}

Abra el sitio y cree la primera cuenta de inmediato: se convertirá en la cuenta de administrador. Después, en la configuración de administración, desactive el registro de nuevos usuarios o exija la aprobación del administrador, y cree usted mismo las cuentas de su equipo.

Paso 6: Usar la API desde sus aplicaciones

Ollama ofrece su propia API y un endpoint compatible con OpenAI, así que muchas herramientas y SDK funcionan con solo cambiar la URL base. Llámela desde el mismo servidor, o desde sus otros servidores a través de una red privada o un túnel SSH.

# Native API
curl http://127.0.0.1:11434/api/generate -d '{
  "model": "qwen2.5:7b",
  "prompt": "Write a short product description for a Tokyo VPS.",
  "stream": false
}'

# OpenAI-compatible API (base URL http://127.0.0.1:11434/v1, any API key)
curl http://127.0.0.1:11434/v1/chat/completions \
  -H "Content-Type: application/json" \
  -d '{"model":"qwen2.5:7b","messages":[{"role":"user","content":"Hello"}]}'

Las herramientas de flujos de trabajo como Dify y n8n pueden usar Ollama como proveedor de modelos; consulte requisitos de servidor para Dify, n8n y agentes de IA.

Paso 7: Optimizar el rendimiento

  • Mantener el modelo cargado: de forma predeterminada, un modelo se descarga de la memoria tras 5 minutos de inactividad. Defina Environment="OLLAMA_KEEP_ALIVE=1h" en el archivo override para evitar que las primeras respuestas sean lentas.
  • Solicitudes en paralelo: OLLAMA_NUM_PARALLEL=2 permite que dos solicitudes compartan un modelo cargado; cada ranura adicional necesita más RAM.
  • Longitud de contexto: los documentos largos necesitan una ventana de contexto mayor, que también consume más memoria. Auméntela solo cuando sea necesario.
  • Dejar RAM libre: si el servidor empieza a usar swap, las respuestas se vuelven extremadamente lentas. Use ollama ps y free -h para comprobarlo.

Preguntas frecuentes

¿De verdad es utilizable un servidor solo con CPU?

Sí, para herramientas internas, preguntas y respuestas sobre documentos, redacción de borradores, traducción y tareas por lotes con modelos de 3B–8B. Para muchos usuarios simultáneos o modelos grandes, necesitará más núcleos y RAM, o hardware con GPU.

¿Qué modelo es el mejor para chino?

La familia Qwen se ha entrenado intensamente en chino e inglés y es una buena opción predeterminada. Pruebe primero qwen2.5:7b y después compárelo con otros modelos usando sus propias preguntas.

¿Mis datos salen del servidor?

No. Ollama y Open WebUI procesan las consultas y los documentos localmente. Solo la descarga de modelos y de actualizaciones se conecta a internet.

¿Sigue sin resolverlo después de seguir estos pasos? Abra un ticket de soporte y el equipo técnico de IMIDC, disponible 24/7, le ayudará. Incluya la IP del servidor, la versión del sistema operativo, la CPU y la RAM, el modelo que usa y la salida completa del error para que podamos localizar el problema más rápido.

¿Fue útil la respuesta?

Tutoriales relacionados