开发环境搭建 | 使用docker进行内网离线安装sonarqube(完整版MAX)



一、安装简要

  1. 通过外网安装 sonarqube 并安装所需插件
  2. 打包相关镜像、sonarqube 工具插件
  3. 传输镜像、插件到内网
  4. 内网利用镜像安装 sonarqube
  5. 后台将插件放置到 sonarqube 的extensions/plugins目录并重启服务使插件生效
  6. 请你愉快使用!!!

问题: 为什么要外网要安装一遍 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窗口执行

  1. 进入指定目录
    mkdir sonarqube && cd sonarqube

  2. 下载相关镜像
    docker pull postgres:15.4 --platform linux/amd64

docker pull sonarqube:9.9-community --platform linux/amd64

  1. 启动 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
  1. 进入 sonarqube 并下载所需插件,重启后界面为中文

考虑到不同 sonarqube 版本的插件名称可能会不同,可以参考对应的关键字

常用插件名称 工具介绍 关键字
Chinese Pack 汉化界面 Chinese
ecoCode - Python language Python 静态代码分析 Python
ecoCode - Java language Java 静态代码分析 Java
ecoCode - PHP language PHP 静态代码分析 PHP
  1. 打包插件
    1)下载到本地


2)压缩处理
tar -czvf sonarqube_extensions.tar.gz ./plugins

  1. 镜像导出成tar包
docker save -o sonarqube_9.9_community.tar sonarqube:9.9-community
docker save -o postgres_15.4.tar postgres:15.4
  1. 压缩成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

三、内网步骤

  1. 上述3个tar.gz传输进行内网后放在指定Linux的指定目录(如:/opt/docker_images)


  2. 解压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
  1. 使用内网Linux安装的docker加载镜像
docker load -i sonarqube_9.9_community.tar
docker load -i postgres_15.4.tar
docker images
  1. 由于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
  1. 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
  1. 启动 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
  1. 启动 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】:

  1. max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]
    解决方案:执行上述步骤4的第一步
  1. 访问 sonarqube
    默认:{主机IP}:9000 (admin/admin)
  1. 安装插件:将插件(jar 文件)复制到$SONAR_INSTALL_DIR/extensions/plugins目录下并重新启动
    cp -rf /opt/docker_image/plugins /opt/sonarqube/extensions/

【后续文章】

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 193,968评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,682评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,254评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,074评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 60,964评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,055评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,484评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,170评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,433评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,512评论 2 308
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,296评论 1 325
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,184评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,545评论 3 298
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,880评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,150评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,437评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,630评论 2 335

推荐阅读更多精彩内容