在Ubuntu 20.04上安裝SonarQube

在本教程中,您將學習如何在Ubuntu 20.04上安裝SonarQube。 聲納®是一種自動代碼審查工具,可檢測代碼中的錯誤,漏洞和代碼味道。它可以與您現有的工作流程集成,以實現跨項目分支和提取請求的連續代碼檢查。

閱讀更多關於SonarQube的信息 SonarQube頁面

在Ubuntu 20.04上安裝SonarQube

先決條件

如下所述,在Ubuntu 20.04上安裝和運行SonarQube需要滿足許多先決條件。

系統硬件要求

  • 確保您正在運行64位系統,因為SonarQube不支持32位系統體系結構。
uname -m
x86_64
  • 至少2GB的RAM(用於企業用途的16GB + RAM)和2個vCPU內核(用於企業用途的8+ vCPU內核)用於小規模使用
  • 具有出色讀寫性能的磁盤。
  • 足夠的磁盤空間取決於您使用SonarQube分析的代碼量。

在Ubuntu 20.04上安裝Java 11

Java 11可以同時用於SonarQube服務器和掃描儀。因此,運行以下命令以在Ubuntu 20.04上安裝Java 11(您可以選擇安裝JRE或OpenJDK;請選擇安裝JRE或OpenJDK。

請注意,默認的Ubuntu 20.04主存儲庫上的默認版本是OpenJDK 11或JRE 11。

apt update

如果要使用JRE,請運行以下命令以將其安裝在Ubuntu 20.04上;否則,請執行以下步驟。

apt install default-jre

如果要使用OpenJDK,請運行以下命令;

apt install default-jdk

SonarQube的安裝和設置數據庫

SonarQube支持PostgreSQL(9.3-9.6、10-12版),Oracle(XE擴展,11G,12C,18C 19C)或Windows系統的MSSQL。

在本教程中,我們將在Ubuntu 20.04上安裝和設置SonarQube。

通過運行以下命令在Ubuntu 20.04上安裝PostgreSQL 12;

apt install postgresql postgresql-contrib

以PostgreSQL超級用戶身份登錄並創建SonarQube PostgreSQL數據庫和數據庫用戶

sudo -Hiu postgres
createuser sonaradmin
createdb -O sonaradmin sonarqubedb
psql
ALTER USER sonaradmin WITH ENCRYPTED password 'changeme';
q
exit

激活安全計算過濾器

seccomp過濾器缺省情況下,Elasticsearch所需的,通常在Ubuntu 20.04上默認啟用。要檢查seccomp是否在您的內核上可用,請執行以下操作:

grep SECCOMP /boot/config-$(uname -r)

如果看到這樣的輸出,則表示啟用了seccomp過濾器;

CONFIG_SECCOMP=y
CONFIG_HAVE_ARCH_SECCOMP_FILTER=y
CONFIG_SECCOMP_FILTER=y

執行報告字體

生成SonarQube執行報告需要Fontconfig和FreeType字體。如下安裝它們;

apt install fontconfig-config libfreetype6

在Ubuntu 20.04上安裝和配置SonarQube

滿足所有先決條件後,請繼續在Ubuntu 20.04上安裝SonarQube。

下載SonarQube存檔文件

SonarQube有不同版本。在此設置中,我們將安裝社區版本。因此,導航至 SonarQube下載 頁面並獲取SonarQube zip文件。

您也可以從下載鏈接 SonarQube二進制頁面 並使用wget或curl命令將其拉出

wget https://binaries.sonarsource.com/Distribution/sonarqube/sonarqube-8.7.0.41497.zip

在Ubuntu 20.04上安裝SonarQube

將SonarQube提取到某個目錄,例如 /opt 目錄。

apt install zip
unzip sonarqube-8.7.0.41497.zip -d /opt/

重命名SonarQube目錄以刪除版本號;

mv /opt/sonarqube{-8.7.0.41497,}

創建SonarQube系統用戶帳戶

SonarQube不應以root用戶身份運行。因此,您可以創建一個非管理員帳戶來運行SonarQube,如下所示;

useradd -M -d /opt/sonarqube/ -r -s /bin/bash sonarqube

設置的所有權 /opt/sonarqube 上面創建的聲納用戶。

chown -R sonarqube: /opt/sonarqube

配置SonarQube

根據上面的PostgreSQL設置來設置數據庫連接詳細信息。

vim /opt/sonarqube/conf/sonar.properties
# DATABASE
...
# User credentials.
...
sonar.jdbc.username=sonaradmin
sonar.jdbc.password=changeme
...
#----- PostgreSQL 9.3 or greater
# By default the schema named "public" is used. It can be overridden with the parameter "currentSchema".
#sonar.jdbc.url=jdbc:postgresql://localhost/sonarqube?currentSchema=my_schema
sonar.jdbc.url=jdbc:postgresql://localhost/sonarqube

保存並退出文件。

以上更改足以在其基本設置中的Ubuntu 20.04上運行SonarQube。

在Ubuntu 20.04上運行SonarQube

您可以使用以下命令以獨立模式啟動SonarQube /opt/sonarqube/bin/linux-x86-64/sonar.sh 通過傳遞腳本 start 選項如 /opt/sonarqube/bin/linux-x86-64/sonar.sh start,最好使用systemd服務單元。

創建SonarQube Systemd服務單元文件;

cat > /etc/systemd/system/sonarqube.service << 'EOL'
[Unit]
Description=SonarQube service
After=syslog.target network.target

[Service]
Type=simple
User=sonarqube
Group=sonarqube
PermissionsStartOnly=true
ExecStart=/bin/nohup java -Xms32m -Xmx32m -Djava.net.preferIPv4Stack=true -jar /opt/sonarqube/lib/sonar-application-8.7.0.41497.jar
StandardOutput=syslog
LimitNOFILE=131072
LimitNPROC=8192
TimeoutStartSec=5
Restart=always
SuccessExitStatus=143

[Install]
WantedBy=multi-user.target
EOL

請務必更換路徑, /opt/sonarqube/lib/sonar-application-8.7.0.41497.jar, 因此。

重新加載系統配置;

systemctl daemon-reload

設置彈性搜索的最大內存映射數;

echo 'vm.max_map_count=262144' >> /etc/sysctl.conf
sysctl -p

在Ubuntu 20.04上啟動並啟用SonarQube服務;

systemctl enable --now sonarqube

檢查狀態;

systemctl status sonarqube.service
● sonarqube.service - SonarQube service
     Loaded: loaded (/etc/systemd/system/sonarqube.service; enabled; vendor preset: enabled)
     Active: active (running) since Tue 2021-02-16 19:36:45 UTC; 2min 23s ago
   Main PID: 34811 (java)
      Tasks: 118 (limit: 2282)
     Memory: 1.4G
     CGroup: /system.slice/sonarqube.service
             ├─34811 java -Xms32m -Xmx32m -Djava.net.preferIPv4Stack=true -jar /opt/sonarqube/lib/sonar-application-8.7.0.41497.jar
             ├─34834 /usr/lib/jvm/java-11-openjdk-amd64/bin/java -XX:+UseConcMarkSweepGC -XX:CMSInitiatingOccupancyFraction=75 -XX:+UseCMSInitiatingOccupancyOnly -Djava.io>
             ├─34921 /usr/lib/jvm/java-11-openjdk-amd64/bin/java -Djava.awt.headless=true -Dfile.encoding=UTF-8 -Djava.io.tmpdir=/opt/sonarqube/temp -XX:-OmitStackTraceInF>
             └─34980 /usr/lib/jvm/java-11-openjdk-amd64/bin/java -Djava.awt.headless=true -Dfile.encoding=UTF-8 -Djava.io.tmpdir=/opt/sonarqube/temp -XX:-OmitStackTraceInF>

Feb 16 19:36:47 ubuntu20 nohup[34811]: OpenJDK 64-Bit Server VM warning: Option UseConcMarkSweepGC was deprecated in version 9.0 and will likely be removed in a future rel>
Feb 16 19:37:27 ubuntu20 nohup[34811]: 2021.02.16 19:37:27 INFO  app[][o.s.a.SchedulerImpl] Process[es] is up
Feb 16 19:37:27 ubuntu20 nohup[34811]: 2021.02.16 19:37:27 INFO  app[][o.s.a.ProcessLauncherImpl] Launch process[[key='web', ipcIndex=2, logFilenamePrefix=web]] from [/opt>
Feb 16 19:37:47 ubuntu20 nohup[34811]: 2021.02.16 19:37:47 WARN  app[][startup] ###########################################################################################>
Feb 16 19:37:47 ubuntu20 nohup[34811]: 2021.02.16 19:37:47 WARN  app[][startup] Default Administrator credentials are still being used. Make sure to change the password or>
Feb 16 19:37:47 ubuntu20 nohup[34811]: 2021.02.16 19:37:47 WARN  app[][startup] ###########################################################################################>
Feb 16 19:37:48 ubuntu20 nohup[34811]: 2021.02.16 19:37:48 INFO  app[][o.s.a.SchedulerImpl] Process[web] is up
Feb 16 19:37:48 ubuntu20 nohup[34811]: 2021.02.16 19:37:48 INFO  app[][o.s.a.ProcessLauncherImpl] Launch process[[key='ce', ipcIndex=3, logFilenamePrefix=ce]] from [/opt/s>
Feb 16 19:37:55 ubuntu20 nohup[34811]: 2021.02.16 19:37:55 INFO  app[][o.s.a.SchedulerImpl] Process[ce] is up
Feb 16 19:37:55 ubuntu20 nohup[34811]: 2021.02.16 19:37:55 INFO  app[][o.s.a.SchedulerImpl] SonarQube is up

您可以在下面找到所有日誌, /opt/sonarqube/logs 目錄。

ls /opt/sonarqube/logs
access.log  ce.log  es.log  README.txt  sonar.log  web.log

訪問SonarQube Web界面

為了訪問SonarQube Web界面,您需要安裝和設置Web服務器以將請求代理到本地運行的SonarQube。

您可以使用Apache或Nginx Web服務器。我們在本指南的後面部分中使用。

apt install nginx -y

使用代理設置創建SonarQube Nginx站點配置。

cat > /etc/nginx/sites-available/sonarqube << 'EOL' 
server{
    listen      80;
    server_name sonarqube.kifarunix-demo.com;

    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_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;
    }
}
EOL

檢查Nginx語法錯誤;

nginx -t

如果得到這樣的輸出,那就很好了。

nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

啟用S​​onarQube Nginx網站;

ln -s /etc/nginx/sites-available/sonarqube /etc/nginx/sites-enabled/

重啟Nginx;

systemctl restart nginx

根據您的設置,打開防火牆上的端口80 / tcp或端口443 / tcp;

ufw allow "Nginx Full"

使用地址訪問SonarQube http://sonarqube-server-host-IP-or-hostname

系統將提示您輸入登錄詳細信息。

默認身份驗證憑據為 用戶名: 行政 密碼: 行政

在Ubuntu 20.04上安裝SonarQube

出現提示時,重置密碼並進入SonarQube Web界面。

在Ubuntu 20.04上安裝SonarQube

然後你去。您已經了解了如何在Ubuntu 20.04上安裝SonarQube。

參考

安裝SonarQube

進一步閱讀

SonarQube文檔

其他教程

在Ubuntu 20.04上安裝Nexus Repository Manager

在Debian 10上安裝和設置GVM 20.08

在Ubuntu 20.04上安裝Signal Messenger

在Ubuntu 20.04上安裝NoMachine

在Ubuntu 20.04上安裝和設置GVM 20.08

Sidebar