Guía de despliegue

Alojar SearXNG en un VPS: un metabuscador privado

Desplegar en un VPS Cloud →

Tutorial

Alojar SearXNG en un VPS: un metabuscador privado

Autoalojamiento10 min de lectura8 pasos

Cada búsqueda enviada a Google deja un rastro. Cada llamada a una API de búsqueda comercial engorda la factura. SearXNG resuelve las dos cosas de una vez: un metabuscador autoalojado que consulta más de 280 motores de origen y le devuelve resultados fusionados — en su VPS, bajo su control, sin coste por consulta.

Contenido· El problema: las API de búsqueda comerciales no son la respuesta1/11
  1. 01El problema: las API de búsqueda comerciales no son la respuesta
  2. 02Lo que SearXNG aporta desde la instalación
  3. 03Arquitectura: dos contenedores, menos de 512 MB de RAM
  4. 04Alojar SearXNG en un VPS, paso a paso
  5. 05Configuración avanzada de SearXNG
  6. 06Usar SearXNG como fuente de búsqueda para agentes de IA
  7. 07Asegurar y optimizar su instancia
  8. 08SearXNG vs alternativas: ¿qué motor autoalojado elegir?
  9. 09Restringir el acceso de una instancia pública
  10. 10Solución de problemas: 4 errores frecuentes
  11. 11SearXNG, la columna vertebral de búsqueda de su pila de IA

El problema: las API de búsqueda comerciales no son la respuesta

¿Está construyendo un agente de IA que necesita buscar en la web? Sus opciones se reducen a esto: pagar a Google 5 $ por cada mil consultas, chocar con los límites de tasa de la API de Bing, o pasar por la API no oficial de DuckDuckGo, que se rompe sin previo aviso. Ninguna le deja el control, y todas envían sus consultas — y las de sus usuarios — hacia servidores de terceros.

Para los equipos de desarrollo en Marruecos y en la región MENA se añade otra fricción: bloqueos regionales, filtrado y resultados procedentes de un motor centrado en Estados Unidos, a menudo fuera de lugar para una búsqueda local. Un metabuscador autoalojado sortea todo eso.

Lo que SearXNG aporta desde la instalación

  • Más de 280 motores de origen — Google, Bing, DuckDuckGo, Brave, Wikipedia, Reddit, GitHub, arXiv, YouTube, Twitter/X y cientos más, consultados simultáneamente.
  • Ningún rastreo — ni cookies, ni perfilado, ni historial conservado. La confidencialidad viene de la arquitectura: es el motor quien consulta los servicios de origen, no usted.
  • Una API JSON — añada ?format=json a una consulta y obtenga resultados explotables por una máquina. Compatible de forma nativa con Open WebUI, n8n, Flowise, LangChain y CrewAI.
  • Una caché Redis — la caché de resultados compartida aligera la carga sobre los motores de origen, y la limitación de tasa evita los abusos en las instancias públicas.
  • Licencia AGPL-3.0 — más de 33 000 estrellas en GitHub, publicaciones continuas, imagen Docker actualizada cada semana.

Arquitectura: dos contenedores, menos de 512 MB de RAM

SearXNG se ejecuta en dos contenedores Docker: el propio motor Python (menos de 256 MB de RAM) y una instancia Redis (unos 30 MB) para la caché y la limitación de tasa. Sin base de datos, sin estado persistente más allá de la caché Redis. Con 1 GB de RAM, SearXNG deja sitio de sobra para Nginx y para el sistema; un VPS de 2 GB resulta cómodo para un equipo con varios usuarios simultáneos o un tráfico sostenido de agentes de IA.

