之前分享过 SonarQube 的使用体验,今天写篇教程介绍下如何部署自己的服务器实例,及测试自己的项目。
官方文档写得很详细,推荐大家阅读学习:Install the Server。这篇博文我主要分享实操的经验教训。
0. 安装 Docker
2021年即将过去,建议大家,部署各种服务能用 Docker 最好都用 Docker。省时省力,集中精力写业务代码。
Windows、macOS 用户推荐使用 Docker hub,Linux 用户可以命令行安装 Docker Engine——你都用 Linux 了,应该不需要我详细解释,参考 官方文档 即可。
1. 部署 SonarQube
1.1 保存配置文件
有了 docker 之后,部署就很简单。先找个地方,将下面的内容保存成配置文件 sonarqube.yml
:
version: "3"
services:
sonarqube:
image: sonarqube:community
depends_on:
- db
environment:
SONAR_JDBC_URL: jdbc:postgresql://db:5432/sonar
SONAR_JDBC_USERNAME: sonar
SONAR_JDBC_PASSWORD: sonar
volumes:
- sonarqube_data:/opt/sonarqube/data
- sonarqube_extensions:/opt/sonarqube/extensions
- sonarqube_logs:/opt/sonarqube/logs
ports:
- "9000:9000"
db:
image: postgres:12
environment:
POSTGRES_USER: sonar
POSTGRES_PASSWORD: sonar
volumes:
- postgresql:/var/lib/postgresql
- postgresql_data:/var/lib/postgresql/data
volumes:
sonarqube_data:
sonarqube_extensions:
sonarqube_logs:
postgresql:
postgresql_data:
注意第5行,“sonarqube:community
”,是镜像的注册名称,默认是最新版本。如果你想使用长期支持(LTS)版,可以将其改成 sonarqube:lts-community
。一般来说,LTS 版本新功能会落后于最新版本,但是会更稳定,安全系数也更高。目前这个时间点,如果你想部署中文版本,必须选择 LTS,也就是 8.9.x 版本,因为中文翻译插件最高只支持 9.1,在最新版 9.2 下会报错。
1.2 拉取镜像:
docker-compose -f sonarqube.yml pull
1.3 启动容器:
docker-compose -f sonarqube.yml up
第一次启动建议只用 up
,方便看日志,判断状态。我的经验,不管是 Windows + WSL,还是云上小水管,都会报告:max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]
错误。这是虚拟机内存配置不够导致的,所以调高。
Linux
- 永久修改配置:编辑
/etc/sysctl
,增加vm.max_map_count = 262144
- 修改当前环境:执行
sysctl -w vm.max_map_count=262144
- 重启 docker 服务:
systemctl restart docker
WSL
先进入 docker 环境:
wsl -d docker-desktop
然后
sysctl -w vm.max_map_count=262144
1.4 启动为服务
第一次启动会自动创建 Volumes(相当于磁盘),安装软件、部署各种功能、执行初始化操作等,会比较久。最后停下来时,如果 DB 服务和 SonarQube 服务都成功启动,就算完成。
默认服务端口是 9000,启动浏览器访问 localhost:9000
,此时应该可以看到下图所示的登录界面。
默认用户名密码是 admin/admin,登录后会被要求修改。如果要对公网提供服务,建议尽量改得复杂一些。
如果刚才启动 SonarQube 的时候只用了 up
,建议先停掉,改为 up -d
再次启动为后台服务。
2.0 配置 nginx 反向代理
Docker 启动的服务只能内部访问,所以我们通常需要把它开放到外面,这里还是用 nginx 做反向代理:
server {
server_name sonarqube.meathill.com;
root /var/www/sonarqube;
location / {
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Host $http_host;
proxy_pass http://127.0.0.1:9000;
}
}
3.0 安装中文包
SonarQube 所有语言包都是以插件形式存在的,所以要汉化 SonarQube 只需要安装中文插件即可。
登录 SonarQube 后,进入 Administration > Marketplace
,搜索 Chinese,安装简体中文包即可。安装之后需要重启,请耐心等待界面变化,按照提示一步一步走。
SonarQube 会根据浏览器语言配置自动选择语言,没有留出显式选项。
4.0 分析 FastTest
全部配置完成之后,可以开始第一次分析了。
首先我们新增项目(Add Project),选择手动(Manually)即可。当然,如果你是团队内部使用,也可以配置为以 GitHub、GitLab 为代码仓库。
输入 token 名称,创建一个 token,将 token 复制下来。
接下来你可以选择使用打包好的二进制文件,那就点击“继续”(Continue)然后按照提示下载二进制文件,再输入命令执行即可。我比较喜欢用 Docker,所以推荐用下面的命令,会自动拉取镜像并且执行:
docker run \
--rm \
-e SONAR_HOST_URL="http://${SONARQUBE_URL}" \
-e SONAR_LOGIN="${myAuthenticationToken}" \
-v "/path/to/repo:/usr/src" \
sonarsource/sonar-scanner-cli
上面的参数中:
SONAR_HOST_URL
即部署后提供服务的地址SONAR_LOGIN
即上一步中复制的 token/path/to/repo
需要是绝对路径,如果是 Windows 系统,正常使用\
即可,比如C:\works\fasttest
,不需要转义- 如果你的 SonarQube 跑在 docker 里,又使用 docker 启动分析,那么需要增加
--network=host
参数,不然两个 container 之间无法互相访问
最终得到的分析结果大约是这样:
报告内容我这次就不详细解析了,回头慢慢分享。
总结
好,SonarQube 的部署和分析过程就分享完了,建议大家都学习使用一下,能学到很多安全性、可维护性的知识,能很好的提升团队的代码质量。如果绑定到 GitHub、GitLab 等代码仓库,还可以自动分析 PR、MR,成为工作流程的一部分。
感兴趣又不想自己动手(或没条件)的同学可以联系我,我可以在我的服务器上给你开通账号试用。
注意:不要上传公司的业务代码!
注意:不要上传公司的业务代码!
注意:不要上传公司的业务代码!
欢迎吐槽,共同进步