参考资料如下
本文写作时,Sonarqude最新版本为10.4.1.88267
,系统为Rocky Linux 9 64bit,CPU架构为AMD64。
更新日志
时间 |
内容 |
2024年4月13日 |
v1.0 硬件要求,配置环境,安装Sonarqube服务器 |
一、硬件要求
根据官方文档硬件要求所述:
- SonarQube 服务器的小规模(个人或小团队)实例需要至少 2GB RAM 才能高效运行,并需要 1GB 可用 RAM 用于操作系统。如果您要为大型团队或企业安装实例,请考虑以下其他建议。
- 您需要的磁盘空间量取决于您使用 SonarQube 分析的代码量。
- SonarQube 必须安装在具有出色读写性能的硬盘上。 最重要的是,“data”文件夹包含 Elasticsearch 索引,当服务器启动并运行时,将在该索引上完成大量 I/O。 因此,硬盘的读写性能将对SonarQube服务器的整体性能产生很大影响。
- SonarQube 和 SonarScanner 仅支持 64 位系统。
二、配置环境
1. 更新软件包
如果更新速度慢,可以通过下列命令切换到国内中科大镜像源
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
# Rocky Linux 8
sudo sed -e 's|^mirrorlist=|#mirrorlist=|g' \
-e 's|^#baseurl=http://dl.rockylinux.org/$contentdir|baseurl=https://mirrors.ustc.edu.cn/rocky|g' \
-i.bak \
/etc/yum.repos.d/Rocky-AppStream.repo \
/etc/yum.repos.d/Rocky-BaseOS.repo \
/etc/yum.repos.d/Rocky-Extras.repo \
/etc/yum.repos.d/Rocky-PowerTools.repo
# Rocky Linux 9
sudo sed -e 's|^mirrorlist=|#mirrorlist=|g' \
-e 's|^#baseurl=http://dl.rockylinux.org/$contentdir|baseurl=https://mirrors.ustc.edu.cn/rocky|g' \
-i.bak \
/etc/yum.repos.d/rocky-extras.repo \
/etc/yum.repos.d/rocky.repo
|
以上命令只替换了默认启用的仓库。替换之后请运行 dnf makecache
更新缓存。
2. 创建并切换到sonar用户
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
# 创建用户
sudo useradd -s /bin/bash -d /opt/sonar -m sonar
# 授予管理员权限
echo "sonar ALL=(ALL) NOPASSWD: ALL" | sudo tee /etc/sudoers.d/sonar
# 修改密码(可选)
sudo passwd sonar
> Changing password for user sonar.
> New password:
> Retype new password:
# 切换用户
sudo -i -u sonar
|
3. 下载JAVA 17
由于可以通过指定环境变量SONAR_JAVA_PATH
手动指定Java可执行文件,我们不在系统环境变量中配置Java,只要在用户文件夹中保留一份Java可执行文件的副本就行。
根据官方文档先决条件和概述所述,如下表,SonarQube 10.4服务器需要 Java 17。可以从Oracle官网下载。
Java |
Server |
Scanners |
Oracle JRE |
17 |
17 |
OpenJDK |
17 |
17 |
1
2
3
4
5
6
7
|
# 下载Java可执行文件并解压
wget https://download.oracle.com/java/17/latest/jdk-17_linux-x64_bin.tar.gz
tar -zxvf jdk-17_linux-x64_bin.tar.gz
# 配置环境变量
echo "export SONAR_JAVA_PATH=\"/opt/sonar/jdk-17.0.10/bin/java\"" >> ~/.bashrc
source ~/.bashrc
|
- 理论上,仅安装JRE就可以满足存在Java可执行文件的需求。
- 也可以通过包管理器安装JDK或者JRE。
- 结合以上两点,可以通过命令
sudo dnf install java-17-openjdk -y
安装JRE 17
根据官方文档先决条件和概述所述,Sonarqude支持的数据库如下表。
PostgreSQL |
15 |
|
14 |
|
13 |
|
12 |
|
11 |
|
必须配置为使用 UTF-8 字符集 |
Microsoft SQL Server |
2022 (MSSQL 16.0) with bundled Microsoft JDBC driver. Express Edition is supported. |
|
2019 (MSSQL Server 15.0) with bundled Microsoft JDBC driver. Express Edition is supported. |
|
2017 (MSSQL Server 14.0) with bundled Microsoft JDBC driver. Express Edition is supported. |
|
2016 (MSSQL Server 13.0) with bundled Microsoft JDBC driver. Express Edition is supported. |
|
2014 (MSSQL Server 12.0) with bundled Microsoft JDBC driver. Express Edition is supported. |
|
排序规则必须区分大小写 (CS) 和区分重音 (AS) (例如: Latin1_General_CS_AS ). |
|
必须在 SonarQube 数据库上设置READ_COMMITTED_SNAPSHOT ,以避免在重负载下出现潜在的死锁。 |
|
支持 Windows 身份验证(“集成安全性”)和 SQL Server 身份验证。有关配置身份验证的说明,请参阅安装数据库中的 Microsoft SQL Server 部分。 |
Oracle |
21C |
|
19C |
|
XE Editions |
|
必须配置为使用 UTF8 系列字符集(请参见NLS_CHARACTERSET )。 |
|
不支持驱动程序ojdbc14.jar 。 |
|
我们建议使用最新的 Oracle JDBC 驱动程序。 |
|
仅支持精简模式,不支持 OCI。 |
|
仅支持 MAX_STRING_SIZE=STANDARD 参数,不支持 EXTENDED 。 |
这里选择使用postgresql 15数据库,采用本地安装,安装教程可以参考PostgreSQL 下载。这里参考官方教程,采用阿里云源加速安装。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
# 安装存储库RPM
sudo dnf install -y https://mirrors.aliyun.com/postgresql/repos/yum/reporpms/EL-9-x86_64/pgdg-redhat-repo-latest.noarch.rpm
# 替换下载链接
sudo sed -i "s@https://download.postgresql.org/pub@https://mirrors.aliyun.com/postgresql@g" /etc/yum.repos.d/pgdg-redhat-all.repo
# 禁用内置的PostgreSQL模块
sudo dnf -qy module disable postgresql
# 安装PostgreSQL
sudo dnf install -y postgresql15-server
# 初始化数据库并启用自动启动
sudo /usr/pgsql-15/bin/postgresql-15-setup initdb
sudo systemctl enable postgresql-15
sudo systemctl start postgresql-15
|
下面创建Sonarqude需要的数据库和用户
1
2
3
|
# 切换到postgres用户以登录postgresql数据库
sudo -i -u postgres
psql
|
此时进入postgres控制台,输入行头部为postgres=#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
|
# 创建sonar用户,xxxxxxx为自定义密码
CREATE USER sonar WITH ENCRYPTED PASSWORD 'xxxxxxx'; # eg. PcPak6vCmLvNYpC9
# 创建sonar数据库
CREATE DATABASE sonar;
# 赋予指定账户指定数据库所有权限
GRANT ALL PRIVILEGES ON DATABASE sonar TO sonar;
# 修改 sonar 数据库所属者为 sonar
ALTER DATABASE sonar OWNER TO sonar;
# 查看库和用户名
\l sonar
#输出
List of databases
Name | Owner | Encoding | Collate | Ctype | ICU Locale | Locale Provider | Access privileges
-------+-------+----------+-------------+-------------+------------+-----------------+-------------------
sonar | sonar | UTF8 | en_US.UTF-8 | en_US.UTF-8 | | libc | =Tc/sonar +
| | | | | | | sonar=CTc/sonar
\du sonar
# 输出
List of roles
Role name | Attributes | Member of
-----------+------------+-----------
sonar | | {}
# 退出数据库
\q
# 注销postgres用户
logout
# 重启数据库
sudo systemctl restart postgresql-15
|
5. 修改系统限制
根据平台备注-Linux所述,如果您在 Linux 上运行,则ll必须确保:
vm.max_map_count
大于或等于524288
fs.file-max
大于或等于131072
- 运行 SonarQube 的用户可以打开至少 131072 个文件描述符
- 运行SonarQube的用户可以打开至少8192个线程
可以使用以下命令查看这些值:
1
2
3
4
|
sysctl vm.max_map_count
sysctl fs.file-max
ulimit -n
ulimit -u
|
您可以通过运行以下命令为当前会话临时设置它们(需要root身份或sudo):
1
2
3
4
|
sysctl -w vm.max_map_count=524288
sysctl -w fs.file-max=131072
ulimit -n 131072
ulimit -u 8192
|
要更永久地设置这些值,您必须创建/etc/sysctl.d/99-sonarqube.conf
(或者修改/etc/sysctl.conf
)来修改这些值。
1
|
echo "vm.max_map_count = 524288" > /etc/sysctl.d/99-sonarqube.conf
|
如果运行 SonarQube 的用户 (在此示例中为sonar
)没有权限打开至少 131072 个描述符,您必须以下内容插入/etc/security/limits.d/99-sonarqube.conf
(或者/etc/security/limits.conf
):
1
2
|
sonar - nofile 131072
sonar - nproc 8192
|
6. seccomp过滤器
默认情况下,Elasticsearch使用seccomp
筛选。确保您使用的内核启用了seccomp。
检查一下 seccomp
在您的内核上可用,请使用:
1
|
grep SECCOMP /boot/config-$(uname -r)
|
如果你的内核有 seccomp
,将看到以下内容:
1
2
3
|
CONFIG_HAVE_ARCH_SECCOMP_FILTER=y
CONFIG_SECCOMP_FILTER=y
CONFIG_SECCOMP=y
|
三、安装Sonarqube服务器
1. 简介
SonarQube 实例包含三个组件:

