在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