Come installare SonarQube con Let’s Encrypt su Ubuntu 20.04
È il sogno di ogni sviluppatore avere un codice pulito e senza problemi che possa essere facilmente distribuito in ambienti di staging e produzione. Uno strumento che può aiutarti a raggiungere questo obiettivo è nella pipeline CI/CD SonarQube. SonarQube è uno strumento multipiattaforma e basato sul Web utilizzato per l’ispezione continua del codice sorgente. È scritto in Java. SonarQube ti consente di scrivere codice più pulito e sicuro ispezionando il tuo codice e rilevando errori e altre incoerenze.
SonarQube può essere integrato in piattaforme come GitHub, Gitlab, BitBucket e Azure DevOps per citarne alcune. È disponibile in varie edizioni, tra cui le edizioni Community, Developer, Enterprise e Datacenter.
In questo tutorial, impariamo come installare SonarQube Su Ubuntu 20.04. Installeremo l’edizione community in quanto è gratuita da scaricare e attivare Certificato SSL (https) con Crittografiamo impostando Nginx come proxy inverso.
Prerequisiti
Prima di iniziare, assicurati di soddisfare i seguenti requisiti:
- Ubuntu 20.04 LTS con un utente sudo configurato.
- Assicurati che il tuo sistema abbia almeno 4 GB di RAM e 2 core vCPU
Dovrai installare alcuni strumenti
$ sudo apt update
$ sudo apt install net-tools unzip vim curl
È inoltre necessario aumentare il core della memoria virtuale
$ sudo sysctl -w vm.max_map_count=262144
con il numero massimo di file aperti
$ sudo sysctl -w fs.file-max=65536
e limiti di risorse
$ ulimit -n 65536
$ ulimit -u 4096
È possibile rendere persistenti le modifiche modificando i parametri di sistema da /etc/sysctl.conf
File di configurazione
$ sudo vim /etc/sysctl.conf
Aggiungi le seguenti righe.
vm.max_map_count=262144
fs.file-max=65536
ulimit -n 65536
ulimit -u 4096
Salva ed esci. Dopodiché, aprilo limits.conf
file
$ sudo vim /etc/security/limits.conf
In fondo, aggiungi le seguenti righe
sonarqube - nofile 65536
sonarqube - nproc 4096
Salva ed esci. Per rendere effettive le modifiche, riavviare il server.
Passaggio 1: installa OpenJDK
Poiché è scritto in Java, SonarQube dipende da Java per funzionare. Installeremo OpenJDK 11 che fornisce java.
$ sudo apt install openjdk-11-jdk
Una volta installato, puoi controllare la tua versione di Java.
$ java -version
Passaggio 2: installare il database PostgreSQL
A partire dal 2016, SonarQube ha abbandonato il supporto per MySQL e ora supporta solo PostgreSQL. Pertanto, dobbiamo installare il database PostgreSQL.
Per iniziare, scarica e aggiungi la chiave GPG PostgreSQL.
$ wget -q https://www.postgresql.org/media/keys/ACCC4CF8.asc -O - | sudo apt-key add -
Successivamente, aggiungi il repository PostgreSQL.
$ sudo sh -c 'echo "deb http://apt.postgresql.org/pub/repos/apt/ `lsb_release -cs`-pgdg main" >> /etc/apt/sources.list.d/pgdg.list'
Quindi aggiorna l’indice del pacchetto per sincronizzare il nuovo repository.
$ sudo apt update
Dopo aver terminato l’aggiornamento degli elenchi dei pacchetti, installa il database PostgreSQL e le sue dipendenze.
$ sudo apt install postgresql postgresql-contrib
Per impostazione predefinita, il servizio PostgreSQL viene avviato dopo l’installazione, se non è avviato, eseguire il seguente comando.
$ sudo systemctl start postgresql
Solo per confermare che tutto funzioni come previsto, controlla lo stato di integrità.
$ sudo systemctl status postgresql
Puoi anche confermare la porta su cui è in ascolto:
$ sudo netstat -pnltu | grep 5432
tcp 0 0 127.0.0.1:5432 0.0.0.0:* LISTEN 7768/postgres
tcp6 0 0 ::1:5432 :::* LISTEN 7768/postgres
Abilita PostgreSQL per l’avvio automatico all’avvio:
$ sudo systemctl enable postgresql
Finora il nostro PostgreSQL funziona senza problemi.
Passaggio 3: configurare PostgreSQL
Andando avanti, imposteremo la password per l’utente Postgres, che di solito viene fornita di default quando PostgreSQL è installato. Per fare ciò, esegui il comando:
$ sudo passwd postgres
Inserisci la tua password e confermala. Successivamente, passa all’utente Postgres.
$ su - postgres
Quindi vai avanti e crea un nuovo utente del database.
$ createuser sonar
Una volta fatto, passa al prompt di PostgreSQL usando il comando:
$ psql
Con l’accesso alla shell PostgreSQL, crea una password per l’utente appena creato.
ALTER USER sonar WITH ENCRYPTED PASSWORD 'strong_password';
Successivamente, crea un database SonarQube con l’utente che hai creato come proprietario
CREATE DATABASE sonarqube OWNER sonar;
Successivamente, assegna o concedi tutti i privilegi all’utilizzo del database in modo che disponga di tutti i privilegi per modificare il database.
GRANT ALL PRIVILEGES ON DATABASE sonarqube to sonar;
Ora esci dal database.
q
Passaggio 4: scarica e configura SonarQube
Andando avanti, scaricheremo l’ultimo file zip binario di SonarQube. Al momento, l’ultima versione Community Edition, che è una versione Long Term Service (LTS), è SonarQube versione 9.0.1. Puoi andare a Pagina di download di SonarQube per gli ultimi download.
Per scaricare il file zip, eseguire il comando:
$ wget https://binaries.sonarsource.com/Distribution/sonarqube/sonarqube-9.0.1.46107.zip
Successivamente, decomprimi il file archiviato.
$ unzip sonarqube-9.0.1.46107.zip
E spostalo in /opt/ path.
$ sudo mv sonarqube-9.0.1.46107 /opt/sonarqube
Passaggio 5: creare un nuovo utente e gruppo
Andando avanti, creeremo un nuovo utente e gruppo che eseguirà il servizio SonarQube. Quindi, crea il gruppo.
$ sudo groupadd sonar
Quindi crea l’utente con la home directory impostata su /opt/sonarqube man mano che aggiungi l’utente al gruppo appena creato.
$ sudo useradd -c "SonarQube - User" -d /opt/sonarqube/ -g sonar sonar
Quindi impostare la proprietà nella directory /opt/sonarqube.
$ sudo chown -R sonar:sonar /opt/sonarqube/
Passaggio 6: configurare SonarQube
Ora configuriamo SonarQube. Apri il file di configurazione di SonarQube.
$ sudo vim /opt/sonarqube
/conf/sonar.properties
Individua e decommenta le seguenti righe
sonar.jdbc.username=
sonar.jdbc.password=
Questi sono l’utente e la password del database SonarQube che abbiamo creato nel server del database PostgreSQL. Quindi riempi i valori di conseguenza.
sonar.jdbc.username=sonar_user
sonar.jdbc.password=strong_password
Quindi modificare queste righe in modo che assomiglino a ciò che viene fornito
sonar.jdbc.url=jdbc:postgresql://localhost:5432/sonarqube
sonar.search.javaOpts=-Xmx512m -Xms512m -XX:MaxDirectMemorySize=256m -XX:+HeapDumpOnOutOfMemoryError
Successivamente, modifica le seguenti righe in modo che appaiano come mostrato.
sonar.web.host=0.0.0.0
sonar.web.port=9000
sonar.web.javaAdditionalOpts=-server
sonar.log.level=INFO
sonar.path.logs=logs
Successivamente, cambia l’utente che eseguirà il servizio SonarQube modificando il file mostrato.
$ sudo vim /opt/sonarqube/bin/linux-x86-64/sonar.sh
Scorri verso il basso e assicurati che la riga sottostante appaia come mostrato.
RUN_AS_USER=sonar
Passaggio 7: creare un file di servizio Systemd per SonarQube
Attualmente, il nostro sistema non ha modo di avviare il servizio SonarQube. Pertanto, dobbiamo creare un servizio systemd. Per fare ciò, esegui il comando:
$ sudo vim /etc/systemd/system/sonarqube.service
Aggiungi le seguenti righe.
[Unit]
Description=SonarQube service
After=syslog.target network.target
[Service]
Type=forking
ExecStart=/opt/sonarqube/bin/linux-x86-64/sonar.sh start
ExecStop=/opt/sonarqube/bin/linux-x86-64/sonar.sh stop
User=sonar
Group=sonar
Restart=always
LimitNOFILE=65536
LimitNPROC=4096
[Install]
WantedBy=multi-user.target
Salva le modifiche ed esci dal file.
Abilita l’avvio del servizio SonarQube all’avvio
$ sudo systemctl enable sonarqube
E avvia il servizio SonarQube.
$ sudo systemctl start sonarqube
Per assicurarti che il servizio SonarQube sia in esecuzione, esegui il comando:
$ sudo systemctl status sonarqube
Inoltre, assicurati che la porta 9000 sia aperta
$ sudo ufw allow '9000'
Rules updated
Rules updated (v6)
Verificare che il servizio sia in ascolto sulla porta 9000
$ sudo netstat -pnltu | grep 9000
tcp6 0 0 :::9000 :::* LISTEN 65140/java
Ora puoi provare a verificare se puoi accedere alla pagina di accesso inserendo l’IP pubblico del tuo server e il numero di porta nel tuo browser, ad es http://<server-ip>:9000/
. Il nome utente predefinito dell’amministratore è “admin” e la password è “admin”.
Sonarqube ti chiederà di aggiornare la tua password per cambiare quella predefinita.
Passaggio 8: installa e configura Nginx con SSL (facoltativo)
Per accedere al tuo Sonarqube con il tuo nome di dominio abilitato SSL, dovrai installare un proxy inverso come Nginx. Il server Web eseguirà il proxy per SonarQube in modo che gli sviluppatori possano accedervi da un nome di dominio sicuro.
L’installazione di Nginx è semplice e diretta e può essere eseguita con un singolo comando.
$ sudo apt install nginx
Dopo l’installazione, abilitare l’avvio del server Web Nginx all’avvio.
$ sudo systemctl enable nginx
E il servizio inizia
$ sudo systemctl start nginx
Per rendere il server web consapevole di SonarQube, creeremo un file di configurazione mostrato.
$ sudo vim /etc/nginx/sites-available/sonarqube.conf
Quindi incolla il contenuto fornito.
server {
listen 80;
server_name example.com or SERVER-IP;
access_log /var/log/nginx/sonar.access.log;
error_log /var/log/nginx/sonar.error.log;
proxy_buffers 16 64k;
proxy_buffer_size 128k;
location / {
proxy_pass http://127.0.0.1:9000;
proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504;
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto http;
}
}
Salva ed esci. Quindi attiva il sito Sonarqube:
$ sudo ln -s /etc/nginx/sites-available/sonarqube.conf /etc/nginx/sites-enabled/sonarqube.conf
Verificare che la configurazione sia corretta
$ sudo nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
Quindi riavviare il server Web Nginx per rendere effettive le modifiche.
$ sudo systemctl restart nginx
Ora dobbiamo configurare il firewall UFW per consentire nginx. Per ottenere ciò, eseguire i comandi
$ sudo ufw allow 'Nginx Full'
Quindi ricaricare il firewall per apportare le modifiche.
$ sudo ufw --reload
Ora puoi accedere al tuo SonarQube tramite il suo nome di dominio
Qui, useremo gratuitamente crittografiamo il certificato. Per configurarlo, dobbiamo eseguire cerbot per Nginx:
$ sudo certbot --nginx
Saving debug log to /var/log/letsencrypt/letsencrypt.log Plugins selected: Authenticator nginx, Installer nginx Enter email address (used for urgent renewal and security notices) (Enter 'c' to cancel): alain@websitefortesting.com Please read the Terms of Service at https://letsencrypt.org/documents/LE-SA-v1.2-November-15-2017.pdf. You must agree in order to register with the ACME server at https://acme-v02.api.letsencrypt.org/directory (A)gree/(C)ancel: A Would you be willing to share your email address with the Electronic Frontier Foundation, a founding partner of the Let's Encrypt project and the non-profit organization that develops Certbot? We'd like to send you email about our work encrypting the web, EFF news, campaigns, and ways to support digital freedom. (Y)es/(N)o: N
Saving debug log to /var/log/letsencrypt/letsencrypt.log Plugins selected: Authenticator nginx, Installer nginx Which names would you like to activate HTTPS for? 1: websitefortesting.com Select the appropriate numbers separated by commas and/or spaces, or leave input blank to select all options shown (Enter 'c' to cancel): 1 Obtaining a new certificate Performing the following challenges: http-01 challenge for websitefortesting.com Waiting for verification… Cleaning up challenges Deploying Certificate to VirtualHost /etc/nginx/sites-enabled/sonarqube.conf Please choose whether or not to redirect HTTP traffic to HTTPS, removing HTTP access. 1: No redirect - Make no further changes to the webserver configuration. 2: Redirect - Make all requests redirect to secure HTTPS access. Choose this for new sites, or if you're confident your site works on HTTPS. You can undo this change by editing your web server's configuration. Select the appropriate number [1-2] then [enter] (press 'c' to cancel): 2 Redirecting all traffic on port 80 to ssl in /etc/nginx/sites-enabled/sonarqube.conf Congratulations! You have successfully enabled https://websitefortesting.com You should test your configuration at: https://www.ssllabs.com/ssltest/analyze.html?d=websitefortesting.com IMPORTANT NOTES: Congratulations! Your certificate and chain have been saved at: /etc/letsencrypt/live/websitefortesting.com/fullchain.pem Your key file has been saved at: /etc/letsencrypt/live/websitefortesting.com/privkey.pem Your cert will expire on 2021-11-27. To obtain a new or tweaked version of this certificate in the future, simply run certbot again with the "certonly" option. To non-interactively renew all of your certificates, run "certbot renew" If you like Certbot, please consider supporting our work by: Donating to ISRG / Let's Encrypt: https://letsencrypt.org/donate Donating to EFF: https://eff.org/donate-le
Per impostazione predefinita, Let’s Encrypt aggiungerà alcune righe al file di blocco del server Nginx.
Dovresti avere qualcosa del genere
server { server_name websitefortesting.com; add_header Strict-Transport-Security max-age=2592000; #rewrite ^ https://$server_name$request_uri? permanent; access_log /var/log/nginx/sonarqube.access.log; error_log /var/log/nginx/sonarqube.error.log; proxy_buffers 16 64k; proxy_buffer_size 128k; location / { proxy_pass http://127.0.0.1:9000; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto http; } listen 443 ssl; # managed by Certbot ssl_certificate /etc/letsencrypt/live/websitefortesting.com/fullchain.pem; # managed by Certbot ssl_certificate_key /etc/letsencrypt/live/websitefortesting.com/privkey.pem; # managed by Certbot include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot } server { if ($host = websitefortesting.com) { return 301 https://$host$request_uri; } # managed by Certbot
listen 80;
server_name websitefortesting.com; return 404; # managed by Certbot }
Passaggio 10: accedi a SonarQube con HTTPS
Ora puoi accedere a SonarQube in modo sicuro con l’URL HTTPS configurato con let’s encrypt.
https://domain-name
Dopo il login, verrà visualizzata la pagina di destinazione.
Conclusione
In questo tutorial, abbiamo imparato come installare SonarQube su Ubuntu 20.04. Ho abilitato Sonarqube con SSL utilizzando il certificato Let’s Encrypt utilizzando Nginx come proxy inverso.