Alojar SearXNG en un VPS, paso a paso

  1. Contrate un VPS

    Elija un VPS Cloud ServOrbit con al menos 1 GB de RAM (Ubuntu 22.04). El aprovisionamiento instala Docker y Docker Compose automáticamente.

  2. Cree el archivo docker-compose.yml

    Cree el directorio /opt/searxng y coloque en él este docker-compose.yml:

    services:
      redis:
        image: redis:7-alpine
        restart: unless-stopped
        command: redis-server --save "" --appendonly no
        volumes:
          - redis-data:/data
      searxng:
        image: searxng/searxng:latest
        restart: unless-stopped
        ports:
          - "127.0.0.1:8080:8080"
        volumes:
          - ./settings:/etc/searxng:rw
        environment:
          - SEARXNG_BASE_URL=https://search.su-dominio.com/
          - SEARXNG_SECRET_KEY=CAMBIAR_ESTE_SECRETO_32_CHARS_MIN
        depends_on:
          - redis
    volumes:
      redis-data:

    Genere una clave segura con openssl rand -hex 32 y sustituya CAMBIAR_ESTE_SECRETO_32_CHARS_MIN.

  3. Configure settings.yml

    Cree el directorio ./settings y copie el archivo de configuración por defecto:

    mkdir -p /opt/searxng/settings
    docker run --rm searxng/searxng:latest cat /etc/searxng/settings.yml \
      > /opt/searxng/settings/settings.yml

    Abra settings.yml y ajuste las claves esenciales:

    search:
      formats:
        - html
        - json
    server:
      limiter: true
    redis:
      url: redis://redis:6379/0
  4. Configure Nginx como reverse proxy con TLS

    Instale Nginx y Certbot, luego cree /etc/nginx/sites-available/searxng con dos bloques server: el primero redirige HTTP a HTTPS, y el segundo escucha en el puerto 443 con certificado Let's Encrypt y reenvía las peticiones a http://127.0.0.1:8080 con las cabeceras Host, X-Real-IP, X-Forwarded-For y X-Forwarded-Proto.

    Active el sitio y obtenga el certificado: certbot --nginx -d search.su-dominio.com && nginx -t && systemctl reload nginx.

  5. Arranque los contenedores

    Desde /opt/searxng, ejecute docker compose up -d. Compruebe que ambos contenedores están en estado Up con docker compose ps.

  6. Active la API JSON y pruébela

    Verifique que json está en la lista formats de settings.yml. Pruebe desde el VPS:

    curl -s 'https://search.su-dominio.com/search?q=SearXNG+self+hosted&format=json' \
      | jq '.results[0] | {title, url, content}'

    Si la API devuelve 403, compruebe formats y reinicie el contenedor.

  7. Active el limitador de tasa anti-bots

    El limitador integrado (respaldado por Redis) bloquea a los clientes que envían demasiadas peticiones. Actívelo con limiter: true en settings.yml. Para reforzar la protección en Nginx:

    limit_req_zone $binary_remote_addr zone=searxng:10m rate=10r/m;
    # dentro de location / :
    limit_req zone=searxng burst=5 nodelay;
  8. Conecte Open WebUI o n8n

    En Open WebUI: Ajustes → Búsqueda web → Proveedor: SearXNG → URL: https://search.su-dominio.com. En n8n: nodo HTTP Request → GET a https://search.su-dominio.com/search?format=json, con la consulta en el parámetro q. Sus agentes de IA disponen ya de búsqueda web privada, actualizada y sin filtrado.

Configuración avanzada de SearXNG

Más allá de los ajustes básicos, settings.yml expone opciones que convierten SearXNG en una herramienta a medida.

Activar o desactivar motores: bajo la clave engines:, cada motor dispone de un campo disabled: true. Deshabilite los motores lentos o geo-bloqueados para acelerar las respuestas.

Formato de respuesta JSON para agentes de IA: los resultados JSON contienen results[].title, results[].url, results[].content, results[].engine y results[].score. Pase &categories=general,news para filtrar por categoría, o &language=es para español.

SafeSearch: la clave safe_search acepta 0 (desactivado), 1 (moderado) o 2 (estricto).

Idiomas y regiones: añada &language=es-ES para resultados en español de España, o &language=ar-MA para árabe marroquí.

Usar SearXNG como fuente de búsqueda para agentes de IA

El endpoint /search?q=...&format=json es el punto de entrada universal para todos los frameworks de agentes de IA.

n8n: cree un nodo *HTTP Request* en GET, URL https://search.su-dominio.com/search, con los parámetros q, format = json y opcionalmente categories = general. Un nodo *Code* posterior puede extraer $json.results.slice(0,5).map(r => r.url + ' — ' + r.content) para alimentar su LLM.

LangChain (Python): la comunidad LangChain incluye SearxSearchWrapper:

from langchain_community.utilities import SearxSearchWrapper

search = SearxSearchWrapper(
    searx_host="https://search.su-dominio.com",
    k=5
)
results = search.results("noticias IA open source", num_results=5)

Open WebUI: una vez configurada la URL en los ajustes, cada conversación puede activar la búsqueda web con un clic. Open WebUI consulta SearXNG, inyecta los extractos en el contexto del modelo y cita las fuentes automáticamente.

curl directo para scripts:

curl -s "https://search.su-dominio.com/search?q=searxng+api&format=json" \
  | jq '[.results[:3] | .[] | {title, url, content}]'

