本文以SonarQube 10.1版本为例,其余版本可以查看官方文档。
一、软/硬件要求
1.1软件要求
①Java:SonarQube 服务器需要 Java 版本 17,SonarQube 扫描仪需要 Java 版本 11 或 17。
Java | Server | Scanner |
Oracle JRE 17 |
支持 | 支持 |
Oracle JRE 11 |
不支持 | 支持 |
OpenJDK 17 |
支持 | 支持 |
OpenJDK 11 |
支持 | 支持 |
②数据库
数据库 |
Server |
PostgreSQL 15 |
支持 |
PostgreSQL 14 |
支持 |
PostgreSQL 13 |
支持 |
PostgreSQL 12 |
支持 |
PostgreSQL 11 |
支持 |
PostgreSQL |
必须配置UTF-8字符集 |
Microsoft SQL Server |
支持, 2022 (MSSQL 16.0) 捆绑Microsoft JDBC 驱动程序。支持速成版。 |
Microsoft SQL Server |
支持, 2019 (MSSQL Server 15.0) 捆绑Microsoft JDBC 驱动程序。支持速成版。 |
Microsoft SQL Server |
支持, 2016 (MSSQL Server 13.0) 捆绑Microsoft JDBC 驱动程序。支持速成版。 |
Microsoft SQL Server |
支持, 2014 (MSSQL Server 12.0) 捆绑Microsoft JDBC 驱动程序。支持速成版。 |
Microsoft SQL Server |
排序规则必须区分大小写 (CS) 和区分重音 (AS)(示例:Latin1_General_CS_AS)。 |
Microsoft SQL Server |
READ_COMMITTED_SNAPSHOT必须在 SonarQube 数据库上设置,以避免在重负载下出现潜在的死锁。 |
Microsoft SQL Server |
同时支持 Windows 身份验证(“集成安全性”)和 SQL Server 身份验证。有关配置身份验证的说明,请参阅安装服务器中的Microsoft SQL Server 部分。 |
Oracle 21C |
支持 |
Oracle 19C |
支持 |
Oracle XE版本 |
支持 |
Oracle |
必须配置为使用 UTF8 系列字符集(请参阅NLS_CHARACTERSET)。 |
Oracle |
不支持ojdbc14.jar驱动程序。 |
Oracle |
建议使用最新的 Oracle JDBC 驱动程序。 |
Oracle |
仅支持精简模式,不支持 OCI。 |
Oracle |
仅支持参数MAX_STRING_SIZE=STANDARD(最大长度为4000字节),不支持EXTENDED (最大长度为32767字节)。 |
③浏览器:要获得SonarQube提供的完整体验,您必须在浏览器中启用JavaScript。
浏览器 |
支持版本 |
Microsoft Edge |
支持,Latest |
Mozilla Firefox |
支持,Latest |
Google Chrome |
支持,Latest |
Safari |
支持,Latest |
④平台参数配置
如果是在Linux上运行:
- vm.max_map_count必须大于等于524288
- fs.file-max必须大于等于131072
- 运行SonarQube的用户至少可以打开131072个文件描述符
- 运行SonarQube的用户至少可以打开8192个线程
可以使用以下命令查看上述参数的值:
sysctl vm.max_map_count
sysctl fs.file-max
ulimit -n
ulimit -u
可以通过root用户按照以下命令为当前会话动态设置上述参数的值:
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)。
如果运行SonarQube(本例中为SonarQube)的用户没有权限打开至少131072个描述符,则必须在/etc/security/limits.d/99-sonarqube.conf(或/etc/security/limits.conf)中插入这一行:
sonarqube - nofile 131072
sonarqube - nproc 8192
如果使用systemd来启动SonarQube,必须在单元文件[Service]部分中指定这些限制:
[Service]
...
LimitNOFILE=131072
LimitNPROC=8192
...
⑤seccopm过滤器
默认情况下,Elasticsearch 使用seccopm过滤器。确保使用启用了 seccomp 的内核。
检查seccomp在内核上是否可用,请使用:
$ grep SECCOMP /boot/config-$(uname -r)
如果内核具有seccomp,可以看到以下内容:
CONFIG_HAVE_ARCH_SECCOMP_FILTER=y
CONFIG_SECCOMP_FILTER=y
CONFIG_SECCOMP=y
1.2硬件要求
①最低要求
- SonarQube 服务器的小规模(个人或小型团队)实例至少需要 2GB 的 RAM 才能高效运行,并且需要 1GB 的可用 RAM 用于操作系统。
- 需要的磁盘空间量将取决于SonarQube分析的代码量(Sonar官方提供的数据:100万行代码/3GB/PostgreSQL)。
- SonarQube必须安装在具有出色读写性能的硬盘驱动器上。最重要的是,“data”文件夹包含Elasticsearch索引,当服务器启动并运行时,将在其上完成大量的I / O。因此,读写硬盘性能将对SonarQube服务器的整体性能产生重大影响。
②企业级硬件要求
对于大型团队或SonarQube的企业级安装,需要额外的硬件。在企业级,监控SonarQube实例至关重要,并且应该随着实例的增长进一步的硬件升级。起始配置应至少包括:
- 8 个内核,允许主 SonarQube 平台与多个计算引擎工作线程一起运行。
- 16GB 内存 有关数据库和 Elasticsearch 的其他要求和建议,请参阅硬件建议。
二、部署数据库
2.1 PostgreSQL(推荐)
2.1.1拉取镜像
docker pull postgres:版本号
2.1.2新建目录
mkdir -p /home/apps/postgres/{postgresql,data}
2.1.3创建并启动
docker run -d --name postgres -p 5432:5432 \
-v /home/apps/postgres/postgresql:/var/lib/postgresql \
-v /home/apps/postgres/data:/var/lib/postgresql/data \
-v /etc/localtime:/etc/localtime:ro \
-e POSTGRES_USER=your_user\
-e POSTGRES_PASSWORD=your_password\
-e POSTGRES_DB=your_db\
-e TZ=Asia/Shanghai \
--restart always \
--privileged=true \
postgres:版本号
2.2.4验证
等待一段时间,直到容器启动并运行 PostgreSQL。使用以下命令检查容器状态:
docker ps
使用任何客户端连接到 PostgreSQL。只需使用以下详细信息:
Host: ip
Port: 5432
Username: your_user
Password: your_password
2.1.5其他设置
设置自定义模式而不是默认的“public”模式,则必须设置search_path 属性:
ALTER USER mySonarUser SET search_path to mySonarQubeSchema
备注:版本 12.1.0.1 和 12.1.0.2 有重大错误,不建议与 SonarQube 一起使用。
三、部署SonarQube
3.1拉取镜像
以下安装的是社区免费的最新版
# 社区版
docker pull sonarqube:community
# 开发版
docker pull sonarqube:developer
# 企业版
docker pull sonarqube:enterprise
3.2修改内核参数
因为SonarQube内置了ElasticSearch,不修改启动会报错:ERROR: Elasticsearch did not exit normally - check the logs at /opt/sonarqube/logs/sonarqube.log
vim /etc/sysctl.conf
# 增加以下配置
vm.max_map_count=262144
fs.file-max=65536
# 使配置生效
sysctl -p
3.3创建并启动
# 社区版
docker run -d --name sonarqube_community --restart always \
-p 9000:9000 \
-e SONAR_JDBC_URL=jdbc:postgresql://ip:5432/postgres?currentSchema=your_schema \
-e SONAR_JDBC_USERNAME=your_user \
-e SONAR_JDBC_PASSWORD=your_password \
-v sonarqube_data:/opt/sonarqube/data \
-v sonarqube_extensions:/opt/sonarqube/extensions \
-v sonarqube_logs:/opt/sonarqube/logs \
sonarqube:community
# 开发版本
docker volume create --name sonarqube_data_dev
docker volume create --name sonarqube_logs_dev
docker volume create --name sonarqube_extensions_dev
docker run -d --name sonarqube_developer --restart always \
-p 9000:9000 \
-e SONAR_JDBC_URL=jdbc:postgresql://ip:5432/postgres?currentSchema=your_schema \
-e SONAR_JDBC_USERNAME=your_user \
-e SONAR_JDBC_PASSWORD=your_password \
-v sonarqube_data_dev:/opt/sonarqube/data \
-v sonarqube_extensions_dev:/opt/sonarqube/extensions \
-v sonarqube_logs_dev:/opt/sonarqube/logs \
sonarqube:developer
# 企业版
docker volume create --name sonarqube_data_enterprise
docker volume create --name sonarqube_logs_enterprise
docker volume create --name sonarqube_extensions_enterprise
docker run -d --name sonarqube_enterprise --restart always \
-p 9000:9000 \
-e SONAR_JDBC_URL=jdbc:postgresql://ip:5432/postgres?currentSchema=your_schema \
-e SONAR_JDBC_USERNAME=your_user \
-e SONAR_JDBC_PASSWORD=your_password \
-v sonarqube_data_enterprise:/opt/sonarqube/data \
-v sonarqube_extensions_enterprise:/opt/sonarqube/extensions \
-v sonarqube_logs_enterprise:/opt/sonarqube/logs \
sonarqube:enterprise
可以在启动命令中指定数据库连接,也可以编辑 <SONARQUBE_HOME>/conf/sonar.properties 以配置数据库设置。每个支持的数据库都可以使用模板。只需取消注释并配置您需要的模板,并注释掉专用于 H2 的行:
详细步骤如下:
①使用以下命令进入正在运行的Docker容器:
docker exec -it <container_name> bash
②在容器中,找到/opt/sonarqube/conf/sonar.properties文件,并使用文本编辑器(如vi或nano)打开它,添加相关数据库的配置。
③重启SonarQube容器
docker restart <container_name>
④验证是否配置成功
登陆对应数据库查看相关表是否创建成功,以PostgreSQL为例:
3.4防火墙配置
firewall-cmd --add-port=9000/tcp --permanent
firewall-cmd --reload
3.5查看日志
docker logs sonarqube
3.6页面访问
http://ip:9000,默认账号:admin,初始密码:admin
第一次登陆需要修改密码。
四、部署SonarScanner
SonarScanner一般是部署在需要扫描代码的机器。
4.1拉取镜像
docker pull sonarsource/sonar-scanner-cli:4.8.0
可以到docker官网获取SonarScanner对应版本拉取命令。
4.2创建并启动
下载完成后,使用以下命令来启动SonarScanner容器:
docker run -ti --rm -v /path/to/your/code:/usr/src sonarsource/sonar-scanner-cli
其中,/path/to/your/code是您要扫描的代码所在的本地目录的路径。
4.3容器配置
①在容器中配置SonarScanner
docker run -ti --rm -v /path/to/your/code:/usr/src sonarsource/sonar-scanner-cli sonar-scanner \
-Dsonar.projectKey=your_project_key \
-Dsonar.sources=. \
-Dsonar.host.url=http://your_sonarqube_server:9000 \
-Dsonar.login=your_sonarqube_token
在上面的命令中,您需要将以下参数替换为实际值:
- your_project_key:您的项目的唯一键
- your_sonarqube_server:您的SonarQube服务器的URL
- your_sonarqube_token:您的SonarQube服务器的访问令牌
②也可以在项目根目录下创建sonar-project.properties文件指定相关参数
配置文件参数解释:
sonar.projectKey=项目key,在SonarQube新建页面时获取
sonar.projectName=项目名称
sonar.projectVersion=项目版本
sonar.sources=源码地址,例如:src
sonar.java.binaries=二进制代码地址,例如:./target/classes
sonar.branch.name=代码分支,例如:master
sonar.sourceEncoding=源码编码格式,UTF-8
sonar.host.url=SonarQube地址,http://127.0.0.1:9000
sonar.login=SonarQube登陆账号,也可以使用sonar.token替换,token在SonarQube创建项目时获取
sonar.password=SonarQube登陆密码,也可以使用sonar.token替换,token在SonarQube创建项目时获取
sonar.language=指定扫描的语言,选填,例如:Java
备注:如果部署在其他平台需要配置环境变量指定到SonarScanner的bin目录。
4.4验证
使用sonar-scanner -v命令验证是否部署成功。
五、SonarLint配置
可以在IDE端通过SonarLint连接SonarQube,即可同步SonarQube扫描出来的问题,自定义规则问题也可以同步展示到IDE工具上。文章来源:https://www.toymoban.com/news/detail-765330.html
文章来源地址https://www.toymoban.com/news/detail-765330.html
到了这里,关于SonarQube Docker环境部署流程的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!