Privacy-respecting meta search engine. Aggregates results from Google, Bing, DuckDuckGo, Wikipedia, and many others without tracking.

Access

  • URL: https://search.janvv.nl
  • Config location: /data/searxng/settings.yml (on CT 121)
  • Data location: /lxcdata/searxng/ (on Proxmox host)

Overview

Container: CT 121 IP: 192.168.144.64 Port: 8080

DNS (Pi-hole)

Hostname Resolves to Purpose
searxng 192.168.144.64 Direct SSH/container access
searxng.local 192.168.144.64 Direct SSH/container access
search.janvv.nl 192.168.144.31 Lanproxy (internal HTTPS routing)

Configuration

  • SEARXNG_SECRET — required random secret (set in .env)
  • BASE_URL — set to https://search.janvv.nl/
  • Settings file /data/searxng/settings.yml is created on first run. Edit to enable/disable search engines.

Docker Compose: ~/dev/homelab-docker/searxng/

Backup

  • What: /lxcdata/searxng/ (settings.yml and any customizations)
  • Restore: Re-deploy container, restore /lxcdata/searxng/

Maintenance

# Update
pct exec 121 -- bash -c 'cd /opt/homelab-docker/searxng && docker compose pull && docker compose up -d'

# Logs
pct exec 121 -- bash -c 'cd /opt/homelab-docker/searxng && docker compose logs -f'

Troubleshooting

JSON API returns 403

Symptom: curl 'http://searxng:8080/search?format=json&q=test' → HTTP 403

Root cause: The formats: list in settings.yml under search: only has html. JSON is not enabled.

Fix:

# Check current formats
ssh jan@server 'sudo pct exec 121 -- grep -A3 "^  formats:" /data/searxng/settings.yml'

# Add json if missing, then restart
ssh jan@server 'sudo pct exec 121 -- sed -i "/^  formats:/a\    - json" /data/searxng/settings.yml'
ssh jan@server 'sudo pct exec 121 -- bash -c "cd /opt/homelab-docker/searxng && docker compose restart"'

# Verify
curl -s -o /dev/null -w '%{http_code}' 'http://searxng:8080/search?format=json&q=test'
# Expected: 200

Container crash-loop with limiter errors

Symptom: Container restarting, logs show "The limiter requires Valkey"

Root cause: public_instance: true forces the limiter which needs Valkey (not installed).

Fix: Keep public_instance: false and ensure SEARXNG_LIMITER=false in docker-compose environment. Never use docker run directly — always go through compose.

Links