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: NSaving 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 Certbotlisten 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.