Vai al contenuto principale

Installare SonarQube su Rocky Linux

Questa guida spiega come installare e configurare SonarQube su un server Rocky Linux 9. SonarQube è una piattaforma open source per l'analisi statica del codice: rileva bug, code smell e vulnerabilità di sicurezza, supporta molti linguaggi e automatizza le revisioni del codice per mantenere un'alta qualità. SonarQube è basato su Java e può essere distribuito su diverse distribuzioni Linux (incluso Rocky Linux) o in container (Docker, Kubernetes).

Il deployment descritto qui utilizza OpenJDK 17, PostgreSQL come database, Apache come reverse proxy e Let's Encrypt per HTTPS.

Ordina un server​

Per ospitare la tua istanza SonarQube, HostMyServers propone diverse offerte adatte:

Prerequisiti​

  • Accesso SSH root o utente con sudo
  • Sistema Rocky Linux 9 a 64 bit
  • Almeno 4 GB di RAM (SonarQube ed Elasticsearch sono avidi di memoria)
  • Un nome di dominio (es. sonarqube.tuodominio.com) con record A che punta all'IP del server
  • Porte 80 (HTTP) e 443 (HTTPS) accessibili

Configurazione richiesta​

ComponenteMinimoConsigliato
RAM4 GB8 GB
CPU2 core4 core
Storage10 GB20 GB
Rete100 Mbps1 Gbps
Porta predefinita

SonarQube è in ascolto sulla porta 9000 in locale. Apache fa da reverse proxy verso questa porta; l'accesso pubblico è in HTTP/HTTPS su 80/443.

Connessione al server​

Connettiti via SSH al server Rocky Linux:

ssh utente@indirizzo_ip_server

Aggiornamento del sistema​

Aggiorna i pacchetti prima di iniziare:

sudo dnf update -y

Installazione di OpenJDK 17​

SonarQube richiede una JRE/JDK. La versione LTA (long-term active) 2025 di SonarQube richiede Java 17 o 21. Utilizziamo OpenJDK 17.

sudo dnf install -y java-17-openjdk java-17-openjdk-devel

Verifica la versione installata:

java -version

Dovresti vedere una riga del tipo: openjdk version "17.x.x". Se è attiva una versione più vecchia, seleziona Java 17 con: sudo alternatives --config java.

Creazione dell'utente SonarQube​

SonarQube utilizza Elasticsearch per la ricerca e l'indicizzazione; deve essere eseguito da un utente non root. Crea un utente di sistema dedicato:

sudo useradd --system sonarqube

Database PostgreSQL per SonarQube​

SonarQube supporta diversi motori di database. Utilizziamo PostgreSQL.

Installare e inizializzare PostgreSQL​

sudo dnf install -y postgresql-server postgresql-contrib
sudo postgresql-setup --initdb
sudo systemctl enable postgresql
sudo systemctl start postgresql

Creare il database e l'utente​

Connettiti a PostgreSQL con l'utente postgres:

sudo -i -u postgres psql

Nella console PostgreSQL, esegui (sostituisci TUA_PASSWORD con una password robusta):

\password postgres
CREATE DATABASE sonardb;
CREATE USER sonaruser WITH ENCRYPTED PASSWORD 'TUA_PASSWORD';
GRANT ALL PRIVILEGES ON DATABASE sonardb TO sonaruser;
\q

Abilitare l'autenticazione con password (pg_hba.conf)​

Modifica il file di configurazione dell'autenticazione:

sudo nano /var/lib/pgsql/data/pg_hba.conf

Per le connessioni locali e TCP, usa trust per "local" e md5 per "host" (es. 127.0.0.1/32 e ::1/128). Esempio:

# TYPE DATABASE USER ADDRESS METHOD
local all all trust
host all all 127.0.0.1/32 md5
host all all ::1/128 md5

Riavvia PostgreSQL:

sudo systemctl restart postgresql

Installazione di SonarQube​

SonarQube non è fornito nei repository DNF predefiniti. Scarica l'archivio dal sito ufficiale.

Scaricare ed estrarre SonarQube​

Consulta la pagina dei download SonarQube per l'ultima versione LTA. Esempio con la versione 25.x (adatta URL e nome della cartella se necessario):

