SonarQube Docker环境部署流程

本文以SonarQube 10.1版本为例,其余版本可以查看官方文档。

一、软/硬件要求

1.1软件要求

JavaSonarQube 服务器需要 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上运行:

  1. vm.max_map_count必须大于等于524288
  2. fs.file-max必须大于等于131072
  3. 运行SonarQube的用户至少可以打开131072个文件描述符
  4. 运行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硬件要求

最低要求

  1. SonarQube 服务器的小规模(个人或小型团队)实例至少需要 2GB 的 RAM 才能高效运行,并且需要 1GB 的可用 RAM 用于操作系统。
  2. 需要的磁盘空间量将取决于SonarQube分析的代码量(Sonar官方提供的数据:100万行代码/3GB/PostgreSQL)。
  3. SonarQube必须安装在具有出色读写性能的硬盘驱动器上。最重要的是,“data”文件夹包含Elasticsearch索引,当服务器启动并运行时,将在其上完成大量的I / O。因此,读写硬盘性能将对SonarQube服务器的整体性能产生重大影响。

企业级硬件要求

对于大型团队或SonarQube的企业级安装,需要额外的硬件。在企业级,监控SonarQube实例至关重要,并且应该随着实例的增长进一步的硬件升级。起始配置应至少包括:

  1. 8 个内核,允许主 SonarQube 平台与多个计算引擎工作线程一起运行。
  2. 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

可以在启动命令中指定数据库连接,也可以编辑 /conf/sonar.properties 以配置数据库设置。每个支持的数据库都可以使用模板。只需取消注释并配置您需要的模板,并注释掉专用于 H2 的行:

SonarQube Docker环境部署流程_第1张图片

详细步骤如下:

①使用以下命令进入正在运行的Docker容器:

docker exec -it  bash

②在容器中,找到/opt/sonarqube/conf/sonar.properties文件,并使用文本编辑器(如vi或nano)打开它,添加相关数据库的配置。

③重启SonarQube容器

docker restart 

④验证是否配置成功

登陆对应数据库查看相关表是否创建成功,以PostgreSQL为例:

SonarQube Docker环境部署流程_第2张图片

3.4防火墙配置

firewall-cmd --add-port=9000/tcp --permanent
firewall-cmd --reload

3.5查看日志

docker logs sonarqube

3.6页面访问

http://ip:9000,默认账号:admin,初始密码:admin

SonarQube Docker环境部署流程_第3张图片

第一次登陆需要修改密码。

SonarQube Docker环境部署流程_第4张图片

SonarQube Docker环境部署流程_第5张图片

四、部署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文件指定相关参数

SonarQube Docker环境部署流程_第6张图片

配置文件参数解释:

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命令验证是否部署成功。

SonarQube Docker环境部署流程_第7张图片

五、SonarLint配置

可以在IDE端通过SonarLint连接SonarQube,即可同步SonarQube扫描出来的问题,自定义规则问题也可以同步展示到IDE工具上。

SonarQube Docker环境部署流程_第8张图片 SonarQube Docker环境部署流程_第9张图片 SonarQube Docker环境部署流程_第10张图片 

你可能感兴趣的:(sonarqube,docker,容器,运维)