Asegurar y optimizar su instancia

Una instancia SearXNG abierta en Internet atrae rápidamente crawlers y scrapers. Aquí están los cuatro mecanismos a activar.

Rate limit Redis: con limiter: true en settings.yml, Redis cuenta las peticiones por IP en una ventana deslizante.

Autenticación HTTP Basic: para una instancia reservada a su equipo o agentes, añada en el bloque location / de Nginx:

auth_basic "SearXNG privado";
auth_basic_user_file /etc/nginx/.htpasswd;

Genere el archivo con htpasswd -c /etc/nginx/.htpasswd usuario. Los agentes de IA pasan las credenciales en la URL.

Caché Redis y TTL: Redis se configura por defecto sin persistencia (--save ""). Para ajustar el TTL, modifique la clave cache: en settings.yml: cache: {ttl: 86400} mantiene los resultados 24 horas.

Rotación de User-Agent: SearXNG rota automáticamente los User-Agents para evitar bloqueos por parte de los motores de origen.

SearXNG vs alternativas: ¿qué motor autoalojado elegir?

Desplace la tabla

CriterioSearXNGSearx (original)WhoogleBrave Search API
Fuentes agregadas280+ motores100+ motoresSolo GoogleSolo Brave
API JSON nativaSí (`?format=json`)SíNoSí (clave requerida)
RAM mínima~300 MB (con Redis)~200 MB~128 MBCero (SaaS)
Mantenimiento activoSí (2026)Abandonado (archivado)Sí (2026)Sí (SaaS)
Coste por consultaCeroCeroCero3 $ / 1.000 consultas

Restringir el acceso de una instancia pública

Si su instancia de SearXNG es accesible públicamente, añada una autenticación HTTP Basic en Nginx, o ponga limiter: true en settings.yml (Redis es necesario para el limitador). Para un uso reservado a los agentes de IA, puede desactivar por completo la interfaz HTML y exponer únicamente el punto de acceso JSON: retire html de formats y restrinja el acceso directo desde un navegador.

Solución de problemas: 4 errores frecuentes

1. 429 Too Many Requests — bloqueo por un motor de origen: Google o Bing ha detectado un volumen anormal y ha baneado temporalmente la IP de su VPS. Síntoma: SearXNG devuelve resultados de todos los motores menos uno. Solución inmediata: deshabilite el motor afectado en settings.yml y espere 2-6 horas.

2. Error: Connection refused to Redis (127.0.0.1:6379): el contenedor SearXNG intenta conectar a Redis en 127.0.0.1 en vez del nombre de servicio redis. Corrección: verifique que settings.yml tiene url: redis://redis:6379/0.

3. 403 Forbidden en /search?format=json: la API JSON está desactivada. Solución: verifique que formats: contiene json y reinicie el contenedor con docker compose restart searxng.

4. Instancia lenta (> 5 s por consulta): demasiados motores activos o motores geo-bloqueados llegando al timeout. Diagnóstico: docker compose logs searxng | grep timeout. Solución: reduzca los motores activos a los 5-8 más relevantes y ajuste request_timeout: 3.0 en settings.yml.

SearXNG, la columna vertebral de búsqueda de su pila de IA

SearXNG se ha impuesto como el motor de búsqueda web de las pilas de IA autoalojadas. Open WebUI, n8n, Flowise, LangChain, CrewAI y la mayoría de los marcos de orquestación de modelos cuentan con una integración nativa. El esquema es siempre el mismo: su modelo estima que necesita una información actualizada, llama a su punto de acceso SearXNG con una consulta, recibe una tabla JSON de resultados — títulos, URL, extractos — y la usa para fundamentar su respuesta.

Esto elimina tres molestias con un solo despliegue: se acabó la facturación por consulta, se acabaron las fugas de datos hacia Google o Bing, y se acabó el límite de tasa alcanzado a las 2 de la madrugada mientras su agente encadena un lote de búsquedas.

La búsqueda privada, en su propio servidor

Despliegue SearXNG en un VPS ServOrbit y dé a su equipo y a sus agentes de IA un punto de búsqueda privado — sin rastreo, sin claves de API, sin facturación por consulta.

¿Necesita ayuda?

Consulte nuestro centro de ayuda y nuestra FAQ, o contacte con nuestro equipo: llamada, WhatsApp o correo electrónico. Soporte en francés, inglés y árabe.

Escribir por WhatsAppse abre en una pestaña nueva