Live read-only probes on Dankclaw (BatchMode ssh, 2026-10-19):
- system/dankclaw.md: full 32-container census added (authentik IdP,
prometheus/grafana/loki/alloy/alertmanager monitoring, pihole, ntfy,
seerr, hermes stack, anubis, frank-tts :7772 all undocumented);
dragoon pool corrected 401,408 @ ctx 200,704 (was conflated);
zealot corrected to PrismML build 10777, Ternary-Bonsai-2-9B
PQ2_0-MTP, 2x262,144 over one 524,288 pool, f16 K+V (doc claimed
build 10754, 27B, 2x200,704)
- caddy/index.md: v2.11.7 (in-container ), deduped
caddyfile listing
- gitea: version 1.27.3 probed via API; systemd-gitea network + rootless
100999 mapping confirmed live (gitea-server attaches systemd-gitea;
dank subuid 100000:65536); index See-Also de-duplicated
- searxng-tuning.md: live instance section (ghcr image, valkey:9-alpine,
marreta netns-sharing explains duplicate port maps); POLICY DRIFT FLAG:
tuned engine policy (google/bing disabled, verified 2026-08-16) is NOT
live — /config now shows all 262 engines enabled; upstream settings.yml
count corrected 388@master; limiter table already matched source
- vpn-routing.md: verify snippet fixed — gluetun image ships no curl;
health server is 127.0.0.1:9999/health ('OK'), :8000 is the CONTROL
server (404s on health paths); correct probes provided
Refs #29
6.2 KiB
type, title, description, tags, verified, timestamp, resource
| type | title | description | tags | verified | timestamp | resource | |||||
|---|---|---|---|---|---|---|---|---|---|---|---|
| concept | SearXNG Tuning | Configuration decisions for a fast, private, useful self-hosted SearXNG instance. |
|
2026-10-19 | 2026-08-11 | https://docs.searxng.org |
SearXNG Tuning
SearXNG is a metasearch engine. It aggregates hundreds of upstream search
services into one result set (upstream settings.yml defines 388 engine
entries at master, probed 2026-10-19; the live fleet instance loads 262).
Configuration lives in settings.yml. The recommended deployment is Docker
Compose (or Podman Quadlet) with a Valkey container.
This page lists the settings that matter for speed, privacy, and useful results.
Fleet instance: the harness
web/searxngprovider calls the instance at192.168.0.143:8081(UI) /:8082(JSON API) on dankclaw. The pi-era Pi Web Access called the same host.
Live instance (probed 2026-10-19)
User Quadlet stack on dankclaw: searxng.container
(ghcr.io/searxng/searxng:latest) + searxng-valkey.container
(docker.io/valkey/valkey:9-alpine) + gluetun.container (VPN egress; the
containers share its network namespace, which is why podman ps shows :8081/
:8082 on several names) + marreta/marreta_browser. limiter.toml: enabled,
pass_searxng_org: true.
Policy drift flag: this page's tuned engine policy (google and bing
disabled; DuckDuckGo/Wikipedia/Google News enabled — verified via /config on
2026-08-16) is NOT live: /config on 2026-10-19 reports all 262 engines
enabled, google and bing included. Either the settings override was lost in
the 2026-10 stack reinstatement or the policy was deliberately dropped.
Confirm with Frank before re-applying.
Plan the Deployment
graph LR
A[Browser or Agent] --> B[SearXNG container]
B --> C[Valkey cache + limiter]
B --> D[Engine request pool]
D --> E[Google News]
D --> F[DuckDuckGo]
D --> G[Wikipedia]
Deploy with the official Docker Compose file. It ships a searxng-valkey container (valkey/valkey:9-alpine). Valkey replaced Redis as the default cache. Mount your config at ./core-config/:/etc/searxng.
services:
searxng:
image: docker.io/searxng/searxng:latest
ports:
- "8081:8080"
volumes:
- ./core-config/:/etc/searxng/:Z
depends_on:
- searxng-valkey
searxng-valkey:
image: docker.io/valkey/valkey:9-alpine
restart: always
Core Settings
use_default_settings: true
server:
secret_key: "change-this" # or $SEARXNG_SECRET
base_url: "http://192.168.0.143:8081/" # or $SEARXNG_BASE_URL
limiter: true
method: "POST"
search:
default_lang: "en"
default_locale: "en-US"
safe_search: 0
formats:
- html
- json
Change secret_key. Set base_url to the public address. Use POST for privacy. Enable the json format for the agent.
Rate Limiting
Enable the limiter and point it at Valkey. Without a limiter, an upstream engine can block SearXNG's IP.
server:
limiter: true
valkey:
url: valkey://searxng-valkey:6379/0
The limiter uses a sliding window per IP:
| Window | HTML limit | JSON/API limit |
|---|---|---|
| 20 seconds | 15 | 4 per 3600 s |
| 600 seconds | 150 | 4 per 3600 s |
Suspicious IPs get a much lower budget (2 in 20 s, 10 in 600 s). The agent that hits the JSON endpoint repeatedly can trip the 4-per-hour API limit. Back off or make the agent part of a trusted group.
Outgoing Pool
outgoing:
request_timeout: 3.0
max_request_timeout: 10.0
pool_connections: 100
pool_maxsize: 20
enable_http2: true
keepalive_expiry: 5.0
retries: 3
A short request_timeout keeps results snappy. enable_http2 multiplexes connections. More retries makes results more reliable but slower.
Engine Selection
Default engine state (current SearXNG):
| Engine | Default state | Note |
|---|---|---|
| DuckDuckGo | Enabled | Reliable general search |
| Wikipedia | Enabled | Encyclopedia lookups |
| Google News | Enabled | News results |
| Google (main) | Inactive | Cloudflare CAPTCHA often blocks it |
| Bing | Disabled | Blocked upstream |
Keep only the engines you need. Fewer engines means faster responses.
use_default_settings:
engines:
keep_only:
- duckduckgo
- wikipedia
- google news
Make an engine private to one agent with a token:
engines:
- name: arch wiki
engine: archlinux
tokens: ['my-secret-token']
Useful Plugins
plugins:
searx.plugins.unit_converter.SXNGPlugin:
active: true
searx.plugins.calculator.SXNGPlugin:
active: true
searx.plugins.self_info.SXNGPlugin:
active: true
The hostnames plugin filters or rewrites results. It needs a separate hostnames: block:
hostnames:
remove:
- '(.*\.)?facebook.com$'
high_priority:
- '(.*\.)?wikipedia.org$'
JSON API for the Agent
The agent uses the JSON format. Confirm that it returns structured data:
curl 'http://192.168.0.143:8081/search?q=test&format=json'
The response contains results, query, number_of_results, and suggestions. The /config endpoint lists engine availability.
Verify the Instance
- Open the HTML interface and run a test query.
- Confirm that the
jsonformat returns data. - Confirm that the limiter page appears on rapid repeats.
Citations
- SearXNG documentation: https://docs.searxng.org
- SearXNG outgoing settings: https://docs.searxng.org/admin/settings/settings_outgoing.html
- SearXNG engine settings: https://docs.searxng.org/admin/settings/settings_engines.html
- SearXNG Valkey settings: https://docs.searxng.org/admin/settings/settings_valkey.html
- SearXNG limiter: https://docs.searxng.org/admin/searx.limiter.html
- SearXNG plugins: https://docs.searxng.org/admin/settings/settings_plugins.html
- Docker Compose install: https://docs.searxng.org/admin/installation-docker.html
See Also
- VPN Routing for SearXNG — Route the outbound path through a VPN.
- Agentic Search Best Practices — Use the JSON format well.