一、安装简要
- 通过外网安装 sonarqube 并安装所需插件
- 打包相关镜像、sonarqube 工具插件
- 传输镜像、插件到内网
- 内网利用镜像安装 sonarqube
- 后台将插件放置到 sonarqube 的extensions/plugins目录并重启服务使插件生效
- 请你愉快使用!!!
问题: 为什么要外网要安装一遍 sonarqube ,我又用不着?
回答: 因为内网环境是无法通过 sonarqube 市场直接安装插件,只能从外网离线下载传输到内网使用,而且没找到能直接下载与sonarqube各版本的插件网址入口,虽然常见插件可以通过插件各自更新地址去获取(如:gitlab),但是依旧麻烦;如果你本身就有当前待安装sonarqube版本的插件包,也无需再更新插件,那你可以选择不装,直接进行内网操作。
1.1 版本信息
软件名称 | 版本 | 备注 |
---|---|---|
docker | 24.0.5 | 2023.08.26 当前最新版,Winodws和Ubuntu均是该版本 |
sonarqube | 9.9 | 一般首选community社区版,个人或小型团队不考虑付费的开发者版、企业版、数据中心版 |
postgres | 15.4 | 2023.08.26 当前最新版 |
sonarqube 9.9 官方文档 (附环境依赖截图)
1.2 教程环境
网络类型 | 系统 | 已安装软件 | 描述 |
---|---|---|---|
外网 | Windows11 | docker | 请确保已安装对应Windows版,并已启用服务且服务正常 |
内网 | Ubuntu 22.04.2 AMD64 | docker | 请确保已安装对应Linux版,并已启用服务且服务正常 |
- 查看docker服务状态:
service docker status
- 重启docker服务:
service docker restart
1.3 sonarqube 常用插件整合
文件名称 | 描述 | 下载地址 |
---|---|---|
sonar-pdf-plugin | 生成PDF格式的 sonarqube 报告 | https://gitee.com/zzulj/sonar-pdf-plugin |
sonar-l10n-zh | 汉化sonarqube页面 | https://github.com/xuhuisheng/sonar-l10n-zh |
为方便各位,整理的插件包见:sonarqube_extensions.tar.gz
1.4 其他
分类 | 文件名称 | 描述 | 下载地址 |
---|---|---|---|
docker 镜像 | postgres | 用于 sonarqube 的Database,可以选择其他数据库(如:Oracle等) | |
开发插件 | SonarLint | 访问 SonarLint所有版本,根据自己jetbrains产品版本选择对应版本进行下载 | |
开发软件 | NodeJS | SonarLint 运行环境的依赖 | Windows7 :node-v13.14.0-x64.msi Windows8+:node-v18.17.1-x64.msi 备注:Windows7最高支持版本node 13.14.0 |
- sonarqube 在默认情况下使用的是嵌入式数据库(H2数据库),而 H2 数据库适合用于评估和测试,不适合生产环境,如果直接使用H2,页面会提示:"Embedded database should be used for evaluation purposes only" ,为了解决这个问题,需要配置 SonarQube 使用一个持久性数据库,比如 PostgreSQL 、MySQL、Oracle或者Microsoft SQL Server等,以确保数据的持久存储和可靠性
- sonarqube 7.9+不再支持Mysql,历史版本要求 Mysql版本满足 [5.6,8.0)
- sonarqube页面地址默认为:localhost:9000(admin/admin)
二、外网步骤
PS:外网步骤的命令均在CMD窗口执行
-
进入指定目录
mkdir sonarqube && cd sonarqube
-
下载相关镜像
docker pull postgres:15.4 --platform linux/amd64
docker pull sonarqube:9.9-community --platform linux/amd64
- 启动 sonarqube 镜像
docker run --privileged=true -it --restart=always --name sonarqube ^
-w /opt/sonarqube ^
-p 9000:9000 ^
-e TZ=Asia/Shanghai ^
-e ALLOW_EMPTY_PASSWORD=yes ^
-d sonarqube:9.9-community
- 查看容器日志:
docker logs -f sonarqube
- 关闭容器方式:
docker stop {容器ID}
或ps aux | grep {容器ID} | awk '{print $2}' | xargs kill -9
- 进入 sonarqube 并下载所需插件,重启后界面为中文
考虑到不同 sonarqube 版本的插件名称可能会不同,可以参考对应的关键字
常用插件名称 | 工具介绍 | 关键字 |
---|---|---|
Chinese Pack | 汉化界面 | Chinese |
ecoCode - Python language | Python 静态代码分析 | Python |
ecoCode - Java language | Java 静态代码分析 | Java |
ecoCode - PHP language | PHP 静态代码分析 | PHP |
-
打包插件
1)下载到本地
2)压缩处理
tar -czvf sonarqube_extensions.tar.gz ./plugins
- 镜像导出成tar包
docker save -o sonarqube_9.9_community.tar sonarqube:9.9-community
docker save -o postgres_15.4.tar postgres:15.4
- 压缩成tar.gz包(主要为减少内网文件传输大小)
tar -czvf sonarqube_9.9_community.tar.gz sonarqube_9.9_community.tar
tar -czvf postgres_15.4.tar.gz postgres_15.4.tar
del sonarqube_9.9_community.tar postgres_15.4.tar
dir
三、内网步骤
-
上述3个tar.gz传输进行内网后放在指定Linux的指定目录(如:/opt/docker_images)
-
解压tar.gz包
tar -xzvf sonarqube_9.9_community.tar.gz
tar -xzvf postgres_15.4.tar.gz
tar -xzvf sonarqube_extensions.tar.gz
rm -rf sonarqube_9.9_community.tar.gz postgres_15.4.tar.gz sonarqube_extensions.tar.gz
- 使用内网Linux安装的docker加载镜像
docker load -i sonarqube_9.9_community.tar
docker load -i postgres_15.4.tar
docker images
- 由于sonarqube安装目录是在容器中,便于方便与安全,故对重要目录进行挂载
1)将/opt/sonarqube下的logs、conf、data、extensions目录挂载到宿主机中(以/opt/sonarqube为例)
2)在宿主机创建/opt/sonarqube目录并赋予权限
mkdir -p /opt/sonarqube/{logs,conf,data,extensions} && chmod -R 777 /opt/sonarqube
- Linux内核参数调整(在修改任何内核参数之前,最好了解参数的含义和影响,并在必要时备份系统或者记录当前的参数值,以便需要时可以恢复到之前的状态)
1)调整单个进程拥有的虚拟内存区域数量(查看当前参数值:sysctl vm.max_map_count
)
sysctl -w vm.max_map_count=262144
2)调整系统可以打开的最大文件句柄数(查看当前参数值:sysctl fs.file-max
)
sysctl -w fs.file-max=131072
3)调整当前用户进程可以打开的最大文件句柄数量(查看当前参数值:ulimit -n
)
ulimit -n 131072
4)调整当前用户会话中允许的最大用户进程数(查看当前参数值:ulimit -u
)
ulimit -u 8192
- 为了使参数永久生效,加配置添加到/etc/sysctl.conf中,并使其立即生效
- 第3、4条语句默认为sonarqube用户,可视情况调整其他用户名或*
sed -i '$a\vm.max_map_count=262144' /etc/sysctl.conf
sed -i '$a\fs.file-max=131072' /etc/sysctl.conf
sysctl -p
sed -i '$a\sonarqube - nofile 131072' /etc/security/limits.conf
sed -i '$a\sonarqube - nproc 8192' /etc/security/limits.conf
- 启动 postgres 镜像并查看启动日志
1)创建数据卷
docker volume create pgdata
2)启动容器
docker run --privileged=true -it --restart=always --name postgres \
-w /var/lib/postgresql/data \
-p 5432:5432 \
-e TZ=Asia/Shanghai \
-e POSTGRES_USER=postgres \
-e POSTGRES_PASSWORD=postgres \
-v pgdata:/var/lib/postgresql/data \
-d postgres:15.4
3)查看日志
docker logs -f postgres
(Ctrl+C结束命令)
4)创建sonar数据库
export PGPASSWORD=postgres
docker exec -it postgres psql -U postgres -c "CREATE DATABASE sonar;"
unset PGPASSWORD
- 启动 sonarqube 镜像并查看启动日志
1)启动容器(注意:调整17.31.34.24为实际的主机IP)
docker run --privileged=true -it --restart=always --name sonarqube \
-w /opt/sonarqube \
-p 9000:9000 \
-e TZ=Asia/Shanghai \
-e ALLOW_EMPTY_PASSWORD=yes \
-e SONAR_JDBC_URL="jdbc:postgresql://17.31.34.24:5432/sonar" \
-e SONAR_JDBC_USERNAME=postgres \
-e SONAR_JDBC_PASSWORD=postgres \
-v /opt/sonarqube/logs:/opt/sonarqube/logs \
-v /opt/sonarqube/conf:/opt/sonarqube/conf \
-v /opt/sonarqube/data:/opt/sonarqube/data \
-v /opt/sonarqube/extensions:/opt/sonarqube/extensions \
-d sonarqube:9.9-community
2)查看日志
docker logs -f sonarqube
【FAQ】:
- max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]
解决方案:执行上述步骤4的第一步
- 访问 sonarqube
默认:{主机IP}:9000 (admin/admin)
- 安装插件:将插件(jar 文件)复制到$SONAR_INSTALL_DIR/extensions/plugins目录下并重新启动
cp -rf /opt/docker_image/plugins /opt/sonarqube/extensions/
【后续文章】
网友评论