Refresh of the open-core distribution from the private tree. Included since the previous snapshot: - Mail module (ADR-158/159/160/169): composer, labels, scheduling, attachments, reply-tokens, IMAP/SMTP bridge + migrations 079-083 - Crawler-readable SSR for /blog and public spaces (ADR-190): blogSeo, publicDocsSeo, per-space SEO prefs, blog index/post pages - Registration policy + referral/promo settings (ADR-183/188) - Message translation + language detection (ADR-185) - Reddit connector for the agent-tool surface Excised from the public distribution (unchanged policy): infrastructure topology and host config, internal ops scripts, DB cleanup snapshots, business documents, throwaway debug scripts, and two private product lines (SC-SIM simulator, personal one-off tools). Real host addresses are replaced with placeholders; credential-shaped literals are redacted. Frontend build verified green on this tree.
82 lines
3.2 KiB
YAML
82 lines
3.2 KiB
YAML
# SearXNG settings for the CRM web_search backend.
|
|
# Key point: `search.formats` MUST include `json` — web-tools.js queries
|
|
# ?format=json and errors "is JSON format enabled in settings.yml?" otherwise.
|
|
use_default_settings: true
|
|
|
|
general:
|
|
instance_name: "godcrm-search"
|
|
debug: false
|
|
|
|
server:
|
|
# Overridden by SEARXNG_SECRET env at runtime; placeholder for standalone use.
|
|
secret_key: "change_me_via_env"
|
|
limiter: false
|
|
image_proxy: true
|
|
method: "GET"
|
|
|
|
search:
|
|
safe_search: 0
|
|
autocomplete: ""
|
|
# Pin locale to en-US. Without this, engines (esp. bing) geo-localize to the
|
|
# Amsterdam server IP and, when they're the sole survivor of a slow-engine
|
|
# drop, return Dutch/generic noise (rfc2017.nl, nl.wikipedia) instead of the
|
|
# actual result. See web-tools.js searxngSearch — it sends no `language` param.
|
|
default_lang: "en-US"
|
|
formats:
|
|
- html
|
|
- json
|
|
|
|
ui:
|
|
static_use_hash: true
|
|
|
|
# Engine pinning (2026-08-30). The upstream default set enables only
|
|
# brave / duckduckgo / google / startpage for the `general` category — and on
|
|
# this VPS IP ddg+startpage sit on permanent CAPTCHA while brave gets
|
|
# "Suspended: too many requests" after a handful of calls. When brave is
|
|
# suspended the whole query returns [] with HTTP 200, which reads to the caller
|
|
# as "no such thing on the internet" instead of "upstream refused".
|
|
# Everything below is `disabled: false` on an engine that ships disabled by
|
|
# default. Keep the survivors measured, not assumed: `?engines=<name>` per call.
|
|
#
|
|
# Measured 2026-08-30 on RU pharma control query "Герофарм инсулин гларгин
|
|
# патент Sanofi", one engine per call:
|
|
# bing 10 · seznam 10 · yandex 15 · brave 19 → kept
|
|
# mojeek 0 (also 0 on an EN control) · google 0 (silent, no error)
|
|
# presearch/mwmbl timeout · qwant/yep/dogpile "access denied"
|
|
# yahoo "HTTP protocol error" · duckduckgo/startpage CAPTCHA
|
|
# Re-measure before trusting this list again — engine health tracks the VPS IP,
|
|
# not the config.
|
|
#
|
|
# Second pass, same day: "non-empty" is not "usable". bing answers every query
|
|
# with exactly 10 results that have nothing to do with it (Dropbox/Microsoft
|
|
# landing pages for a RU pharma query, under both en-US and ru-RU) — a soft
|
|
# bot-block that looks like success and eats top-5 slots, which is worse for a
|
|
# recall benchmark than an honest zero. Disabled. Weights push the two engines
|
|
# that actually answer to the top of the merged ranking; web-tools.js slices
|
|
# the first `limit` rows, so ranking order is what the caller ever sees.
|
|
engines:
|
|
- name: bing
|
|
disabled: true
|
|
- name: yandex
|
|
disabled: false
|
|
weight: 3
|
|
- name: brave
|
|
weight: 3
|
|
- name: seznam
|
|
disabled: false
|
|
weight: 0.4
|
|
# Enabled upstream by default, dead on this IP: every call costs a request
|
|
# (and up to request_timeout) and returns nothing.
|
|
- name: duckduckgo
|
|
disabled: true
|
|
- name: startpage
|
|
disabled: true
|
|
|
|
# Loopback-only, single consumer (godcrm) — no bot/rate limiting needed.
|
|
outgoing:
|
|
# Was 6.0 — mojeek (our best result engine) intermittently exceeded it and got
|
|
# dropped, collapsing results to bing-only. 10s keeps slow engines alive.
|
|
request_timeout: 10.0
|
|
max_request_timeout: 12.0
|
|
pool_connections: 100
|
|
pool_maxsize: 20
|