51 07/04/2026 9 min

Apache Solr su Ubuntu 22.04: cosa serve davvero

Solr gira sopra Java e, su Ubuntu 22.04, la strada più pulita è installarlo come servizio systemd, così hai avvio automatico, log centralizzati e gestione coerente con il resto del sistema. La versione di Solr va scelta in base al tuo caso d’uso; qui ti mostro un percorso standard, adatto a un server Linux recente e a un’installazione singola.

Prima di toccare il sistema, conviene chiarire il risultato atteso: alla fine devi avere Solr in ascolto sulla porta 8983, raggiungibile localmente o in rete secondo la tua policy, con una directory dati dedicata e un servizio che riparte dopo reboot. Se ti serve esporlo pubblicamente, va deciso prima il perimetro di rete e l’eventuale reverse proxy.

Prerequisiti e controlli iniziali

Verifica lo stato della macchina e aggiorna gli indici dei pacchetti. Su un server in produzione, questo passaggio ti dice anche se hai spazio disco sufficiente e se il sistema è in condizioni sane prima dell’installazione.

sudo apt update
sudo apt -y upgrade
uname -a
free -h
df -h

Solr richiede Java. Su Ubuntu 22.04, la scelta tipica è OpenJDK 11 o 17 a seconda della versione di Solr che intendi usare. Se non hai un vincolo specifico, controlla prima quale Java è disponibile e installa quello coerente con la release di Solr.

java -version
apt-cache policy openjdk-11-jre-headless openjdk-17-jre-headless

Se Java non è installato, aggiungilo. In molti casi basta il runtime headless, che è più leggero e riduce la superficie del sistema.

sudo apt -y install openjdk-11-jre-headless

Se la tua versione di Solr richiede Java 17, usa il pacchetto corrispondente. Il punto non è “prendere l’ultima Java”, ma allineare runtime e release supportata.

Creazione dell’utente dedicato

Non installare Solr come root. Crea un utente di servizio dedicato, senza shell interattiva, e usa una home coerente con i file dell’applicazione.

sudo useradd --system --home /var/solr --shell /usr/sbin/nologin solr
id solr

Se l’utente esiste già, non ricrearlo: verifica solo che abbia i permessi corretti sulle directory che userà per dati e log. Questo evita errori banali di ownership dopo il primo avvio.

Scaricare Apache Solr

Scarica la release ufficiale dal sito Apache. In ambiente reale conviene fissare una versione precisa, non usare “latest”, così eviti cambiamenti improvvisi nel comportamento del motore di ricerca.

Qui uso una variabile per rendere evidente dove aggiornare la versione.

cd /tmp
SOLR_VERSION=9.6.1
wget https://downloads.apache.org/lucene/solr/${SOLR_VERSION}/solr-${SOLR_VERSION}.tgz
wget https://downloads.apache.org/lucene/solr/${SOLR_VERSION}/solr-${SOLR_VERSION}.tgz.sha512

Se il mirror o la versione non sono disponibili, prendi il link dal sito ufficiale Apache e mantieni la stessa logica di verifica. Il controllo dell’integrità non è opzionale su software server.

Verifica dell’archivio e installazione

Confronta la checksum prima di estrarre l’archivio. Se il file non coincide, interrompi: significa download corrotto o file alterato.

sha512sum -c solr-${SOLR_VERSION}.tgz.sha512

Se la verifica è OK, estrai l’archivio e avvia lo script di installazione. Questo script prepara il layout standard, installa i file in `/opt/solr` e crea lo scheletro del servizio.

tar xzf solr-${SOLR_VERSION}.tgz
sudo bash solr-${SOLR_VERSION}/bin/install_solr_service.sh solr-${SOLR_VERSION}.tgz

In genere il servizio viene creato come `solr`. Dopo l’installazione, controlla che il binario e i file principali siano presenti.

systemctl status solr --no-pager
ls -ld /opt/solr /var/solr

Avvio del servizio e verifica iniziale

Avvia Solr e verifica che la porta 8983 sia in ascolto. Il primo controllo deve essere locale, prima di aprire firewall o reverse proxy.

sudo systemctl enable --now solr
sudo systemctl status solr --no-pager
ss -lntp | grep 8983

Se il servizio non parte, guarda i log del journal. È il percorso più rapido per distinguere un problema di Java, permessi, memoria o configurazione.

journalctl -u solr -n 100 --no-pager

Quando il servizio è su, prova l’endpoint HTTP locale. Il pannello web di Solr deve rispondere con la dashboard, o almeno con un codice HTTP coerente e contenuti HTML.

curl -I http://127.0.0.1:8983/solr/

Se ricevi un timeout o un rifiuto di connessione, il problema è a livello servizio o binding. Se ricevi 200 ma la pagina è vuota o incompleta, guarda i log applicativi e la configurazione dei core.

Configurazione base di memoria e binding

Su macchine piccole, il default di memoria può essere eccessivo o insufficiente a seconda del carico. Il punto è dimensionare JVM e heap in modo esplicito, non lasciare tutto ai default se il server ha vincoli stretti.

Il file da toccare dipende dal layout installato, ma in genere trovi le opzioni Java in un file sotto `/etc/default/solr.in.sh` o equivalente. Fai sempre un backup prima di cambiare parametri JVM.

sudo cp /etc/default/solr.in.sh /etc/default/solr.in.sh.bak

