
SearXNG is a privacy-friendly metasearch engine you can run yourself.
Table of Contents
- Why SearXNG
- VPS specs
- Install overview
- Instance settings
- Maintenance
- Hardening tips
- Related guides
1. Why SearXNG
Fast, private search for your team or community.
2. VPS specs
Modest CPU and RAM; SSD for speed.
3. Install overview
Use Docker; configure engines and HTTPS. Create an .env for secrets, map a persistent volume, and place SearXNG behind Nginx Proxy Manager or Caddy for TLS. Keep logs modest and set appropriate rate limits.
4. Instance settings
Tune rate limits and enable privacy options. Disable tracking engines you do not need, reduce outgoing.requests concurrency on small VPS plans, and enable safe search where appropriate for communities.
5. Maintenance
Update regularly; monitor usage. Track CPU and RAM footprints, rotate logs, and back up configuration. Consider Prometheus or Uptime Kuma for basic availability checks.
6. Hardening tips
Run behind a reverse proxy with TLS, enforce strong admin credentials, and set sensible request rate limits. Keep the instance private for small teams, or publish public instances with clear usage policies.
7. Related guides
- Nginx Proxy Manager on a VPS
- Uptime Kuma on a VPS
- Vaultwarden on a VPS
- Immich Photo Server
- See hosting options at /vps-hosting
See /vps-hosting for plans.
Why self-host SearXNG
SearXNG is a metasearch engine: it queries Google, Bing, DuckDuckGo, Brave, Wikipedia, etc. and aggregates results. Your IP never reaches the upstream search engines; they only see your VPS.
What you get:
- No tracking, no profile building.
- No filter bubble (results not personalized to your history).
- Custom search engine for browsers, replacing Google as default.
- API access for scripts and Discord/Slack bots.
What you don't get:
- Better ranking than Google. Aggregation is convenience, not improvement.
- Total anonymity. Your VPS IP is the new identifier; rotate or share.
VPS sizing
| Daily searches | vCPU | RAM | Bandwidth |
|---|---|---|---|
| Personal use (< 100/day) | 1 | 512 MB | minimal |
| Family / small group (100-1000) | 1 | 1 GB | a few GB/month |
| Public instance (1k-10k) | 2 | 2 GB | 50+ GB/month |
SearXNG itself is light. The bottleneck at scale is upstream rate-limits (Google starts CAPTCHAing a single IP after 50-100 queries/min).
docker-compose
services:
searxng:
image: searxng/searxng:latest
container_name: searxng
ports:
- "127.0.0.1:8080:8080"
volumes:
- ./searxng:/etc/searxng
environment:
- SEARXNG_BASE_URL=https://search.example.com/
- INSTANCE_NAME=my-searxng
restart: always
redis:
image: redis:7-alpine
restart: always
command: redis-server --save "" --appendonly no
Reverse proxy 8080 with Caddy:
search.example.com {
reverse_proxy 127.0.0.1:8080
}
settings.yml essentials
server:
secret_key: "GENERATE_64_HEX_CHARS"
limiter: true
image_proxy: true
search:
safe_search: 0
autocomplete: "duckduckgo"
default_lang: "en"
ui:
default_theme: simple
infinite_scroll: false
limiter: true activates the bot detection / rate limiter. Without it a public instance gets scraped within a day.
Public vs private instance decision
| Need | Run private | Run public |
|---|---|---|
| Personal anonymity | yes | no |
| Family / friends | yes | no |
| Helping the privacy ecosystem | no | yes (with rate limits, abuse handling, terms of service) |
Public instances need:
- TLS (Let's Encrypt via Caddy).
- Limiter with Redis.
- Anti-bot rules in nginx/Caddy (rate-limit by IP).
- A privacy policy.
Common breakage
| Symptom | Cause | Fix |
|---|---|---|
| Many engines return "no results" | upstream rate-limits | enable more engines, randomize order |
| CAPTCHA pages from Google | over the limit | add more engines, use private instance |
| Redis connection refused | wrong host name in settings | use service name "redis" not "localhost" |
| Browser doesn't add as default search | OpenSearch xml not exposed | set SEARXNG_BASE_URL to https URL |
Browser integration
Firefox and Chromium auto-detect SearXNG via OpenSearch. Once visited, right-click the URL bar > Add Search Engine. Set as default for distraction-free, ad-free, profile-free search.
