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.

Rispondi