Files
2026-07-12 10:17:17 -04:00

2.0 KiB

SearXNG Deployment

Self-hosted metasearch engine — aggregates Google, Bing, DDG, etc. Hermes-native search backend. Privacy: all web searches go through your own instance instead of third-party API servers.

Port: 8888 (bound to 127.0.0.1)

Docker Compose

Location: /mnt/seagate8tb/docker/searxng/docker-compose.yml

services:
  searxng:
    image: searxng/searxng:latest
    container_name: searxng
    ports:
      - "127.0.0.1:8888:8080"
    volumes:
      - ./searxng:/etc/searxng:rw
    environment:
      - SEARXNG_BASE_URL=http://localhost:8888/
    restart: unless-stopped
cd /mnt/seagate8tb/docker/searxng
docker compose up -d

Enable JSON Format

SearXNG with use_default_settings: true has JSON disabled by default. The settings file is owned by the container user, so modify via docker exec:

docker exec searxng sh -c 'echo "search:" >> /etc/searxng/settings.yml && echo "  formats:" >> /etc/searxng/settings.yml && echo "    - html" >> /etc/searxng/settings.yml && echo "    - json" >> /etc/searxng/settings.yml'
docker restart searxng

Verify: curl -s "http://localhost:8888/search?q=test&format=json" | python3 -c "import sys,json; d=json.load(sys.stdin); print(len(d['results']))"

Hermes Integration

# Add to ~/.hermes/.env
echo 'SEARXNG_URL=http://localhost:8888' >> ~/.hermes/.env

# Set search backend
hermes config set web.search_backend searxng

SearXNG is search-only — still need an extract backend (Firecrawl free tier) for web_extract.

Maintenance

Google scraper breaks periodically when Google changes HTML. Fix: pull latest image and force-recreate:

cd /mnt/seagate8tb/docker/searxng
docker compose pull
docker compose up -d --force-recreate

Check for engine errors: docker logs searxng 2>&1 | grep -i error | tail -10

Rate limiting: Google may throttle with SearxEngineTooManyRequestsException (suspended_time=180). This is normal — SearXNG falls back to other engines automatically.