Introducción a SearXNG

Hoxe imos ver como instalar na Raspberry o meta buscador SearXNG. Este meta buscador libre ofrece as seguintes carácterísticas:

  • Privacidade: tanto se usamos unha instancia oficial, como a nosa, non se comparten IPs, nin o historial de buscas cos motores de busca consultados. Tamén bloquea as coockies de seguimento que entregan os motores tradicionais. Isto evita a modificación dos resultados baseados no perfil de usuario.
  • Evita redireccións: os resultados aparecen como un enlace directo ao sitio, non cun enlace de redirección como fai, por exemplo, Google.
  • Busca en caché: se a páxina resultado está cacheada en arquive.org, accederemos a esta versión arquivada en vez de ao sitio.
  • Filtros de busca: ademáis da busca xeral tamén teremos outras buscas, como arquivos, imaxes, TIC, mapas, música, noticias, ciencia, redes sociais e vídeos.
  • Busca centralizada: SearXNG, unha vez configurado, ofrece resultados de busca duns oitenta e dous buscadores diferentes. Por exemplo, Google, Bing, DuckDuckGo, etc.
  • Afinar as buscas: ofrece unha serie de etiquetas para poder filtrar máis as buscas. Estas etiquetas teñen que ir antes dos termos de busca.
    • !categoría: busca na categoría especificada en vez das predeterminadas.
    • ?categoría: busca na categoría especificada ademáis das predeterminadas.
    • !motor: especifica o motor a usar en lugar dos predeterminados.
    • ?motor: usa o motor a usar ademáis dos predeterminados.
    • :idioma: busca os resultados no idioma indicado en troques do predeterminado.

Os operadores ! e ? poden usarse máis dunha vez, por exemplo para engadir varios motores.

Neste artigo vou explicar como ter a nosa instancia privada de SearXNG. Pero tamén podemos usar algunha das instancias oficiais

Instalación de SearXNG usando Docker-compose

Para o proxecto de aplicacións auto aloxadas, instalaremos o SearXNG usando docker. Neste caso non agardo incompatibilidades futuras no proxecto, xa que é un servizo sen dependencias con outros servizos auto aloxados. E tampouco almaceno información que poida ser incompatible con futuras versións. Así pois usarei a imaxe oficial. E directamente collerei a latest, para estar actualizado cada vez que constrúa a instancia. Así pois sería searxng/searxng:latest.
Polo tanto o noso docker-compose.yaml quedaría do seguinte xeito.

version: "3.7"
services:
  searxng:
    image: searxng/searxng:latest
    container_name: searxng
    hostname: searxng
    init: true
    networks:
      - proxy
    volumes:
      - ../../searxng:/etc/searxng:rw
    environment:
      - SEARXNG_BASE_URL=http://${SEARXNG_BASE_URL:-localhost}/${SEARXNG_BASE_PATH:-searxng}
      - OVERWRITEHOST
      - OVERWRITEPROTOCOL
      - SEARXNG_PORT=${SEARXNG_PORT:-80}
      - TZ=Europe/Madrid
    cap_drop:
      - ALL
    cap_add:
      - CHOWN
      - SETGID
      - SETUID
    restart: unless-stopped
    labels:
      - "traefik.enable=true"
      - "traefik.http.routers.searxng.entrypoints=http"
      - "traefik.http.routers.searxng.rule=Host(`${SEARXNG_BASE_URL:-localhost}`) && PathPrefix(`/${SEARXNG_BASE_PATH:-searxng}`)"
networks:
  proxy:
    name: proxy
    external: true

Para explicar un pouco o ficheiro. Na primeira liña indicamos a versión de docker-compose a utilizar. Neste caso a 3.7. Despois indicamos os servizos que imos instanciar nel, agora mesmo tan só SearXNG. Máis adiante se fose necesario, existe a opción de facer que o servizo corra en conxunto cun Redis, para cachear as buscas. Agora mesmo non o vexo necesario.
Como dixen antes usaremos a imaxe latest do proxecto, e definimos o nome do contenedor e do hostname como searxng.
Ao igual que vimos noutro artigo, con init: true o que facemos e iniciar un proceso pai antes dos outros servizos do contenedor. Así se hai algún erro, este proceso adoptará aqueles que queden horfos, facendo máis doada a sua xestión.
O servizo usará a rede proxy que é a que inicia o servizo Traefik. Como podemos ver máis abaixo na sección de networks, xa lle indicamos que é unha rede externa.

Vínculamos un cartafol neste caso da Raspberry, co volume do servizo, así no caso de ter que gardar algo, como algunha configuración farao no equipo local.

E agora xa as variables de entorno, despois pegarei o contido do ficheiro .env.dist.

  • SEARXNG_BASE_URL e a url para acceder ao servizo.
  • OVERWRITEHOST sobrescribimos o nome do host co que lle indiquemos.
  • OVERWRITEPROTOCOL o protocolo que imos usar para conectar contra a web.
  • SEARXNG_PORT con que porto imos traballar. Se non espeficiamos collerá o por defecto.
  • TZ=Europe/Madrid a zona horaria na que estamos.

Nas seguintes liñas, as seccións que comezan por cap, estámos a indicarlle os permisos. Primeiro quitámoslle todo-los permisos ao usuario do contenedor. E despois indicamos cales destes permisos queremos que teña. Neste caso permitimos que mude o propietario dos ficheiros, mude o seu GID, co que pode acceder ao ficheiros de calquer grupo no contenedor e o mesmo para o seu UID.

Despois indicamos que queremos que o servizo esté permantentemente erguido, salvo que nós mesmos o paremos.

E por último a parte de Traefik. O primeiro que facemos e habilitar o enrutamento por Traefik. Dicímoslle que queremos que o punto de entrada para a ruta de searxng sexa http. Que é unha das entradas configuradas en Traefik. Só por recordar, teño http e https. E xa á fin establecemos a última regra, que indica a ruta para acceder. Neste caso será o host / ruta. Por exemplo, http://raspberry.local/searxng.

Algo interesante a comentar deste ficheiro docker-compose é a forma de sustituír as variables. Se nos fixamos, moitas delas, aparecen como ${VARIABLE:-algo}. Con isto estamos a indicar que queremos que aplicar o valor da variable, pero que se non está definida, entón aplique o valor que vai despois de :-.

Ficheiro .env.dist

SEARXNG_BASE_URL=raspberry.local
SEARXNG_BASE_PATH=searxng
OVERWRITEPROTOCOL=http
OVERWRITEHOST=raspberry.local
SEARXNG_PORT=8081
SEARXNG_BIND_ADDRESS=0.0.0.0

Con esta configuración para acceder ao servizo web dende outro equipo, na nosa rede, escribiríamos http://raspberry.local:8081/searxng. E xa estaríamos dentro, como podemos ver na seguinte imaxe:
Imaxe da páxina principal de SearXNG

E aquí cun resultado de busca, tal vez dun próximo artigo:
Imaxe da páxina de resutlados de SearXNG

Conclusión

Con este servizo teño a posibilidade de facer buscas evitando os seguimentos, podo buscar ao mesmo tempo en ducias de motores e podo acceder ás versións almacenadas en arquive.org.
Así teño xa montado o primer servizo auto aloxado na miña Raspberry. A este seguirano outros, ca fin de obter máis control sobre os meus datos. Evitando delegalos a terceiros para que comercien con eles.

Bibliografía

Artigo de Searx na Wikipedia: https://es.wikipedia.org/wiki/Searx
Sitio oficial Searx: https://searx.github.io/searx/