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 tohttps://search.janvv.nl/- Settings file
/data/searxng/settings.ymlis 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
- SearXNG documentation
- Related: cloudflared, lanproxy, network