如何在 Ubuntu 22.04 上安装 SonarQube
本教程适用于这些操作系统版本
- Ubuntu 22.04(Jammy Jellyfish)
- Ubuntu 16.04(Xenial Xerus)
在此页
- 先决条件
- 安装 Java OpenJDK
- 安装 PostgreSQL 数据库系统
- 设置系统
- 正在下载 SonarQube 包
- 配置 SonarQube
- 使用反向代理运行 SonarQube
- SonarQube 安装
- 结论
SonarQube 或以前的 Sonar 是一个用于静态代码分析和代码安全的开源平台。它允许您执行静态代码分析和代码质量,以检测错误并增强应用程序安全性。它还提供重复代码、编码标准、代码复杂性和安全建议等报告。
使用 sonarQube,您可以为 29 种编程语言自动执行静态代码分析。您可以轻松地将 SonarQube 与现有的 CI/CD 工具(例如 Jenkins、Azure DevOps 或 IDE,例如 IntelliJ 和 Visual Code Studio)集成。
在本指南中,您将学习如何在 Ubuntu 22.04 服务器上安装 SonarQube 静态代码分析。您还将学习如何安装将用作 SonarQube 数据库的 PostgreSQL 和将用作反向代理的 Nginx Web 服务器。
先决条件
在开始本指南之前,您应该具备以下条件:
- 启用了 UFW 防火墙的 Ubuntu 服务器 22.04。
- 具有 sudo/管理员权限的非根用户。
- 指向 Ubuntu 服务器 IP 地址的域名。
安装 Java OpenJDK
第一步是在 Ubuntu 系统上安装 Java OpenJDK。 SonarQube 服务器需要在您的 Linux 机器上安装 Java OpenJDK v11。
在开始安装软件包之前,请运行以下 apt 命令来更新和刷新您的 Ubuntu 软件包索引存储库。
sudo apt update
然后,使用以下 apt 命令安装 Java OpenJDK v11。最新 Ubuntu 22.04 上的默认 OpenJDK 版本是 Java OpenJDK v11。
在提示确认安装时输入 Y,然后按 ENTER 继续。
sudo apt install default-jdk

安装 Java OpenJDK 后,使用以下 java 命令验证 Java 版本。您将看到系统上安装的 Java 版本的输出。
java -version

安装 PostgreSQL 数据库系统
SonarQube 支持 PostgreSQL、Microsoft SQL Server、oracle 数据库等多种数据库系统。对于此示例,您将使用 PostgreSQL 作为 SonarQube 安装的数据库。
在撰写本文时,最新版本的 SonarQube 至少需要 PostgreSQL v9.6。在本指南中,您将从官方 PostgreSQL 存储库安装 PostgreSQL v13。
首先,使用以下命令添加 PostgreSQL 存储库的 GPG 密钥。
wget -q https://www.postgresql.org/media/keys/ACCC4CF8.asc -O - | sudo apt-key add -
现在,使用以下命令为 Ubuntu 系统添加 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'
然后,更新并刷新您的 ubuntu 包索引。
sudo apt update

现在,通过下面的 apt 命令安装 PostgreSQL 数据库 v13。在提示确认安装时输入 Y,然后按 ENTER 继续。
sudo apt install postgresql-13

安装 PostgreSQL 后,运行以下命令来验证 postgresql 服务并确保该服务正在运行。
sudo systemctl is-enabled postgresql
sudo systemctl status postgresql
您将看到 postgresql 服务的输出已启用,这意味着将在系统启动时自动运行。而postgresql服务的当前状态是running。

在您的服务器上安装 PostgreSQL 后,您就可以通过 PostgreSQL shell 为 SonarQube 设置一个新的数据库和用户。
运行以下命令以登录到 PostgreSQL shell。
sudo -u postgres psql
现在,运行以下 PostgreSQL 查询为 SnonarQube 创建一个新的数据库和用户。在此示例中,您将创建 PostgreSQL 数据库和用户 sonarqube。并确保使用强密码更改密码。
CREATE USER sonarqube WITH PASSWORD 'Password';
CREATE DATABASE sonarqube OWNER sonarqube;
GRANT ALL PRIVILEGES ON DATABASE sonarqube TO sonarqube;

接下来,运行以下查询以检查 PostgreSQL 服务器上的数据库和用户列表。
\l
\du
如果您的数据库和用户已创建,您将在数据库列表中看到数据库 sonarqube,在用户列表中看到用户 sonarqube。

