Cómo instalar SearXNG + Open WebUI en Docker: búsqueda web para tu IA, en contenedores separados

🐳 Docker · 🏠 Self-Host · 🔎 Privacidad

SearXNG + Open WebUI en Docker: búsqueda web para tu IA, en contenedores separados

Dale acceso a internet a Open WebUI con un metabuscador autoalojado, sin API keys ni cuotas. Cada servicio en su propio compose y comunicados por una red Docker compartida.

Ver el vídeo en YouTube · Suscríbete al canal GENBYTE

¿Qué vamos a montar?

SearXNG es un metabuscador libre que consulta varios motores (DuckDuckGo, Brave, Startpage…) sin rastrearte. Open WebUI es la interfaz web para chatear con tus modelos de IA. Al unirlos, tu modelo puede buscar información actual en internet y citar fuentes, todo desde tu propio servidor.

Lo haremos con dos composes independientes (uno por servicio) y una red Docker externa llamada ai. Así puedes actualizar o reiniciar cada uno por separado y reutilizar la red para futuros servicios.

Ventajas

Sin API keysNo dependes de cuotas ni de servicios de pago.
PrivacidadLas búsquedas salen desde tu servidor, sin perfilado.
Servicios desacopladosSi SearXNG se reinicia, Open WebUI sigue funcionando.
LigeroFunciona bien en una Raspberry Pi (arm64).
Buscador propioSearXNG trae su interfaz web: úsalo también desde el navegador.
Red reutilizableLa red ai sirve para Ollama, n8n y lo que añadas.

Requisitos

  • Docker y Docker Compose instalados.
  • Open WebUI ya funcionando (o listo para desplegar).
  • Un puerto libre en el host para la interfaz de SearXNG (opcional). En este ejemplo, el 8082.

Instalación en 3 pasos

Paso 1: crear la red compartida (una sola vez)

docker network create ai

Paso 2: desplegar SearXNG

Estructura de carpetas y configuración:

mkdir -p ~/docker/searxng/searxng cd ~/docker/searxng cat > searxng/settings.yml <<'EOF' use_default_settings: true server: secret_key: "CAMBIA_ESTO" limiter: false image_proxy: false search: formats: - html - json EOF sed -i "s|CAMBIA_ESTO|$(openssl rand -hex 32)|" searxng/settings.yml
Importante: el formato json es imprescindible. Sin él, Open WebUI recibe un error 403 al buscar.

~/docker/searxng/docker-compose.yml

services: searxng: container_name: searxng image: searxng/searxng:latest ports: - "8082:8080" # host:interno (cambia el 8082 si está ocupado) volumes: - ./searxng:/etc/searxng networks: - ai restart: unless-stopped networks: ai: external: true

Si solo lo vas a usar desde Open WebUI, elimina el bloque ports y no publicarás nada.

docker compose up -d

Paso 3: conectar Open WebUI a la red

~/docker/open-webui/compose.yml

services: openwebui: container_name: open-webui image: ghcr.io/open-webui/open-webui:main ports: - "7000:8080" environment: - WEBUI_SECRET_KEY=${WEBUI_SECRET_KEY} - WEBUI_AUTH=True - WEBUI_REGISTER=false - ENABLE_WEB_SEARCH=true - WEB_SEARCH_ENGINE=searxng - SEARXNG_QUERY_URL=http://searxng:8080/search?q=<query> volumes: - ./open-webui-data:/app/backend/data networks: - ai restart: unless-stopped networks: ai: external: true
docker compose up -d

Activar la búsqueda en Open WebUI

Las variables de entorno solo se leen en el primer arranque. Si Open WebUI ya tenía configuración guardada, manda la interfaz:

  1. Panel de administración → Ajustes → Búsqueda web
  2. Activa el interruptor Búsqueda web.
  3. Motor de búsqueda: searxng
  4. URL de consulta: http://searxng:8080/search?q=<query>
  5. Resultados: 3-5. Concurrencia: 1-2 en una Raspberry Pi.
  6. Guardar.
Usa siempre el puerto interno 8080 en esa URL. El 8082 es solo el puerto publicado en el host para entrar tú desde el navegador; dentro de la red ai los contenedores se hablan por el 8080.

Después, en un chat nuevo, activa la búsqueda con el botón + o el icono del globo.

Comprobar que todo funciona

# Contenedores conectados a la red docker network inspect ai --format '{{range .Containers}}{{.Name}} {{end}}' # Open WebUI llega a SearXNG y recibe JSON docker exec open-webui curl -s "http://searxng:8080/search?q=test&format=json" | head -c 200

Y desde el navegador, la interfaz de SearXNG: http://IP-DE-LA-RASPBERRY:8082

Casos de uso

  • Preguntar a tu modelo por noticias o versiones recientes de software.
  • Usar SearXNG como buscador privado de todo tu hogar.
  • Montar asistentes que consulten documentación actualizada antes de responder.

Gestión y mantenimiento

# Actualizar (dentro de cada carpeta) docker compose pull && docker compose up -d # Logs docker logs searxng --tail 50 docker logs open-webui --tail 50

Problemas frecuentes

SíntomaSolución
curl devuelve 403Falta json en search.formats. Añádelo y ejecuta docker compose restart searxng.
Could not resolve host: searxngLos contenedores no comparten red. Revisa networks: - ai en ambos composes.
SearXNG no arranca por permisossudo chown -R 977:977 ~/docker/searxng/searxng
Las variables del compose no hacen efectoConfigúralo en Ajustes → Búsqueda web. Alternativa: ENABLE_PERSISTENT_CONFIG=False (los cambios desde la interfaz no se conservarán).
No aparece el motor searxngImagen antigua: docker compose pull openwebui && docker compose up -d
Un motor te bloqueaDesactívalo en settings.yml y deja DuckDuckGo, Brave o Startpage.
Consejo de seguridad: no abras el puerto de SearXNG a internet. Para acceder desde fuera de casa usa una VPN (WireGuard, Tailscale) o un proxy inverso con HTTPS y autenticación.

Compose único vs. contenedores separados

OpciónVentajaInconveniente
Un solo composeMás simple, red automáticaSe reinician y actualizan juntos
Composes separados + red aiIndependientes y reutilizablesHay que crear la red una vez

Referencias oficiales

Apoya el canal

Si este tutorial te ha servido, suscríbete al canal de GENBYTE y comparte el post. Hay más tutoriales de Docker, homelab y self-hosting cada semana.

Sígueme en redes

Comentarios

Entradas populares de este blog

Solución al error: «user is not in the sudoers file» en Debian

NAS SYNOLOGY DSM 7.1 en VMware ESXI - Guía instalación y configuración Synology DSM 7.1 en VMWARE

Multisesión RDP en Windows 10 Pro