Skip to main content

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: AmministrazioneSicurezzaUtenti → 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