sudo dnf install -y unzip
sudo mkdir -p /opt/sonarqube
cd /tmp
wget https://binaries.sonarsource.com/Distribution/sonarqube/sonarqube-25.1.0.102122.zip
unzip sonarqube-25.1.0.102122.zip
sudo mv sonarqube-25.1.0.102122/* /opt/sonarqube
Versione

Sostituisci sonarqube-25.1.0.102122 con il nome esatto della cartella estratta corrispondente alla versione che hai scaricato.

Installare SonarScanner CLI (opzionale ma utile)​

SonarScanner permette di analizzare progetti dalla riga di comando. Scarica l'ultima versione da SonarScanner CLI.

sudo mkdir -p /opt/sonarscanner
cd /tmp
wget https://binaries.sonarsource.com/Distribution/sonar-scanner-cli/sonar-scanner-cli-7.0.2.4839-linux-x64.zip
unzip sonar-scanner-cli-7.0.2.4839-linux-x64.zip
sudo mv sonar-scanner-7.0.2.4839-linux-x64/* /opt/sonarscanner

Configura l'URL del server SonarQube (per le analisi in locale):

sudo nano /opt/sonarscanner/conf/sonar-scanner.properties

Aggiungi o modifica: sonar.host.url=http://127.0.0.1

Rendi l'eseguibile disponibile ovunque:

sudo chmod +x /opt/sonarscanner/bin/sonar-scanner
sudo ln -sf /opt/sonarscanner/bin/sonar-scanner /usr/local/bin/sonar-scanner

Verifica: sonar-scanner -v

Configurazione di SonarQube​

File sonar.properties​

Modifica la configurazione principale di SonarQube:

sudo nano /opt/sonarqube/conf/sonar.properties

Alla fine del file, aggiungi (sostituisci TUA_PASSWORD con la password dell'utente PostgreSQL sonaruser):

sonar.jdbc.username=sonaruser
sonar.jdbc.password=TUA_PASSWORD
sonar.jdbc.url=jdbc:postgresql://localhost/sonardb
sonar.web.host=0.0.0.0
sonar.web.port=9000
sonar.web.javaOpts=-Xmx512m -Xms256m -XX:+HeapDumpOnOutOfMemoryError
sonar.search.javaOpts=-Xmx1g -Xms1g -XX:MaxDirectMemorySize=512m -XX:+HeapDumpOnOutOfMemoryError
sonar.path.data=data
sonar.path.temp=temp
ParametroDescrizione
sonar.jdbc.*Connessione a PostgreSQL
sonar.web.hostIn ascolto su tutte le interfacce (0.0.0.0)
sonar.web.portPorta dell'interfaccia web (9000)
sonar.web.javaOptsOpzioni JVM per il server web
sonar.search.javaOptsOpzioni JVM per Elasticsearch (motore di ricerca)
sonar.path.data / sonar.path.tempDirectory dati e temporanee

Permessi e limiti di sistema​

Assegna la proprietà della directory SonarQube all'utente sonarqube:

sudo chown -R sonarqube:sonarqube /opt/sonarqube
sudo chmod -R 775 /opt/sonarqube

SonarQube (Elasticsearch) richiede un limite più alto per le aree di memoria mappate. Aggiungi in /etc/sysctl.conf:

sudo nano /etc/sysctl.conf

Aggiungi alla fine:

vm.max_map_count=524288
fs.file-max=131072

Poi applica: sudo sysctl -p

Servizio systemd per SonarQube​

SonarQube fornisce uno script di avvio in /opt/sonarqube/bin/linux-x86-64/sonar.sh. Crea un servizio systemd per utilizzarlo.

Contesto SELinux (Rocky Linux 9)​

Su Rocky Linux, SELinux è attivo. Consenti l'esecuzione dello script:

sudo chcon -t bin_t /opt/sonarqube/bin/linux-x86-64/sonar.sh
sudo restorecon -Rv /opt/sonarqube

File di servizio​

sudo nano /etc/systemd/system/sonarqube.service

Contenuto:

[Unit]
Description=SonarQube service
After=syslog.target network.target

[Service]
Type=forking
User=sonarqube
Group=sonarqube
PermissionsStartOnly=true
ExecStart=/opt/sonarqube/bin/linux-x86-64/sonar.sh start
ExecStop=/opt/sonarqube/bin/linux-x86-64/sonar.sh stop
Restart=always
RestartSec=10
LimitNOFILE=131072
LimitNPROC=8192
SuccessExitStatus=143
TimeoutStartSec=300

[Install]
WantedBy=multi-user.target

Abilita e avvia il servizio:

sudo systemctl daemon-reload
sudo systemctl enable sonarqube
sudo systemctl start sonarqube
sudo systemctl status sonarqube

Lo stato deve indicare active (running). Il primo avvio può richiedere diversi minuti (inizializzazione di Elasticsearch e del database).

Reverse proxy Apache e HTTPS​

L'interfaccia web SonarQube è disponibile sulla porta 9000 in locale. Per esporla in HTTP/HTTPS, utilizziamo Apache come reverse proxy.

Installare Apache​

sudo dnf install -y httpd
sudo systemctl enable httpd
sudo systemctl start httpd

Verifica che i moduli proxy siano caricati: sudo httpd -M | grep proxy (proxy_module, proxy_http_module, proxy_balancer_module). Se necessario, decommenta le righe corrispondenti in /etc/httpd/conf/httpd.conf.

Virtual host per SonarQube​

Crea un file di configurazione per il tuo dominio (sostituisci sonarqube.tuodominio.com con il tuo dominio):

sudo nano /etc/httpd/conf.d/sonarqube.conf

Contenuto:

<VirtualHost *:80>
ServerName sonarqube.tuodominio.com
ServerAdmin admin@tuodominio.com
ProxyPreserveHost On
ProxyPass / http://localhost:9000/
ProxyPassReverse / http://localhost:9000/
TransferLog /var/log/httpd/sonarqube_access.log
ErrorLog /var/log/httpd/sonarqube_error.log
</VirtualHost>

Testa la configurazione e riavvia Apache:

sudo apachectl configtest
sudo systemctl restart httpd

Consentire ad Apache di connettersi al backend (SELinux)​

Per consentire ad Apache di fare proxy verso localhost:9000:

sudo setsebool -P httpd_can_network_connect 1

Firewall​

Apri le porte HTTP e HTTPS:

sudo firewall-cmd --add-service=http --permanent
sudo firewall-cmd --add-service=https --permanent
sudo firewall-cmd --reload

Certificato TLS con Certbot (Let's Encrypt)​

Per proteggere l'accesso in HTTPS:

sudo dnf install -y certbot python3-certbot-apache
sudo certbot --apache -d sonarqube.tuodominio.com -m tua-email@esempio.com --agree-tos

Certbot configura Apache per HTTPS e il rinnovo automatico dei certificati.

Accesso a SonarQube​

  1. Apri un browser e vai a: https://sonarqube.tuodominio.com
  2. Accedi con le credenziali predefinite: admin / admin
  3. SonarQube ti chiederà di cambiare la password dell'amministratore; scegli una password robusta.
  4. Per le analisi (CI/CD o riga di comando), crea un utente o un token: Amministrazione → Sicurezza → Utenti → Crea utente, poi genera un token per quel conto.

Analizzare un progetto con SonarScanner​

Per testare l'installazione, puoi analizzare un progetto di esempio:

cd ~
mkdir -p projects && cd projects
git clone https://github.com/SonarSource/sonar-scanning-examples
cd sonar-scanning-examples/sonar-scanner

Genera un token nell'interfaccia SonarQube (Amministrazione → Sicurezza → Utenti → Tokens), poi avvia l'analisi (sostituisci TUO_TOKEN con il token generato):

sonar-scanner -D sonar.token=TUO_TOKEN

Una volta completata l'analisi, consulta il progetto nell'interfaccia: Progetti → il progetto analizzato appare con le metriche (bug, vulnerabilità, copertura, duplicazioni).

Comandi utili​

ComandoDescrizione
sudo systemctl status sonarqubeStato del servizio SonarQube
sudo systemctl restart sonarqubeRiavvia SonarQube
sudo systemctl restart httpdRiavvia Apache
sonar-scanner -vVersione di SonarScanner
sonar-scanner -D sonar.token=TOKENAvvia un'analisi con token

Struttura delle directory​

PercorsoDescrizione
/opt/sonarqube/Installazione SonarQube (bin, conf, data, temp, extensions)
/opt/sonarqube/conf/sonar.propertiesConfigurazione principale
/opt/sonarscanner/Installazione SonarScanner CLI
/etc/httpd/conf.d/sonarqube.confVirtual host Apache

In caso di problemi​

Il servizio SonarQube non si avvia​

  • Controlla i log: sudo journalctl -u sonarqube.service -n 100
  • Consulta i log SonarQube: tail -f /opt/sonarqube/logs/sonar.log e tail -f /opt/sonarqube/logs/web.log
  • Verifica che PostgreSQL sia avviato: sudo systemctl status postgresql
  • Verifica i parametri del kernel: sysctl vm.max_map_count (deve essere almeno 524288)

Errore 503 o pagina non raggiungibile via Apache​

  • Verifica che SonarQube sia in ascolto sulla 9000: ss -tlnp | grep 9000
  • Verifica SELinux: getsebool httpd_can_network_connect (deve essere "on")
  • Consulta i log Apache: sudo tail -f /var/log/httpd/sonarqube_error.log

Java o memoria​

  • Se le opzioni JVM in sonar.properties sono troppo basse per la tua RAM, aumenta sonar.web.javaOpts e sonar.search.javaOpts (es. -Xmx1g per il web, -Xmx2g per search in base alla RAM disponibile).

Riferimenti​