SonarQube使用教程(Docker安装)

发布时间:2026/9/25 11:19:50

SonarQube使用教程(Docker安装) 一、SonarQube介绍面向多语言的代码质量与安全静态分析平台1、组成①sonarQubeweb界面管理平台1展示所有的项目代码的质量数据。2配置质量规则、管理项目、配置通知、配置SCM等。②sonarScanner代码扫描工具1专门用来扫描和分析项目代码支持20语言。2代码扫描和分析完成之后会将扫描结果存储到数据库当中在sonarQube平台看到扫描的数据。2、优势① 检测维度全基于代码编写规范与安全规范双重规则集自动识别安全漏洞、代码异味、重复代码、圈复杂度及测试覆盖率缺口② 工程集成无缝对接IDE、SCMGit/SVN及CI/CD流水线自动定位问题代码与具体提交人。③ 持续赋能通过量化质量门禁与增量分析驱动团队持续交付更干净、更安全的代码。二、SonarQube下载官网https://www.sonarsource.com/products/sonarqube/downloads/1、安装要求① 软件环境硬性要求JDK 版本分界线很关键SonarQube 8.9 LTS仅支持JDK11SonarQube 9.9 LTS支持JDK11 / JDK17推荐JDK17SonarQube 10.x强制OpenJDK 17不再兼容JDK11② 数据库重点避坑内置H2数据库仅用于测试、本地临时使用生产严禁使用正式生产仅支持PostgreSQL 12~16支持MySQL的SonarQube版本7.8及更早需要较旧的Java版本通常是Java 8或11③ 端口与权限要求默认 Web 端口9000需放行防火墙禁止管理员root用户启动SonarQube必须新建普通用户运行。Docker默认容器内部进程不是root用户容器内置了普通账号因此不用手动新建用户。④ 附属依赖如需对接CI/ESLintNode.js 14~20Docker部署Docker Engine ≥20.102、安装软件① 查看docker版本是否符合要求docker安装教程暂时占位运行Docker Desktop并且开启WSL2按下CtrlShiftEsc打开任务管理器 → 性能 →CPU右下角查看虚拟化已启用 ✅② 创建目录必须使用 Docker 命名卷named volumes不能用 bind mounts。我没有放在C盘都放在D盘了可以根据要求选择数据存放位置。1mkdir D:\sonarqube\postgres_data对应容器路径/var/lib/postgresql/data存什么PostgreSQL的全部数据库文件SonarQube的用户账号、项目配置、分析结果、权限设置、插件市场元数据等能不能删删了等于数据库清空SonarQube所有配置和扫描记录都没了2mkdir D:\sonarqube\sonarqube_data对应容器路径/opt/sonarqube/data存什么SonarQube内置Elasticsearch的索引数据项目分析结果的搜索索引缓存、临时计算数据等能不能删可以删但删了要重建索引启动会变慢首次登录后项目搜索可能暂时不可用。一般只在索引损坏、升级异常或清理空间时才删。3mkdir D:\sonarqube\sonarqube_extensions对应容器路径/opt/sonarqube/extensions存什么你自己安装的插件比如汉化包、语言插件上传的自定义规则、质量配置等能不能删别随便删。删了插件就没了SonarQube 可能缺少必要的语言支持或功能。如果因为插件导致启动失败可以进这个目录的 plugins 子目录删掉问题插件。4mkdir D:\sonarqube\sonarqube_logs对应容器路径/opt/sonarqube/logs存什么SonarQube的运行日志包括sonar.log、web.log、es.log、ce.log等出问题排查时主要靠这些日志能不能删可以删。日志文件删了会自动重新生成。但建议先压缩备份方便后续排查历史问题。③ 创建docker-compose.yml在任意路径下新建文件我放在D:\sonarqube下了写入以下代码version:3.8services:sonarqube:image:sonarqube:community container_name:sonarqube depends_on:-postgres environment:SONAR_JDBC_URL:jdbc:postgresql://postgres:5432/sonarSONAR_JDBC_USERNAME:sonarSONAR_JDBC_PASSWORD:sonar123 ports:-9000:9000volumes:-D:\sonarqube\sonarqube_data:/opt/sonarqube/data-D:\sonarqube\sonarqube_extensions:/opt/sonarqube/extensions-D:\sonarqube\sonarqube_logs:/opt/sonarqube/logs restart:unless-stopped postgres:image:postgres:15container_name:sonarqube_postgres environment:POSTGRES_USER:sonarPOSTGRES_PASSWORD:sonar123POSTGRES_DB:sonar ports:-5432:5432volumes:-D:\sonarqube\postgres_data:/var/lib/postgresql/data restart:unless-stoppedWindows 上 Docker Desktop 默认会把 C 盘共享给容器但D 盘可能默认没有共享需要手动开启。设置方法打开Docker Desktop点击右上角齿轮图标 →Resources→File sharing把D:\或D:\sonarqube加到共享列表里点击Apply然后重启Docker③ 下载 SonarQube和数据库cdD:\sonarqubedockercompose up-d检查状态如图就是安装成功dockerps-a④ 访问http://localhost:9000账号admin密码admin3、创建项目SonarQube页面点击顶部项目点击创建项目选择手动创建三、汉化下载汉化插件之后重启当前的服务Install Pending 卡住网页端触发重启失败直接用命令强制重启即可解决。cdD:\sonarqubedockercompose restart sonarqube四、查看PostgreSQL的图形化工具下载链接https://www.pgadmin.org/download/1、安装一路Next安装即可最后在开始菜单中找到软件打开2、新建并连接数据库一定要在docker中启动数据库才能连接3、创建角色直接用默认的超级管理员权限用户就行也可以创建一个普通的用户4、创建数据库直接用默认的数据库也行也可以创建一个新的数据库五、Sonar-scanner安装官网链接https://docs.sonarsource.com/sonarqube-server/10.8/analyzing-source-code/scanners1、Docker安装镜像docker pull sonarsource/sonar-scanner-cli2、验证是否成功docker images | findstr sonar-scanner-cli六、扫描代码1、拉取源码2、项目根目录新建配置文件文件名固定sonar-project.properties① Java 项目版使用前置先执行mvn clean compile生成target/classes需要覆盖率则执行mvn test jacoco:report# 【通用基础配置 前后端通用】 # SonarQube服务部署地址修改为你的Sonar地址端口sonar.host.urlhttp://127.0.0.1:9000# 身份认证TokenSonar平台个人账号-Security里生成用于上报扫描结果鉴权sonar.login替换为你的Sonar个人访问token# 项目唯一标识整个Sonar服务内不能重复英文/数字/下划线核心区分不同项目sonar.projectKeybackend_xx_server# Sonar网页展示的项目名称可以中文方便辨认sonar.projectNamexx后端服务# 项目版本号迭代新版本时可更新用于追溯不同版本代码质量sonar.projectVersion1.0# 源码编码格式统一UTF-8避免中文注释乱码、解析失败sonar.sourceEncodingUTF-8# 指定需要扫描的源码根目录. 代表当前项目根目录全部扫描sonar.sources.# 【Java后端专属配置】 # 限定仅扫描Java语言关闭多语言识别提升扫描速度sonar.languagejava# 编译后的class文件目录(Maven默认路径)Sonar依靠class做类型推断、精准代码分析必须编译后再扫描sonar.java.binariestarget/classes# 单元测试编译后的class目录用来区分业务代码与测试代码sonar.java.test.binariestarget/test-classes# 指定覆盖率采集工具为Jacoco适配Java单元测试覆盖率统计sonar.java.coveragePluginjacoco# Jacoco生成的覆盖率二进制文件路径Sonar读取后展示单元测试覆盖率sonar.jacoco.reportPathstarget/jacoco.exec# 【过滤配置不需要扫描的目录/文件】 # 排除目录规则xxx/** 代表该文件夹下所有内容全部跳过扫描# 排除打包产物、测试目录、文档、SQL脚本减少无效扫描sonar.exclusionstarget/**,test/**,doc/**,sql/**,*.sql# 白名单指定哪些目录属于单元测试代码测试代码不计入业务代码复杂度、重复率统计sonar.test.inclusionssrc/test/**② React JS/TS 前端版使用前置安装依赖npm install生成覆盖率文件npm run test:coverage# 【通用基础配置 前后端通用】 sonar.host.urlhttp://127.0.0.1:9000sonar.login替换为你的Sonar个人访问tokensonar.projectKeyreact_admin_websonar.projectNameReact前端管理系统sonar.projectVersion1.0sonar.sourceEncodingUTF-8# 前端业务代码统一放在src目录只扫描src避免扫描根目录多余文件sonar.sourcessrc# 【React前端专属配置】 # 开启JSX语法解析Sonar才能识别React标签、组件写法避免误报语法错误sonar.javascript.jsx.supporttrue# TSReact项目开启纯JS项目注释此行即可sonar.typescript.enabledtrue# 自动读取项目根目录的.eslintrc配置本地eslint和Sonar校验规则完全保持一致sonar.javascript.eslint.use.eslintrctrue# 【过滤配置 前端必配防止扫描node_modules卡死】 # 排除依赖包、打包产物、静态资源、配置文件、说明文档千万不要删掉node_modules/**sonar.exclusionsnode_modules/**,dist/**,build/**,public/**,config/**,*.md# 标记哪些文件是单元测试代码sonar.test.inclusionssrc/**/*.test.js,src/**/*.test.tsx,src/**/__tests__/**# Jest/Vitest执行测试后生成的覆盖率文件Sonar读取展示前端单元测试覆盖率sonar.javascript.lcov.reportPathscoverage/lcov.info③ Vue2/Vue3 前端版# 通用基础配置 sonar.host.urlhttp://127.0.0.1:9000sonar.login替换为你的Sonar个人访问tokensonar.projectKeyvue_web_systemsonar.projectNameVue前端管理平台sonar.projectVersion1.0sonar.sourceEncodingUTF-8sonar.sourcessrc# Vue专属配置 # 开启Vue单文件组件解析识别.vue中的template/script/stylesonar.javascript.vue.supporttrue# 复用项目本地eslint配置统一编码规范sonar.javascript.eslint.use.eslintrctrue# 过滤配置 sonar.exclusionsnode_modules/**,dist/**,build/**,public/**,*.md# 识别测试代码目录sonar.test.inclusionstests/**,src/**/*.spec.js# 前端覆盖率文件地址sonar.javascript.lcov.reportPathscoverage/lcov.info④ 前后端混合版本# 基础连接配置sonar.host.urlhttp://127.0.0.1:9000sonar.login替换为你的Sonar个人访问tokensonar.projectKeyfullstack_projectsonar.projectName前后端一体化项目sonar.projectVersion1.0sonar.sourceEncodingUTF-8sonar.sources.# 删掉 sonar.languagexxx自动识别Java/JS/Vue/React多语言# Java编译目录配置sonar.java.binariestarget/classes# 同时支持React JSX Vue解析sonar.javascript.jsx.supporttruesonar.javascript.vue.supporttrue# 读取前端eslint规则sonar.javascript.eslint.use.eslintrctrue# 全局统一排除所有无用目录sonar.exclusionstarget/**,node_modules/**,dist/**,build/**,test/**,*.md# Java覆盖率、前端覆盖率双配置sonar.jacoco.reportPathstarget/jacoco.execsonar.javascript.lcov.reportPathscoverage/lcov.info3、新建环境变量文件.envSONAR_HOST_URLhttp://host.docker.internal:9000SONAR_TOKENsqa_965xxxSONAR_PROJECT_VERSION2026.08-01.gitignore忽略这个环境变量文件SONAR_TOKEN 在Sonarqube网站中进行创建4、添加环境变量① 切换到.env文件所在的目录或者将代码中的.env换为绝对路径执行下面的代码Get-Content .env|ForEach-Object{if($_-match^(.*?)(.*)$){[System.Environment]::SetEnvironmentVariable($matches[1],$matches[2],Process)}}② 验证环境变量是否设置成功$env:SONAR_HOST_URL$env:SONAR_TOKENTips更改环境变量文件后需要重新设置5、上传分析结果-v...把你本地的代码目录挂载到容器里的 /usr/src扫描器会自动读取里面的sonar-project.propertiesdockerrun--rm--env-file.env绝对路径-v被扫描项目的绝对路径:/usr/srcsonarsource/sonar-scanner-cli
延伸阅读

