- Fixed 4 broken markdown links (bad relative paths in See Also sections) - Corrected n8n port binding to 127.0.0.1:5678 (matches actual deployment) - Updated SnapRAID article with actual majorhome paths (/majorRAID, disk1-3) - Converted 67 Obsidian wikilinks to relative markdown links or plain text - Added YAML frontmatter to 35 articles missing it entirely - Completed frontmatter on 8 articles with missing fields Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
94 lines
2.4 KiB
Markdown
94 lines
2.4 KiB
Markdown
---
|
|
title: "SearXNG — Private Self-Hosted Search"
|
|
domain: opensource
|
|
category: alternatives
|
|
tags: [searxng, search, privacy, self-hosting, docker]
|
|
status: published
|
|
created: 2026-04-02
|
|
updated: 2026-04-02
|
|
---
|
|
# SearXNG — Private Self-Hosted Search
|
|
|
|
## Problem
|
|
|
|
Every search query sent to Google, Bing, or DuckDuckGo is logged, profiled, and used to build an advertising model of you. Even "private" search engines are still third-party services with their own data retention policies.
|
|
|
|
## Solution
|
|
|
|
[SearXNG](https://github.com/searxng/searxng) is a self-hosted metasearch engine. It queries multiple search engines simultaneously on your behalf — without sending any identifying information — and aggregates the results. The search engines see a request from your server, not from you.
|
|
|
|
Your queries stay on your infrastructure.
|
|
|
|
---
|
|
|
|
## Deployment (Docker)
|
|
|
|
```yaml
|
|
services:
|
|
searxng:
|
|
image: searxng/searxng:latest
|
|
container_name: searxng
|
|
restart: unless-stopped
|
|
ports:
|
|
- "8090:8080"
|
|
volumes:
|
|
- ./searxng:/etc/searxng
|
|
environment:
|
|
- SEARXNG_BASE_URL=https://search.yourdomain.com/
|
|
```
|
|
|
|
SearXNG requires a `settings.yml` in the mounted config directory. Generate one from the default:
|
|
|
|
```bash
|
|
docker run --rm searxng/searxng cat /etc/searxng/settings.yml > ./searxng/settings.yml
|
|
```
|
|
|
|
Key settings to configure in `settings.yml`:
|
|
|
|
```yaml
|
|
server:
|
|
secret_key: "generate-a-random-string-here"
|
|
bind_address: "0.0.0.0"
|
|
|
|
search:
|
|
safe_search: 0
|
|
default_lang: "en"
|
|
|
|
engines:
|
|
# Enable/disable specific engines here
|
|
```
|
|
|
|
### Caddy reverse proxy
|
|
|
|
```
|
|
search.yourdomain.com {
|
|
reverse_proxy localhost:8090
|
|
}
|
|
```
|
|
|
|
---
|
|
|
|
## Using SearXNG as an AI Search Backend
|
|
|
|
SearXNG integrates directly with Open WebUI as a web search provider, giving your local AI access to current web results without any third-party API keys:
|
|
|
|
**Open WebUI → Settings → Web Search:**
|
|
- Enable web search
|
|
- Set provider to `searxng`
|
|
- Set URL to `http://searxng:8080` (internal Docker network) or your Tailscale/local address
|
|
|
|
This is how MajorTwin gets current web context — queries go through SearXNG, not Google.
|
|
|
|
---
|
|
|
|
## Why Not DuckDuckGo?
|
|
|
|
DDG is better than Google for privacy, but it's still a centralized third-party service. SearXNG:
|
|
|
|
- Runs on your own hardware
|
|
- Has no account, no cookies, no session tracking
|
|
- Lets you choose which upstream engines to use and weight
|
|
- Can be kept entirely off the public internet (Tailscale-only)
|
|
|
|
---
|