最后,使用下面的查询从 PostgreSQL 注销。
\q
设置系统
要在 Linux 系统上安装 SonarQube,您必须有一个专门的用户来运行 SonarQube 和一些额外的配置,例如 ulimit 和内核参数。
现在,您将为 SonarQube 创建一个新用户,并通过 sysctl.conf 文件设置自定义内核参数,并设置 ulimit。
运行以下命令在您的系统上创建一个新用户 sonarqube。
sudo useradd -b /opt/sonarqube -s /bin/bash sonarqube
接下来,使用 nano 编辑器打开文件 /etc/sysctl.conf。
sudo nano /etc/sysctl.conf
将以下配置添加到该行的底部。 SonarQube 要求内核参数 vm.max_map_count 大于 524288,fx.file-max 大于 131072。
vm.max_map_count=524288
fs.file-max=131072
完成后保存文件并退出编辑器。
现在,运行下面的 sysctl 命令以在 /etc/sysctl.conf 文件上应用新更改。
sudo sysctl --system
在以下输出中,您可以看到应用了新的内核参数。

Next, run the following command to set up ulimit for the SonarQube. This will take temporary effects on your system, when the system is rebooted, the ulimits will revert to default.
ulimit -n 131072
ulimit -u 8192
要永久设置 ulimit 配置,请使用以下命令创建一个新的配置文件 /etc/security/limits.d/99-sonarqube.conf。
sudo nano /etc/security/limits.d/99-sonarqube.conf
将以下配置添加到文件中。
sonarqube - nofile 131072
sonarqube - nproc 8192
完成后保存文件并关闭编辑器。
现在您已经完成了用于安装 SnonarQube 的 Ubuntu 系统的配置。您将在下一步中下载 SonarQube 包并设置 SonarQube 安装。
下载 SonarQube 包
SonarQube 可以通过 zip 文件和 Docker 映像以两种不同的方式安装。在此示例中,您将通过从官方 SonarQube 下载页面下载的 zip 文件包安装 SonarQube。
在撰写本文时,您将按照以下步骤安装 SonarQube 最新版本 v9.6.1。
在下载SonarQube包之前,运行下面的apt命令安装一个基础包,比如unzip和wget。
sudo apt install unzip software-properties-common wget
现在,通过下面的 wget 命令下载 SonarQube 包。
wget https://binaries.sonarsource.com/Distribution/sonarqube/sonarqube-9.6.1.59531.zip
下载 SonarQube 后,您将在工作目录中看到 zip 文件 sonarqube-9.6.1.59531.zip。
使用下面的解压缩命令提取 SonarQube 包。您应该获得一个新目录 sonarqube-9.6.1.59531,其中存储了 SonarQube 包。
unzip sonarqube-9.6.1.59531.zip
使用以下命令将目录 sonarqube-9.6.1.59531 移动到 /opt/sonarqube。
mv sonarqube-9.6.1.59531 /opt/sonarqube
最后,通过 chown 命令将 SonarQube 安装目录 /opt/sonarqube 的所有权更改为用户 sonarquba,如下所示。
sudo chown -R sonarqube:sonarqube /opt/sonarqube
现在您已经将 SonarQube 包下载到安装目录/opt/sonarqube。接下来,您将配置 SonarQube 安装,然后为 SonarQube 设置 systemd 服务文件。