Imposta memoria e, se serve, il binding di rete. Per una prima installazione locale, lascia il bind su localhost. Se devi esporre il servizio, fallo consapevolmente e con controllo di accesso davanti.

sudo nano /etc/default/solr.in.sh

Parametri tipici da valutare:

  • SOLR_HEAP: dimensione heap JVM, ad esempio 512m, 1g o più in base al carico.
  • SOLR_HOST: hostname usato da Solr per generare URL.
  • SOLR_JAVA_MEM: in alcune distribuzioni o layout, opzioni memoria avanzate.

Dopo la modifica, riavvia e ricontrolla i log.

sudo systemctl restart solr
journalctl -u solr -n 50 --no-pager

Creare il primo core o collection

Solr può lavorare con core singoli o con collection, a seconda della modalità e della complessità del tuo setup. Per una installazione base, partire con un core è spesso il modo più semplice per validare il motore.

Controlla lo stato del servizio e poi crea un core di test. Il nome qui è solo un esempio.

sudo -u solr /opt/solr/bin/solr create -c testcore -n data_driven_schema_configs

Se il comando fallisce, verifica che l’utente `solr` abbia i permessi su `/var/solr` e che il servizio sia attivo. In caso di errore di schema o configset, il problema è nella configurazione del template scelto, non nel servizio.

Per confermare che il core esista, usa l’API di stato locale.

curl 'http://127.0.0.1:8983/solr/admin/cores?action=STATUS&core=testcore&wt=json'

La risposta deve includere il core e lo stato `loaded` o equivalente. Se non compare, il core non è stato creato correttamente.

Firewall e accesso di rete

Se Solr deve essere raggiungibile da altre macchine, apri la porta in modo selettivo. Su Ubuntu, se usi UFW, la regola minima è quella sulla porta 8983, ma solo dall’IP o dalla rete che deve accedere davvero al servizio.

sudo ufw status verbose
sudo ufw allow from 192.0.2.0/24 to any port 8983 proto tcp

Se il servizio resta solo locale, non aprire nulla. In molti casi è meglio tenere Solr dietro Nginx o Apache come reverse proxy, con TLS e controllo accessi davanti.

Se vuoi esporlo, controlla anche il binding di Solr. Un processo che ascolta su `0.0.0.0` è più facile da raggiungere, ma aumenta il rischio se il firewall o la segmentazione non sono corretti.

Log, diagnostica e problemi frequenti

I problemi più comuni dopo l’installazione sono questi: Java non compatibile, permessi errati, memoria insufficiente, porta già occupata, disco pieno o configurazione del core non valida. La diagnostica va fatta partendo dai log e dallo stato del servizio.

Comandi utili:

systemctl is-active solr
journalctl -u solr -f
ss -lntp | grep java
sudo du -sh /var/solr /opt/solr

Se trovi errori di memoria, ridimensiona l’heap. Se trovi errori di permessi, verifica ownership e modalità delle directory. Se la porta è già occupata, individua il processo in conflitto prima di fermare servizi a caso.

sudo lsof -iTCP:8983 -sTCP:LISTEN -Pn

Se il problema è un core corrotto o non caricabile, spesso conviene partire da un configset pulito e ricreare il core di test. Evita di fare modifiche multiple insieme: cambia una sola variabile per volta, così capisci cosa ha risolto.

Reverse proxy con Apache o Nginx

Se Solr deve stare su Internet o dietro un dominio pubblico, la soluzione corretta è quasi sempre un reverse proxy davanti, non l’esposizione diretta del processo Java. Così puoi gestire TLS, header, rate limit e autenticazione in un livello più adatto.

Con Apache o Nginx, il proxy deve inoltrare le richieste verso `127.0.0.1:8983` o verso l’indirizzo interno del servizio. Il controllo qui è che il backend risponda correttamente e che il proxy non alteri i path di Solr.

Se il tuo stack usa già Apache, valuta una configurazione dedicata con virtual host, certificato TLS e restrizione per IP o autenticazione. Se usi Nginx, controlla i timeout, perché query Solr lunghe possono richiedere valori superiori ai default.

Backup e ripristino minimo

Prima di mettere in produzione l’istanza, definisci cosa devi salvare: configset, core data, eventuali custom schema e file di servizio. Senza un backup minimo, ogni modifica rischia di diventare irreversibile.

Un controllo rapido dei percorsi più importanti ti aiuta a capire cosa includere.

ls -la /var/solr
ls -la /opt/solr
find /var/solr -maxdepth 2 -type f | head

Se usi dati persistenti importanti, pianifica snapshot o backup applicativi coerenti con il carico. Non limitarti a copiare file a caldo senza sapere se l’indice è consistente nel momento del prelievo.

Verifica finale

Alla fine dell’installazione, devono risultare veri questi punti: servizio attivo, porta in ascolto, endpoint HTTP raggiungibile, core presente, log puliti e accesso di rete coerente con la policy scelta.

systemctl status solr --no-pager
ss -lntp | grep 8983
curl -s http://127.0.0.1:8983/solr/ | head
curl 'http://127.0.0.1:8983/solr/admin/cores?action=STATUS&core=testcore&wt=json'

Se tutto risponde, hai una base pulita per passare alla fase successiva: import dati, tuning schema, configurazione query e hardening del servizio. Se qualcosa non torna, non fare tuning prima di aver chiuso il problema di installazione o di rete.

Assunzione usata: installazione singola su Ubuntu 22.04, con accesso shell root o sudo, e Solr inizialmente esposto solo in locale.