-
SonarQube 服务器运行以下进程:
-
数据库存储以下内容:
- 代码扫描期间生成的代码质量和安全性指标和问题。
- SonarQube 实例配置。
-
在构建或持续集成服务器上运行的一台或多台扫描仪来分析项目。
2. 从 ZIP 文件安装 SonarQube 服务器
下载并解压发行版。(不要解压到以数字开头的目录中)。 由于有大佬制作了破解补丁,我们可以去体验一下企业版本。各个版本区别如下:

1
2
3
4
|
# 下载企业版并解压
wget https://binaries.sonarsource.com/CommercialDistribution/sonarqube-enterprise/sonarqube-enterprise-10.4.1.88267.zip -O sonarqube-enterprise.zip
unzip sonarqube-enterprise.zip
mv sonarqube-10.4.1.88267 sonarqube
|
SonarQube 在基于 Unix 的系统上无法以 root
运行。
<sonarqubeHome>
(下面所示)指的是 SonarQube 发行版解压目录的路径,在本案例中为/opt/sonar/sonarqube
。
破解补丁
上传SonarQubeAgent-1.2-SNAPSHOT.jar
到/opt/sonar/sonarqube
,该文件可在SonarQube 破解下载。
使用编辑器(VIM,NANO)打开/opt/sonar/sonarqube/conf/sonar.properties
,修改如下内容
1
2
3
4
5
6
7
8
9
10
11
12
|
#sonar.web.javaOpts=-Xmx1G -Xms128m -XX:+HeapDumpOnOutOfMemoryError
# -javaagent:/opt/sonar/Applications/sonarqube-10.4.1.88267/SonarQubeAgent-1.2-SNAPSHOT.jar
# 修改为,注意去掉开头的#号
sonar.web.javaOpts=-javaagent:/opt/sonar/sonarqube/SonarQubeAgent-1.2-SNAPSHOT.jar -Xmx1G -Xms128m -XX:+HeapDumpOnOutOfMemoryError
#sonar.ce.javaOpts=-Xmx2G -Xms128m -XX:+HeapDumpOnOutOfMemoryError
# 修改为,注意去掉开头的#号
sonar.ce.javaOpts=-javaagent:/opt/sonar/sonarqube/SonarQubeAgent-1.2-SNAPSHOT.jar -Xmx2G -Xms128m -XX:+HeapDumpOnOutOfMemoryError
|
设置对数据库的访问
使用编辑器(VIM,NANO)打开/opt/sonar/sonarqube/conf/sonar.properties
,修改如下内容
1
2
3
|
sonar.jdbc.username=sonar
sonar.jdbc.password=<安装数据库那一步给sonar用户创建的密码>
sonar.jdbc.url=jdbc:postgresql://localhost/sonar
|
将sonar.sh
添加到环境变量
使用编辑器(VIM,NANO)打开/opt/sonar/.bashrc
,在文件底部如下内容,然后执行source /opt/sonar/.bashrc
1
2
|
SONAR_HOME="/opt/sonar/sonarqube"
export PATH=${SONAR_HOME}/bin/linux-x86-64:${PATH}
|
3. 启动网络服务器
执行sonar.sh start
,通过访问 http://<ip>:9000
打开网页控制台。默认用户名密码都为admin
,登录后按如下步骤找到激活码输入框。