更多相关文章

2026/9/23 14:48:53

FLTK GUI编程入门:轻量级跨平台C++界面开发实战指南

1. 项目概述:为什么选择FLTK作为GUI入门如果你刚开始接触图形用户界面(GUI)编程,面对Qt、wxWidgets、GTK这些庞然大物,可能会感到无从下手。它们功能强大,但随之而来的是复杂的构建系统、庞大的依赖库和陡峭…

2026/9/19 22:54:15

Node.js+Vue.js全栈甜品商城:毕业设计实战与部署指南

这次我们来看一个基于 Node.js 和 Vue.js 的甜品网上商城系统,这是一个典型的 2026 届计算机毕业设计项目。对于即将毕业的同学来说,一个功能完整、技术栈主流、能跑通前后端全流程的商城系统,是展示自己综合能力、应对答辩和求职的绝佳选择。…

2026/9/24 7:57:51

第10讲:MCP Server 生产化部署

前九讲我们完成了 MCP Server 的开发、集成和编排。但所有这些都在本地开发环境中运行。这一讲,我们要把 MCP Server 部署到生产环境——让它稳定、安全、可监控地对外提供服务。 一、生产环境的挑战 维度 开发环境 生产环境 传输方式 stdio(本地进程…

2026/9/25 11:18:03

Substrate区块链开发框架全解析:从模块化设计到自定义链实操

1. 从“substrate”这个词说起:它到底是什么,为什么值得单独聊第一次看到“substrate”这个词,很多人会愣一下。它在不同圈子里指向完全不同的东西:做区块链的人第一反应是 Parity 那套区块链开发框架,做生物实验的人想…

2026/9/24 20:24:47

GAMP 5 基于风险的计算机化系统验证:软件分类与审计追踪实践

简介:《A Risk-Based Approach to Compliant GxP Computerized Systems》即业内熟知的GAMP 5指南,面向制药企业质量与IT合规人员、验证工程师及计算机化系统管理者,用于解决GxP法规环境下系统合规性难以科学落地的问题。文档以风险管理为主线…

2026/9/23 12:06:55

安全托管MSSP实战:从静态防御到人机协同的攻防运营与应急响应

简介:这份PPT围绕互联网业务安全托管服务展开,面向企业安全负责人、IT运维人员及关注MSSP/MSS选型的读者,重点回应传统安全过度依赖人工、碎片化静态防御难以对抗产业化攻击等痛点。资源共1个pptx文件,包体约30.63MB,以…

2026/9/25 0:02:35

AI元人文:从工具使用到思维重构的深度探索

最近半年我一直在琢磨一件事:AI元人文到底是什么?说白了,就是“用元视角重新审视人与AI的关系”,也在“探索AI如何反向逼着我们发现自己的思考边界”。标题里的“元探索”,在我看就是一层套一层的追问——当你用AI解决…

2026/9/25 0:02:35

Python+CNN车牌识别实战:从数据预处理到模型训练与部署

简介:基于Python与卷积神经网络的车牌识别项目,面向计算机视觉初学者及智能交通开发者,目标是帮助用户掌握从数据预处理、模型构建到实际部署的完整流程。压缩包共25个文件,包含jpg/png图像样本、py训练脚本、md说明文档、dat数据…

2026/9/25 0:02:35

Vim基础操作全攻略:保存退出、模式切换与高频命令实战

1. 项目概述1.1 核心需求解析今天聊聊Vim。写这个题目的原因是:几乎每个后端开发者、运维人员、数据工程师某天都会遇到一个场景——深夜加班,服务器登录界面只有黑底白字,编辑器只有vi/vim,你必须在五分钟内完成一次配置修改并保…

2026/9/22 16:34:32

USB Type-C PCB布局分区设计:电源、高速信号与PD协议全攻略

做硬件这行,Type-C接口算是典型的“看着简单,做起来全坑”的东西。光引脚就24个,高低速信号、电源、控制线全部塞在一个小小的连接器里,如果PCB布局不做规划,打样回来基本就是“插上没反应”、“高速掉线”、“静电一打…

2026/9/22 20:01:30

系统编程学习原型如何补齐稳定性边界

系统编程学习原型如何补齐稳定性边界预算有限时&#xff0c;我先优化明显多余的复制&#xff0c;而不是猜测性地换容器。用借用传递只读数据通常就能减少分配&#xff1a; fn parse(line: &str) -> Result<Item, Error> { /* ... */ }用基准确认热点确实在分配&am…

2026/9/22 13:25:41

雨花区哪家财务公司代理记账比较好?

在雨花区&#xff0c;企业处理财税事务常常面临诸多挑战&#xff0c;选择一家靠谱的财务公司至关重要。湖南巨勤财务管理咨询有限公司就是本地正规实体财税服务机构&#xff0c;深耕本地工商财税行业多年&#xff0c;熟悉当地工商局、税务局最新政策与申报流程。主营公司注册、…

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
☎咨询二维码 ☎ ↑