Autohostatjar el teu propi cercador amb SearxNG
SearxNG és un metabuscador que afegeix resultats de múltiples motors sense emmagatzemar dades personals. Autohostatjar-lo significa executar la teva pròpia instància, controlant privacitat, personalització i disponibilitat. Aquest enfocament és ideal quan no vols dependre de tercers o busques filtrar resultats segons les teves necessitats.
En implementar SearxNG en la teva infraestructura, tens flexibilitat per ajustar-lo a diferents entorns: ús personal, equips petits, xarxes corporatives o fins i tot com un servei públic dins d’una comunitat. No obstant això, no és un substitut exacte de Google o Bing: alguns motors poden requerir API keys, i la rellevància o cobertura varia. A més, la responsabilitat sobre seguretat i manteniment recau sobre l’ operador.
Aquesta guia aborda el desplegament real i operatiu, des d’instal·lació fins a manteniment, incloent configuració avançada, seguretat, optimització i solució de problemes. La idea és que puguis implementar i mantenir el teu cercador sense haver de buscar més referències disperses ni enfrontar-te a problemes comuns sense solució clara.
1. Requisits previs i preparació de l’entorn
Recursos mínims recomanats
SearxNG no és gaire exigent, però l’experiència millora amb recursos adequats. Per a una instància personal o petita:
- CPU: mínim 1 nucli modern (2+ recomanat).
- RAM: mínim 512 MB, preferible 1 GB o més.
- Disc: espai per a logs i caché, mínim 1 GB lliure.
Per a ús corporatiu o amb molts usuaris, la CPU ha d’escalar segons concurrència (4 nuclis o més) i almenys 2–4 GB de RAM.
Sistema operatiu
SearxNG funciona sobre Linux principalment. Distribucions provades:
- Debian 11 o 12 (estable, amb paquets recents).
- Ubuntu LTS (20.04, 22.04).
- Fedora 37 +.
- CentOS Stream 9 o Rocky Linux.
En sistemes menys comuns, assegura’t que Python 3.9+ estigui disponible i de poder instal·lar dependències.
Dependències
- Python 3.9 o superior.
- pip, virtualenv (si instal·les nadiu).
- Docker i Docker Compose (si tries aquesta via).
- Un servidor web per a proxy invers (Nginx, Caddy, Traefik).
Preparació
- Reserva un usuari dedicat per executar SearxNG (recomanat per a instal·lacions natives).
- Configura un firewall bàsic per restringir accés només als ports necessaris.
- Si fas servir VPS, assigna un domini o subdomini per al servei i apunta DNS correctament.
2. Mètodes d’instal·lació: visió general
SearxNG ofereix dos mètodes principals per a instal·lació:
2.1 Instal·lació amb Docker
Avantatges:
- Ràpida, reproduïble, aïllada del sistema.
- Actualització senzilla amb docker-compose pull.
- Gestió de dependències automàtic.
Desavantatges:
- Requereix instal·lar i gestionar Docker.
- Menys flexible per a personalitzacions profundes en entorn base.
2.2 Instal·lació nativa (Python + virtualenv)
Avantatges:
- Control total sobre entorn i configuració.
- Fàcil integració en serveis systemd per a producció.
- Millor per a debugging i ajustos fins en codi.
Desavantatges:
- Major complexitat inicial.
- Dependències i actualitzacions manuals.
3. Instal·lació amb Docker pas a pas
3.1 Descàrrega i arxiu docker-compose.yml
La manera més ràpida és fer servir l’arxiu oficial:
version: "3"
services:
searxng:
image: searxng/searxng:latest
container_name: searxng
restart: unless-stopped
ports:
- "8080:8080"
volumes:
- ./searxng-data:/etc/searxng
Aquesta configuració:
- Exposa el port 8080.
- Munta la carpeta local ./searxng-data per guardar configuració i dades persistents.
3.2 Explicació clau del docker-compose.yml
- image: indica la imatge oficial que inclou tot SearxNG llest per fer servir.
- restart: unless-stopped: reinicia el contenidor automàticament en fallades o reboot.
- volums: assegura que la configuració no es perdi en esborrar el contenidor.
- ports: assigna el port local per accedir a la interfície web.
3.3 Arrencada i comprovació
docker compose up -d
docker logs -f searxng
Amb això, podràs accedir a http://localhost:8080. Si el fas servir en VPS, reemplaça localment per la IP o domini.
4. Instal·lació nativa pas a pas
4.1 Crear usuari dedicat
sudo adduser --system --group searxng
4.2 Clonar repositori
sudo mkdir /opt/searxng
sudo chown searxng:searxng /opt/searxng
sudo -u searxng git clone https://github.com/searxng/searxng.git /opt/searxng
4.3 Crear entorn virtual i instal·lar dependències
sudo -u searxng python3 -m venv /opt/searxng/venv
sudo -u searxng /opt/searxng/venv/bin/pip install --upgrade pip setuptools wheel
sudo -u searxng /opt/searxng/venv/bin/pip install -r /opt/searxng/requirements.txt
4.4 Configurar systemd
Arxiu /etc/systemd/system/searxng.service:
[Unit]
Description=SearxNG search engine
After=network.target
[Service]
User=searxng
Group=searxng
WorkingDirectory=/opt/searxng
ExecStart=/opt/searxng/venv/bin/python /opt/searxng/searx/webapp.py
Restart=on-failure
[Install]
WantedBy=multi-user.target
Activar servei:
systemctl daemon-reload
systemctl enable --now searxng
4.5 Comprovar estat
systemctl status searxng
journalctl -u searxng -f
Accedeix a http://ip-servidor:8080.
5. Configuració bàsica en settings.yml
5.1 Ubicació i estructura de l’ arxiu
- En instal·lació Docker, la configuració sol estar en el volum muntat, típicament ./searxng-data/settings.yml.
- En instal·lació nativa, l’arxiu està en /opt/searxng/searx/settings.yml o /etc/searxng/settings.yml si s’ha configurat així.
Aquest arxiu controla el comportament general del cercador: idiomes, motors actius, categories, dreceres i més.
5.2 Idioma i regió
Dins de settings.yml, els paràmetres més importants per a idioma i regió estan en:
general:
language: es
region: ES
- language: defineix l’ idioma per a la interfície i resultats quan sigui possible.
- region: indica als motors que usin filtres geogràfics o regionals (per exemple, Google).
Fes servir codis ISO 639-1 per a idioma i codis ISO 3166-1 alpha-2 per a regió.
5.3 Motors i categories
La configuració per defecte inclou molts motors (Google, Bing, DuckDuckGo, etc.). Per desactivar-ne un, simplement coménta-ho o canvia a enabled: false.
Exemple:
search:
engines:
google:
enabled: false
bing:
enabled: true
Categories permeten agrupar motors per tipus (general, imatges, vídeos, etc.) i limitar recerques.
categories:
general:
- google
- bing
images:
- flickr
- pixabay
Si només vols resultats generals, limita a general.
5.4 Dreceres
Les dreceres són una forma ràpida de buscar en un motor concret des de la barra principal.
Exemple per buscar a Wikipedia amb drecera w:
shortcuts:
w: wikipedia
Després, a la barra, escriure web farà la recerca directament a Wikipedia.
5.5 Consells per editar settings.yml
- Fes servir sempre un editor que validi YAML per evitar errors d’indentació.
- Fes còpies de seguretat abans de modificar.
- Després dels canvis, reinicia el servei perquè tinguin efecte (docker restart searxng o systemctl restart searxng).
- Per provar canvis menors, pots fer servir la interfície web, però no tot està allà.
6. Integració d’APIs i claus de servei
6.1 Per què algunes claus són necessàries?
Motors com Google o Bing limiten accés públic i requereixen API keys per fer-los servir sense bloquejos o errors 429 (massa peticions).
6.2 On aconseguir claus
- Cerca personalitzada de Google: console.cloud.google.com -> API i serveis -> Credencials.
- API de cerca del Bing: azure.microsoft.com -> Cognitive Services.
- Altres motors poden requerir registres similars.
6.3 Com configurar claus a settings.yml
Evita deixar claus en text pla dins l’arxiu, especialment si comparteixes o fas servir Docker. L’ideal és:
- Fer servir variables d’entorn i referenciar-les a l’arxiu amb ${VAR_NAME}.
- A Docker, defineix variables en .env o a l’arxiu docker-compose.yml amb:
environment:
- GOOGLE_API_KEY=${GOOGLE_API_KEY}
I a settings.yml:
search:
engines:
google:
api_key: ${GOOGLE_API_KEY}
6.4 Protegir les claus
- No pujar-les a repositoris públics.
- Limitar els permisos a l’ API (IP, quotes).
- Renovar-les periòdicament.
7. Seguretat de la instància
7.1 secret_key i CSRF
SearxNG fa servir una secret_key per validar formularis i protegir contra atacs CSRF. Canvia-la sempre, evita la que ve per defecte.
Ubicació a settings.yml:
server:
secret_key: "clau_aleatoria_llarga"
Genera una amb:
python3 -c "import secrets; print(secrets.token_hex(32))"
7.2 Proxy invers amb Nginx i TLS
Per exposar SearxNG de forma segura, l’habitual és posar-lo darrere d’un proxy invers que:
- Redirigeix trànsit HTTP a HTTPS.
- Gestiona certificats TLS (Let’s Encrypt).
- Afegeix headers de seguretat.
Exemple bàsic /etc/nginx/sites-available/searxng.conf:
server {
listen 80;
server_name searx.example.com;
location /.well-known/acme-challenge/ {
root /var/www/letsencrypt;
}
location / {
return 301 https://$host$request_uri;
}
}
server {
listen 443 ssl http2;
server_name searx.example.com;
ssl_certificate /etc/letsencrypt/live/searx.example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/searx.example.com/privkey.pem;
location / {
proxy_pass http://localhost:8080;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
Recorda obtenir certificat amb Certbot:
certbot certonly --webroot -w /var/www/letsencrypt -d searx.example.com
7.3 Proxy invers amb Caddy (alternativa més senzilla)
Caddy automàticament obté i renova certificats TLS:
Arxiu Caddyfile:
searx.example.com {
reverse_proxy localhost:8080
}
Inicia amb:
caddy run --config /ruta/a/Caddyfile
7.4 Control d’ accés i autenticació
Per evitar que la instància sigui pública sense restriccions, afegeix:
- Autenticació HTTP bàsica (Nginx amb auth_basic).
- Restriccions IP amb allow i deny.
- Firewall a nivell de servidor.
Exemple per a autenticació bàsica en Nginx:
location / {
auth_basic "Zona privada";
auth_basic_user_file /etc/nginx/.htpasswd;
proxy_pass http://localhost:8080;
}
Generar .htpasswd amb:
sudo apt install apache2-utils
htpasswd -c /etc/nginx/.htpasswd usuari
7.5 Limitació de tasa (rate limiting)
Evita abusos amb limit_req a Nginx:
limit_req_zone $binary_remote_addr zone=searx_limit:10m rate=5r/s;
server {
...
location / {
limit_req zone=searx_limit burst=10 nodelay;
proxy_pass http://localhost:8080;
}
}
Això limita a 5 peticions per segon per IP.
8. Optimització de rendiment
8.1 Ajust de fils i connexions
A settings.yml:
server:
workers: 4
Determina el nombre de processos per servir peticions. Per a CPUs amb 4 nuclis, 4 workers pot ser òptim.
8.2 request_timeout
Defineix el temps màxim per esperar respostes de motors externs, per defecte 15 segons:
search:
request_timeout: 10
Reduir-lo millora la latència però pot descartar resultats de motors lents.
8.3 Desactivar motors lents
Si algun motor és persistent a alentir resultats, desactíval o limíta’l a categories específiques.
8.4 Caché de resultats
SearxNG no té caché persistent integrat. Es pot fer servir un revers proxy amb caché, com Varnish o Nginx amb proxy_cache.
Exemple bàsic amb Nginx:
proxy_cache_path /var/cache/nginx/searx levels=1:2 keys_zone=searx_cache:10m max_size=100m inactive=10m use_temp_path=off;
server {
...
location / {
proxy_cache searx_cache;
proxy_cache_valid 200 10m;
proxy_pass http://localhost:8080;
}
}
8.5 Mesurament i profiling
Eines útils:
- curl -w per mesurar temps de resposta.
- top i htop per monitoritzar càrrega.
- Logs per detectar errors i colls d’ ampolla.
9. Personalització avançada
9.1 Temes i aparença
SearxNG permet modificar la interfície amb temes o plantilles Jinja2.
- La carpeta de templates es troba normalment a /opt/searxng/searx/templates.
- Pots copiar i modificar el tema predeterminat per adaptar-lo a colors corporatius o preferències.
És important no trencar l’estructura de l’HTML ni eliminar blocs clau com el formulari o scripts.
9.2 Filtratge de resultats
Pots excloure dominis específics o tipus de contingut no desitjats editant settings.yml:
search:
blocked_domains:
- example.com
- tracker.site
Aquesta llista ajuda a evitar resultats no rellevants o amb risc de privacitat.
9.3 Afegir motors personalitzats
SearxNG suporta motors personalitzats definits amb expressions URL.
Exemple per afegir DuckDuckGo amb paràmetres personalitzats:
search:
engines:
duckduckgo:
base_url: https://duckduckgo.com/html/
method: GET
params:
q: "{query}"
Això requereix coneixements bàsics de com funciona el motor extern i el seu format d’ URL.
10. Monitorització i manteniment
10.1 Logs
- A Docker: docker logs searxng
- A la instal·lació nativa, els logs poden anar a journalctl -u searxng o arxius configurats a systemd.
És fonamental revisar els logs davant d’errors o bloquejos de motors.
10.2 Actualitzacions
- Amb Docker, actualitza la imatge amb:
docker-compose pull
docker-compose up -d
- En instal·lació nativa:
sudo -u searxng /opt/searxng/venv/bin/git pull
sudo -u searxng /opt/searxng/venv/bin/pip install --upgrade -r /opt/searxng/requirements.txt
systemctl restart searxng
Revisa sempre les notes de versió per a canvis en configuració.
10.3 Còpia de seguretat de configuració i dades
Fes còpies regulars de:
- La carpeta de configuració (searxng-data a Docker).
- Els arxius settings.yml i personalitzats.
- Qualsevol script o integració.
10.4 Seguretat
- Renova els certificats TLS.
- Canvia les claus i contrasenyes periòdicament.
- Revisa els ports oberts i l’accés.
11. Escenaris i recomanacions per a ús real
11.1 Ús personal
- Suficient amb Docker en un VPS petit.
- Fes servir autenticació bàsica per evitar accessos no desitjats.
- Limita els motors i categories per enfocar-te en resultats que realment facis servir.
11.2 Xarxes corporatives o equips
- Afegeix autenticació més robusta (LDAP, OAuth) si el proxy ho permet.
- Integra amb sistemes de monitoratge per detectar abusos.
- Fes servir balanceig si tens alta concurrència.
11.3 Comunitat o servei públic
- Caché agressiva per evitar sobrecàrrega.
- Limitació de velocitat estricta.
- Revisió periòdica de motors actius i bloquejos per evitar abusos.
12. Diagnòstic i resolució de problemes comuns
| Problema | Diagnòstic ràpid | Solució recomanada |
| Pàgina no càrrega | Verifica que el contenidor o servei estigui actiu | docker ps, systemctl estat searxng |
| Errors 429 (massa peticions) | Ús excessiu o falta d’ API keys | Afegeix claus API, activa rate limiting |
| No es veuen resultats de Google o Bing | Bloqueig d’ IP o falta de clau | Configura API key i revisa quotes |
| Configuració no canvia després d’editar | No reinicia el servei | docker restart searxng o systemctl restart searxng |
| Problemes amb TLS/HTTPS | Certificat mal configurat | Revisa rutes de certificats i proxy |
| Lentitud general | Motors lents o recursos insuficients | Redueix motors actius, incrementa workers |
13. Checklist per autohostatjar SearxNG
- Tria el mètode d’instal·lació (Docker o nadiu).
- Reserva els recursos mínims adequats.
- Configura l’usuari dedicat per a la instal·lació nativa.
- Instal·la les dependències i descàrrega SearxNG.
- Configura el proxy invers amb TLS.
- Cambia la secret_key a settings.yml.
- Afegeix claus API per als motors que ho requereixin.
- Activa l’autenticació o les restriccions d’ accés si és necessari.
- Ajusta els motors actius i les categories per al teu cas.
- Configura rate limiting al proxy.
- Monitoritza els logs i el rendiment.
- Programa backups regulars.
- Actualitza regularment l’ aplicació i les dependències.
- Implementa caché si la càrrega és alta.
- Revisa i actualitza els certificats TLS.