填入如下的激活码,勾上输入框下面的复选框,然后点击``Save`。
1
|
Q29tcGFueT1Vbmtub3duCkRpZ2VzdD1Ob3RSZXF1aXJlZApFZGl0aW9uPUVudGVycHJpc2UKRWRpdGlvbkxhYmVsPUVudGVycHJpc2UKRXhwaXJhdGlvbj0yMDk5LTAxLTAxCk1heExvYz05MjIzMzcyMDM2ODU0Nzc1ODA2ClBsdWdpbnM9YWJhcCxjcHAscGxzcWwsc2VjdXJpdHksc29uYXJhcGV4LHN3aWZ0LHRzcWwsdmJuZXQsY29ib2wscGxpLHJwZyx2YgpGZWF0dXJlcz0qClNlcnZlcklkPSoKU3VwcG9ydD1mYWxzZQpUeXBlPW55MGM=
|
4. 安装汉化包
注意,除了社区版(Community Edition)可以直接在Administration > Marketplace
安装插件以外,其他版本只能在Marketplace中浏览插件,必须手动安装和更新插件。
手动安装插件:
- 下载您要安装的插件。 该版本需要与您的 SonarQube 版本兼容。
- 将下载好的jar包放入
<sonarqubeHome>/extensions/plugins
,并删除相同插件的任何先前版本。
- 重新启动您的 SonarQube 服务器。
汉化包下载地址为:https://github.com/SonarCommunity/sonar-l10n-zh,在本案例中,插件目录为/opt/sonar/sonarqube/extensions/plugins/
1
2
3
4
5
|
# 下载汉化插件
wget https://github.com/xuhuisheng/sonar-l10n-zh/releases/download/sonar-l10n-zh-plugin-10.5/sonar-l10n-zh-plugin-10.5.jar -O /opt/sonar/sonarqube/extensions/plugins/sonar-l10n-zh-plugin-10.5.jar
# 重启sonarqube
sonar.sh restart
|