Se vuoi avere un motore di ricerca privato, ospitato sul tuo server e sotto il tuo pieno controllo, SearXNG è una delle soluzioni più interessanti da provare. Si tratta di un metasearch engine self-hosted che permette di effettuare ricerche sul web tramite un’interfaccia propria, senza dipendere da una classica installazione esterna di un motore di ricerca pubblico.
In questa guida vedremo come installare SearXNG su Linux all’interno di un VPS, usando Docker Compose e un reverse proxy, così da ottenere una configurazione pulita, facilmente aggiornabile e adatta a un utilizzo personale o per piccoli gruppi.
Perché installare SearXNG su un VPS Linux
Un’installazione self-hosted di SearXNG può essere utile in diversi scenari:
- Vuoi un motore di ricerca personale raggiungibile dal browser.
- Preferisci gestire direttamente il servizio su un tuo server.
- Vuoi integrare un nuovo servizio self-hosted nel tuo VPS Linux.
- Ti interessa sperimentare una piattaforma open source da personalizzare.
Un VPS Linux è un’ottima base per questo progetto perché consente di avere una macchina sempre disponibile, accessibile dall’esterno e semplice da amministrare da terminale.
Requisiti minimi
Per seguire questa guida ti consiglio almeno:
- Un VPS con almeno Debian 12/13 oppure Ubuntu 24.04 o 22.04.
- 1 vCPU.
- 1 GB di RAM minimo, meglio 2 GB se il server ospita anche altri servizi.
- 10 GB di spazio disco.
- Un dominio o sottodominio, per esempio
search.tuodominio.it. - Porte 80 e 443 aperte nel firewall.
In questa procedura userò come esempio un sottodominio dedicato, perché è la soluzione più ordinata per pubblicare il servizio in HTTPS.
Aggiornare il server Linux
Prima di iniziare conviene aggiornare il sistema:
sudo apt update
sudo apt upgrade -y
Se vuoi, riavvia il VPS al termine degli aggiornamenti più importanti:
sudo reboot
Dopo il riavvio ricollegati via SSH.
Installare Docker e Docker Compose
Per gestire SearXNG in modo semplice useremo Docker con il plugin Compose.
Installiamo i pacchetti di base:
sudo apt install -y ca-certificates curl gnupg
Creiamo la directory per la chiave del repository Docker:
sudo install -m 0755 -d /etc/apt/keyrings
Se stai usando Ubuntu, scarica la chiave GPG ufficiale:
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
sudo chmod a+r /etc/apt/keyrings/docker.gpg
Aggiungiamo il repository Docker:
echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
$(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \
sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
Aggiorniamo i repository e installiamo Docker:
sudo apt update
sudo apt install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
Verifichiamo che Docker sia attivo:
sudo systemctl enable --now docker
sudo systemctl status docker
Se tutto è corretto, puoi controllare anche la versione:
docker --version
docker compose version
Creare la cartella del progetto
Creiamo una directory dedicata a SearXNG:
sudo mkdir -p /opt/searxng
sudo chown $USER:$USER /opt/searxng
cd /opt/searxng
Creiamo anche la cartella che conterrà la configurazione:
mkdir -p searxng
Generare la chiave segreta
SearXNG ha bisogno di una chiave segreta. Generiamola subito:
openssl rand -hex 32
Copia il valore generato, perché tra poco lo inseriremo nel file di configurazione.
Creare il file docker-compose.yml
Ora creiamo il file Compose:
nano docker-compose.yml
Inserisci questo contenuto, ricordandoti di sostituire search.tuodominio.it con il tuo dominio reale:
services:
redis:
image: redis:7-alpine
container_name: searxng-redis
restart: unless-stopped
command: redis-server --save "" --appendonly no
volumes:
- redis-data:/data
searxng:
image: searxng/searxng:latest
container_name: searxng
restart: unless-stopped
depends_on:
- redis
ports:
- "127.0.0.1:8080:8080"
volumes:
- ./searxng:/etc/searxng
environment:
- SEARXNG_BASE_URL=https://search.tuodominio.it/
- UWSGI_WORKERS=2
- UWSGI_THREADS=2
volumes:
redis-data:
Creare la configurazione di SearXNG
Passiamo ora al file principale di configurazione:
nano /opt/searxng/searxng/settings.yml
Inserisci questa configurazione di base, sostituendo il dominio e la chiave segreta con i tuoi valori reali:
use_default_settings: true
server:
secret_key: "LA_TUA_CHIAVE"
base_url: "https://search.tuodominio.it/"
bind_address: "0.0.0.0:8080"
limiter: false
image_proxy: true
valkey:
url: redis://redis:6379/0
search:
safe_search: 1
autocomplete: "duckduckgo"
formats:
- html
- json
ui:
static_use_hash: true
Questa configurazione è sufficiente per una prima installazione funzionante e mantiene il progetto abbastanza semplice da gestire.
Avviare SearXNG con Docker Compose
A questo punto possiamo avviare i container:
cd /opt/searxng
docker compose up -d
Controlliamo che siano partiti correttamente:
docker compose ps
Per verificare eventuali errori nei log:
docker compose logs -f searxng
Se non compaiono errori gravi, SearXNG sarà in ascolto sulla porta locale 8080 del VPS.
Test locale del servizio
Prima di configurare il reverse proxy puoi controllare se il servizio risponde in locale:
curl http://127.0.0.1:8080
Se vedi codice HTML in output, il container sta rispondendo correttamente.
Installare Caddy come reverse proxy
Per pubblicare il servizio in HTTPS in modo semplice possiamo usare Caddy.
Installiamo i pacchetti necessari:
sudo apt install -y debian-keyring debian-archive-keyring apt-transport-https curl
Importiamo la chiave del repository:
curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/gpg.key' | sudo gpg --dearmor -o /usr/share/keyrings/caddy-stable-archive-keyring.gpg
Aggiungiamo il repository:
curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/debian.deb.txt' | sudo tee /etc/apt/sources.list.d/caddy-stable.list
Aggiorniamo i pacchetti e installiamo Caddy:
sudo apt update
sudo apt install -y caddy
Configurare il virtual host di Caddy
Apriamo il file di configurazione:
sudo nano /etc/caddy/Caddyfile
Inserisci una configurazione come questa, sostituendo il dominio con il tuo:
search.tuodominio.it {
reverse_proxy 127.0.0.1:8080
encode gzip zstd
header {
X-Content-Type-Options nosniff
Referrer-Policy no-referrer
X-Frame-Options SAMEORIGIN
}
}
Salva e chiudi il file.
Verifica la configurazione:
sudo caddy validate --config /etc/caddy/Caddyfile
Se il controllo non mostra errori, riavvia o ricarica Caddy:
sudo systemctl reload caddy
sudo systemctl status caddy
Se il dominio punta correttamente al VPS, Caddy cercherà automaticamente di ottenere il certificato HTTPS tramite Let’s Encrypt.
Una volta abilitato Caddy, potrebbe interessarti impostare la voce “limiter” a true, su SearXNG, nel file:
/opt/searxng/searxng/settings.yml
Così da limitare eventuali bot. Nel caso volessi procedere, ricordati di eseguire il riavvio del container docker dopo la modifica del file, con:
docker compose restart
Aprire le porte sul firewall
Se usi UFW, apri le porte necessarie:
sudo ufw allow OpenSSH
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
sudo ufw enable
sudo ufw status
Verificare il risultato finale
A questo punto apri il browser e visita:
https://search.tuodominio.it
Se tutto è andato bene, dovresti vedere l’interfaccia web di SearXNG pronta per essere utilizzata.
Per controllare in qualsiasi momento i container:
cd /opt/searxng
docker compose ps
docker compose logs --tail=50 searxng
Come aggiornare SearXNG
Uno dei vantaggi dell’installazione con Docker Compose è la semplicità degli aggiornamenti.
Per aggiornare l’immagine:
cd /opt/searxng
docker compose pull
docker compose up -d
Per verificare che tutto sia tornato operativo:
docker compose ps
docker compose logs --tail=50 searxng
Personalizzazioni utili
Una volta che il servizio funziona puoi iniziare a personalizzarlo:
- Cambiare il sottodominio dedicato.
- Modificare i motori usati.
- Cambiare le impostazioni di ricerca sicura.
- Limitare l’accesso solo a uso personale tramite ulteriore protezione a livello reverse proxy.
- Integrare SearXNG in un ambiente self-hosted con altri servizi già presenti sul tuo VPS.
Se vuoi una configurazione ancora più privata, puoi anche pubblicarlo solo dietro VPN oppure renderlo raggiungibile esclusivamente dalla tua rete.
Problemi comuni
Il container non parte
Controlla i log:
docker compose logs -f searxng
Spesso l’errore dipende da un file settings.yml con indentazione YAML errata oppure da una chiave segreta mancante.
Il dominio non apre il sito
Verifica che il record DNS punti all’IP corretto del VPS e che le porte 80 e 443 siano aperte.
Il certificato per HTTPS non viene emesso
Controlla che il dominio sia già propagato correttamente e che Caddy riesca a raggiungere il servizio.
SearXNG risponde in locale ma non da Internet
In questo caso il problema è quasi sempre nel reverse proxy, nel DNS o nel firewall, non nel container vero e proprio.
FAQ su SearXNG
Cos’è SearXNG e a cosa serve?
SearXNG è un motore di ricerca metasearch open source che puoi installare sul tuo server Linux. Serve a creare un’interfaccia di ricerca self-hosted, utile per centralizzare le ricerche web in un servizio sotto il tuo controllo.
Posso installare SearXNG su un VPS economico?
Sì, per un uso personale o per piccoli gruppi SearXNG può funzionare anche su un VPS economico con 1 vCPU e 1 GB di RAM. Se però il server ospita altri servizi o prevedi più utenti contemporanei, è meglio partire da 2 GB di RAM.
Considerazioni finali
Installare SearXNG su Linux è un progetto molto interessante per chi vuole aggiungere un nuovo servizio self-hosted al proprio VPS. Con Docker Compose e un reverse proxy come Caddy si riesce ad avere una configurazione abbastanza pulita, facile da aggiornare e adatta anche a un utilizzo quotidiano.
Se gestisci già altri servizi Linux sul tuo server, questa soluzione si integra bene in un ecosistema self-hosted più ampio e può diventare un altro tassello utile della tua infrastruttura personale.