配置 SonarQube
下载 SonarQUbe 包后,您将通过编辑默认配置文件 /opt/sonarqube/conf/sonar.properties 来设置 SonarQUbe 安装。
您将添加 PostgreSQL 数据库详细信息,为 Elasticsearch 进程设置最大内存堆,并通过文件 /opt/sonarqube/conf/sonar.properties 为 SonarQube 服务设置 Web 主机和端口。最后,您将把 SonarQube 设置为系统服务。
现在,使用 nano 编辑器打开 SonarQube 配置文件 /opt/sonarqube/conf/sonar.properties。
nano /opt/sonarqube/conf/sonar.properties
对于数据库配置,取消注释以下某些选项并使用您的数据库详细信息更改默认值。
sonar.jdbc.username=sonarqube
sonar.jdbc.password=Password
sonar.jdbc.url=jdbc:postgresql://localhost:5432/sonarqube
现在,取消注释以下配置以设置 elasticsearch 进程的最大堆内存大小。在他的示例中,最大堆将为 512 MB。
sonar.search.javaOpts=-Xmx512m -Xms512m -XX:MaxDirectMemorySize=256m -XX:+HeapDumpOnOutOfMemoryError
最后,取消注释并更改以下配置以设置将运行的 SonarQube 的 IP 地址和端口。此外,日志级别将是 INFO\ 并存储在 SonarQube 安装目录的 logs 目录中。
sonar.web.host=127.0.0.1
sonar.web.port=9000
sonar.web.javaAdditionalOpts=-server
sonar.log.level=INFO
sonar.path.logs=logs
完成后保存文件并退出编辑器。
完成 SonarQube 配置后。现在,您将为 SonarQube 设置 systemd 服务文件。这使您可以使用 systemctl 命令轻松控制 SonarQube 进程。
运行以下命令创建一个新的 systemd 服务文件 /etc/systemd/system/sonarqube.service。
sudo nano /etc/systemd/system/sonarqube.service
将以下配置添加到文件中。
[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=sonarqube
Group=sonarqube
Restart=always
LimitNOFILE=65536
LimitNPROC=4096
[Install]
WantedBy=multi-user.target
完成后保存文件并退出编辑器。
现在,使用以下命令重新加载 systemd 管理器。
sudo systemctl daemon-reload
之后,通过下面的 systemctl 命令启动并启用 sonarqube.service。
sudo systemctl start sonarqube.service
sudo systemctl enable sonarqube.service

最后,使用以下命令验证 sonarqube.service 状态并确保其状态为运行。
sudo systemctl status sonarqube.service
您将在以下屏幕截图中看到输出。 sonarqube.service 的状态是running,同时也是enabled,这意味着它会在系统启动时自动运行。

现在您已经将 SonarQube 作为 systemd 服务运行,您将为在默认端口 TCP 9000 的本地主机上运行的 SonarQube 安装和设置反向代理。
使用反向代理运行 SonarQube
您的 SonarQube 安装现在正在运行,您现在可以安装 Nginx Web 服务器并设置将用作 SonarQube 反向代理的服务器块。
运行以下 apt 命令将 Nginx Web 服务器安装到您的 Ubuntu 系统。在提示确认安装时输入 Y,然后按 ENTER 继续。
sudo apt install nginx

安装 nginx 后,通过 systemctl 命令验证 nginx 服务并确保服务状态正在运行,如下所示。
sudo systemctl is-enabled nginx
sudo systemctl status nginx
您将看到 nginx 服务的输出已启用,这意味着它将在系统启动时自动运行。而nginx服务的当前状态是running。

在 Nginx Web 服务器运行后,您将创建一个新的服务器块配置,该配置将用作 SonarQube 的反向代理。
使用以下命令创建一个新的服务器块配置 /etc/nginx/sites-available/sonarqube.conf。
sudo nano /etc/nginx/sites-available/sonarqube.conf
将以下配置添加到您的文件中,并确保更改域名。
server {
listen 80;
server_name sonar.hwdomain.io;
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;
}
}
完成后保存文件并退出编辑器。
接下来,通过创建该文件到 /etc/nginx/sites-enabled 目录的符号链接来激活服务器块配置 sonarqube.conf。然后,验证您的 Nginx 配置文件。
sudo ln -s /etc/nginx/sites-available/sonarqube.conf /etc/nginx/sites-enabled/
sudo nginx -t
如果您有正确且正确的 Nginx 配置文件,您应该会看到诸如“测试成功”之类的输出消息。
最后,运行下面的 systemctl 命令重启 nginx 服务并应用新的服务器块配置。
sudo systemctl restart nginx
SonarQube 安装
完成 SonarQube 的反向代理配置后,现在您可以通过您的域访问您的 SonarQube 安装并设置 SonarQube 的一些基本配置。
打开您的 Web 浏览器并访问您的 SonarQube 安装的域名(即:http://sonar.hwdomain.io)。
现在您将获得 SonarQube 登录页面。输入默认的用户名和密码admin/admin,点击登录。

登录后,系统会要求您为 SnonarQube 设置一个新密码。输入旧密码admin,然后输入新的强密码并重复,然后点击更新。

现在您将在以下屏幕截图中看到 SonarQube 用户仪表板。

结论
在本指南中,您已在最新的 Ubuntu 22.04 服务器上安装了 SonarQube。此外,您还通过官方 PostgreSQL 存储库完成了 PostgreSQL 数据库的基本安装,并安装了 Nginx Web 服务器。之后,您还为带有 Nginx 服务器块的 SONarQube 配置了反向代理。
SonarQube 现已安装在您的 Ubuntu 服务器上。您现在可以通过 git 存储库将要分析的项目添加到 SonarQube。