介绍在 Linux CentOS 中如何成功安装 Sonarqube7.8 ,包括错误排查
前置环境
官方要求
在 Sonarqube7.8的官方文档 中,有比较明确的说明该版本需要哪些环境。
首先是 JDK,Oracle JDK 和 Open JDK 都可以,版本需要是 8 和 11 皆可,如下图:
图中有提到 JDK8 在下个版本就不支持了,这里不要紧,我们没有升级需求。
其次是数据库,在官方文档中没有说明支持 MySQL ,但其实 Sonarqube7.8 仍然支持 MySQL ,从配置文件中可以得知,如下图:
MySQL 的依赖也是会在下个版本被弃用,不过需要注意的是 对版本有要求,只能支持 5.6 ~ 7.9 。
所以如果你想在 Sonarqube 中使用 MySQL ,那么 Sonarqube 的版本最高只能是 7.8 ,MySQL 最好直接使用 5.7 。
我的环境
系统环境 CentOS7 和 8 皆可,这次使用的是 CentOS8 。 JDK 使用的是 Oracle JDK8 。 数据库使用的是 MySQL 5.7 。
开始安装
下载安装包
前往 Sonarqube 历史版本资源库 找到 sonarqube-7.8.zip 直接下载即可,如下图:
解压安装包
将下载好的安装包上传到服务器,使用 unzip sonarqube-7.8.zip
即可,我这里是放在了 /opt 目录,后续操作都以该目录为基准,如下图:
配置数据库连接
使用 vi /opt/sonarqube-7.8/conf/sonar.properties
打开 Sonarqube 的核心配置文件,在文件开头就可以找到 MySQL 的相关配置,如下图:
这里用于连接 MySQL 的用户名和密码,可以单独创建,也可以不创建,只要是能够远程访问的用户皆可。
需要注意的是 sonar.jdbc.url 中指定要连接的数据库,比如上图中是 sonar ,这个一定要提前创建。Sonarqube 虽然在启动时会自动生成业务表,但并不能自动创建库,切记!
指定 JDK 运行环境
使用 vi /opt/sonarqube-7.8/conf/wrapper.conf
打开配置文件,如下图:
同样的,在文件最开头就可以找到 wrapper.java.command ,将当前系统 JDK 运行环境中的 java 命令的绝对地址填入。
想要找到该命令的真实地址,可参考下图:
创建用户用于启动 Sonarqube
因为 Sonarqube 依赖 Elasticsearch ,而后者不能使用 root 用户启动,所以还需要创建一个专门用于启动 Sonarqube 的用户,代码如下:
# 创建用户
useradd sonar
# 配置密码
passwd sonar
# 将目录权限给予该用户
chown -R sonar:sonar /opt/sonarqube-7.8
但其实 Sonarqube 在启动时,不用专门切换到该用户再启动,只需要在 Sonarqube 的启动文件中将执行用户指定为该用户即可。
使用 vi /opt/sonarqube-7.8/bin/linux-x86-64/sonar.sh
打开 Sonarqube 在 Linux 环境下的启动文件,如下图:
找到 RUN_AS_USER ,将刚才创建好的用户填入即可。
配置目录的执行权限
为防止 Sonarqube 相关目录没有执行权限,这里直接执行 chmod -R 764 /opt/sonarqube7.8
为整个文件夹更改权限。
配置系统参数
这一部分我也不懂,就根据 官方文档 操作一遍即可。
PART 1
使用 vi /etc/sysctl.conf
打开配置文件,在文件末尾添加如下代码:
vm.max_map_count=262144
fs.file-max=65536
保存并退出后,执行 sysctl -p
使配置生效,还可以执行 sysctl -a|grep vm.max_map_count
查询配置是否生效。
之后还需要执行以下命令:
ulimit -n 65536
ulimit -u 4096
PART 2
使用 vi /etc/security/limits.conf
打开配置文件,在文件末尾添加如下代码:
sonar - nofile 65536
sonar - nproc 4096
Elasticsearch 相关配置
使用 vi /opt/sonarqube-7.8/conf/sonar.properties
打开配置文件,如下图:
找到 sonar.search.javaAdditionalOpts 选项,在后面填入
-Dbootstrap.system_call_filter=false
。
配置 Sonarqube 访问地址
使用 vi /opt/sonarqube-7.8/conf/sonar.properties
打开配置文件,如下图:
在 web 配置的最后分别配置 IP 、端口、根请求名称,也可以直接搜索
sonar.web.host
来找到该区域。
比如配置的 IP 是 192.168.31.31 ,端口是 7654 ,根请求是 /sonar ,那么在浏览器中输入 http://192.168.31.31:7654/sonar
即可访问到 Sonarqube 首页。
不过在访问之前还需要使用 firewall-cmd --query-port=7654/tcp
来查询端口是否对外开放,如下图:
如果显示为 no ,则表明没有开放,使用以下命令开放端口
# 开放端口
firewall-cmd --permanent --zone=public --add-port=7654/tcp
# 重新加载防火墙
firewall-cmd --reload
之后再次执行 firewall-cmd --query-port=7654/tcp
来查看结果即可。
启动 Sonarqube
直接执行 /opt/sonarqube-7.8/bin/linux-x86-64/sonar.sh console
就可以启动 Sonarqube ,并且直观的看到启动日志,建议调试期间使用该命令启动。
等调试结束,启动完全没问题了,就可以使用 ./sonar.sh console &
来实现后台运行,或者直接 ./sonar.sh start
来快速启动。
查看日志
Sonarqube 的日志目录位于 /opt/sonarqube-7.8/log/
目录,分别有:
- access.log 访问权限相关日志
- ce.log 不知道啥日志,应该没用
- sonar.log 主体日志,使用 console 命令启动输出的日志来自该文件
- es.log 依赖的 Elasticsearch 启动时输出的日志
- web.log 主体 Web 项目输出的日志 在配置 Sonarqube 时,集中关注 es.log 和 web.log 即可。
总结
如果按照上述步骤配置完后,Sonarqube 还是无法启动,建议先清空日志,然后再次尝试启动,之后从上至下逐行排查 web.log 和 es.log 。错误肯定会有,只是有可能报错过多,真正的错误在文件起始位置。