Snem každého vývojáře je mít čistý a bezproblémový kód, který lze snadno nasadit do pracovního a produkčního prostředí. Jedním z nástrojů, který vám toho může pomoci dosáhnout, je ve vašem CI/CD potrubí SonarQube. SonarQube je multiplatformní a webový nástroj používaný pro průběžnou kontrolu zdrojového kódu. Je napsán v Javě. SonarQube vám umožňuje psát čistší a bezpečnější kód kontrolou kódu a zjišťováním chyb a jiných nesrovnalostí.
SonarQube lze integrovat do platforem, jako jsou GitHub, Gitlab, BitBucket a Azure DevOps, abychom zmínili několik platforem. Dodává se v různých edicích, včetně edic Community, Developer, Enterprise a Datacenter.
V tomto tutoriálu se naučíme, jak instalovat SonarQube na Ubuntu 20.04 . Nainstalujeme komunitní edici, protože je zdarma ke stažení a povolení certifikátu SSL (https) pomocí Let's Encrypt nastavením Nginx jako reverzního proxy.
Předpoklady
Než začnete, ujistěte se, že splňujete následující požadavky:
- Ubuntu 20.04 LTS s nakonfigurovaným uživatelem sudo.
- Ujistěte se, že váš systém má minimálně 4 GB RAM a 2 jádra vCPU
Budete muset nainstalovat nějaké nástroje
$ sudo apt update
$ sudo apt install net-tools unzip vim curl
Také musíte zvětšit jádro virtuální paměti
$ sudo sysctl -w vm.max_map_count=262144
s maximálním počtem otevřených souborů
$ sudo sysctl -w fs.file-max=65536
a limity zdrojů
$ ulimit -n 65536
$ ulimit -u 4096
Změny můžete přetrvat úpravou systémových parametrů v /etc/sysctl.conf
konfigurační soubor
$ sudo vim /etc/sysctl.conf
Přidejte následující řádky.
vm.max_map_count=262144
fs.file-max=65536
ulimit -n 65536
ulimit -u 4096
Uložit a odejít. Poté otevřete soubor limits.conf
soubor
$ sudo vim /etc/security/limits.conf
Úplně dole přidejte následující řádky
sonarqube - nofile 65536
sonarqube - nproc 4096
Uložit a odejít. Aby se změny projevily, restartujte server.
Krok 1:Nainstalujte OpenJDK
Jelikož je SonarQube napsán v Javě, jeho fungování závisí na Javě. Nainstalujeme OpenJDK 11, který poskytuje java.
$ sudo apt install openjdk-11-jdk
Po instalaci můžete ověřit verzi Java.
$ java -version
Krok 2:Instalace databáze PostgreSQL
Od roku 2016 SonarQube upustil od podpory MySQL a nyní podporuje pouze PostgreSQL. Proto musíme nainstalovat databázi PostgreSQL.
Chcete-li začít, stáhněte si a přidejte klíč PostgreSQL GPG.
$ wget -q https://www.postgresql.org/media/keys/ACCC4CF8.asc -O - | sudo apt-key add -
Poté přidejte úložiště 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'
Poté aktualizujte index balíčku, aby se synchronizovalo nové úložiště.
$ sudo apt update
Jakmile dokončíte aktualizaci seznamů balíčků, nainstalujte databázi PostgreSQL a její závislosti.
$ sudo apt install postgresql postgresql-contrib
Ve výchozím nastavení se služba PostgreSQL spustí po instalaci, pokud není spuštěna, spusťte následující příkaz.
$ sudo systemctl start postgresql
Chcete-li potvrdit, že vše běží podle očekávání, ověřte jeho provozní stav.
$ sudo systemctl status postgresql
Můžete také potvrdit port, na kterém naslouchá:
$ 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
Povolit automatické spouštění PostgreSQL při bootování:
$ sudo systemctl enable postgresql
Náš PostgreSQL je zatím v provozu bez jakýchkoliv problémů.
Krok 3:Konfigurace PostgreSQL
Nyní nastavíme heslo pro uživatele Postgres, které se obvykle objeví ve výchozím nastavení, když je nainstalován PostgreSQL. Chcete-li to provést, spusťte příkaz:
$ sudo passwd postgres
Zadejte heslo a potvrďte jej. Dále se přepněte na uživatele Postgres.
$ su - postgres
Dále pokračujte a vytvořte nového uživatele databáze.
$ createuser sonar
Po dokončení se přepněte na výzvu PostgreSQL pomocí příkazu:
$ psql
S přístupem do prostředí PostgreSQL vytvořte heslo pro uživatele, kterého jste právě vytvořili.
ALTER USER sonar WITH ENCRYPTED PASSWORD 'strong_password';
Dále vytvořte databázi SonarQube s uživatelem, kterého jste vytvořili jako vlastníka
CREATE DATABASE sonarqube OWNER sonar;
Poté přiřaďte nebo udělte všechna oprávnění použití databáze, aby měli všechna oprávnění k úpravě databáze.
GRANT ALL PRIVILEGES ON DATABASE sonarqube to sonar;
Nyní ukončete databázi.
\q
Krok 4:Stáhněte a nakonfigurujte SonarQube
Pokračujeme a stáhneme nejnovější binární soubor zip SonarQube. V tuto chvíli je nejnovější vydání Community Edition, což je vydání Long Term Service (LTS), SonarQube verze 9.0.1. Můžete přejít na stránku stahování SonarQube, kde najdete nejnovější soubory ke stažení.
Chcete-li stáhnout soubor zip, zadejte příkaz:
$ wget https://binaries.sonarsource.com/Distribution/sonarqube/sonarqube-9.0.1.46107.zip
Dále rozbalte komprimovaný soubor.
$ unzip sonarqube-9.0.1.46107.zip
A přesuňte jej do cesty /opt/.
$ sudo mv sonarqube-9.0.1.46107 /opt/sonarqube
Krok 5:Vytvořte nového uživatele a skupinu
Dále vytvoříme nového uživatele a skupinu, která bude provozovat službu SonarQube. Takže vytvořte skupinu.
$ sudo groupadd sonar
Poté vytvořte uživatele s domovským adresářem nastaveným na /opt/sonarqube a přidejte uživatele do nově vytvořené skupiny.
$ sudo useradd -c "SonarQube - User" -d /opt/sonarqube/ -g sonar sonar
Poté nastavte vlastnictví do adresáře /opt/sonarqube.
$ sudo chown -R sonar:sonar /opt/sonarqube/
Krok 6:Konfigurace SonarQube
Pojďme nyní nakonfigurovat SonarQube. Otevřete konfigurační soubor SonarQube.
$ sudo vim /opt/sonarqube
/conf/sonar.properties
Najděte a zrušte komentář na následujících řádcích
sonar.jdbc.username=
sonar.jdbc.password=
Ty představují uživatele databáze SonarQube a heslo, které jsme vytvořili na databázovém serveru PostgreSQL. Hodnoty tedy vyplňte podle toho.
sonar.jdbc.username=sonar_user
sonar.jdbc.password=strong_password
Dále upravte tyto řádky tak, aby vypadaly jako poskytnuté
sonar.jdbc.url=jdbc:postgresql://localhost:5432/sonarqube
sonar.search.javaOpts=-Xmx512m -Xms512m -XX:MaxDirectMemorySize=256m -XX:+HeapDumpOnOutOfMemoryError
Poté upravte následující řádky, aby vypadaly tak, jak vypadají.
sonar.web.host=0.0.0.0
sonar.web.port=9000
sonar.web.javaAdditionalOpts=-server
sonar.log.level=INFO
sonar.path.logs=logs
Dále upravte uživatele, který bude spouštět službu SonarQube, úpravou zobrazeného souboru.
$ sudo vim /opt/sonarqube/bin/linux-x86-64/sonar.sh
Přejděte dolů a ujistěte se, že řádek níže vypadá jako na obrázku.
RUN_AS_USER=sonar
Krok 7:Vytvořte soubor služby Systemd pro SonarQube
V tuto chvíli náš systém nemá žádný způsob, jak spustit službu SonarQube. Proto musíme vytvořit službu systemd. Chcete-li to provést, spusťte příkaz:
$ sudo vim /etc/systemd/system/sonarqube.service
Přidejte následující řádky.
[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
Uložte změny a ukončete soubor.
Povolte spuštění služby SonarQube při spuštění
$ sudo systemctl enable sonarqube
A spusťte službu SonarQube.
$ sudo systemctl start sonarqube
Abyste zajistili, že služba SonarQube běží, spusťte příkaz:
$ sudo systemctl status sonarqube
Také se ujistěte, že je otevřen port 9000
$ sudo ufw allow '9000'
Rules updated
Rules updated (v6)
Zkontrolujte, zda služba naslouchá na portu 9000
$ sudo netstat -pnltu | grep 9000
tcp6 0 0 :::9000 :::* LISTEN 65140/java
Nyní můžete zkusit zkontrolovat, zda máte přístup na přihlašovací stránku zadáním veřejné IP vašeho serveru a čísla portu z vašeho prohlížeče, tj. http://<server-ip>:9000/
. Výchozí uživatelské jméno správce je 'admin' a heslo je 'admin'.
Sonarqube vás požádá o aktualizaci hesla, aby bylo možné změnit výchozí.
Krok 8:Nainstalujte a nakonfigurujte Nginx s SSL (volitelné)
Chcete-li získat přístup k vašemu Sonarqube s názvem domény s povoleným SSL, budete muset nainstalovat reverzní proxy, jako je Nginx. Webový server bude proxy připojení k SonarQube, aby k němu vývojáři měli přístup ze zabezpečeného názvu domény.
Instalace Nginx je jednoduchá a přímočará a lze ji provést jediným příkazem.
$ sudo apt install nginx
Po instalaci povolte spuštění webového serveru Nginx při spuštění.
$ sudo systemctl enable nginx
A spusťte službu
$ sudo systemctl start nginx
Aby byl webový server informován o SonarQube, vytvoříme zobrazený konfigurační soubor.
$ sudo vim /etc/nginx/sites-available/sonarqube.conf
Poté vložte poskytnutý obsah.
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;
}
}
Uložit a odejít. Poté povolte web Sonarqube:
$ sudo ln -s /etc/nginx/sites-available/sonarqube.conf /etc/nginx/sites-enabled/sonarqube.conf
Zkontrolujte, zda je konfigurace správná
$ sudo nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
Poté restartujte webový server Nginx, aby se změny uplatnily.
$ sudo systemctl restart nginx
Nyní musíme nakonfigurovat firewall UFW tak, aby umožňoval nginx. Chcete-li to provést, spusťte příkazy
$ sudo ufw allow 'Nginx Full'
Poté znovu načtěte firewall, aby se změny projevily.
$ sudo ufw --reload
Nyní můžete přistupovat k vašemu SonarQube prostřednictvím jeho názvu domény
Zde použijeme bezplatný certifikát let's encrypt. Abychom to nakonfigurovali, musíme spustit cerbot pro 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): [email protected] 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
Ve výchozím nastavení, pojďme zašifrovat, přidá několik řádků do souboru bloku serveru Nginx.
Měli byste mít něco takového
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 }
Krok 10:Přístup k SonarQube pomocí HTTPS
Nyní můžete k SonarQube přistupovat bezpečně pomocí HTTPS URL nakonfigurované pomocí let's encrypt.
https://domain-name
Po přihlášení se vám zobrazí vstupní stránka.
Závěr
V tomto tutoriálu jsme se naučili, jak nainstalovat SonarQube na Ubuntu 20.04. Povolili jsme Sonarqube s SSL pomocí certifikátu Let's Encrypt pomocí Nginx jako reverzního proxy.