Linux CentOS 安装 Sonarqube7.8 完全指北

1,689 阅读4分钟

介绍在 Linux CentOS 中如何成功安装 Sonarqube7.8 ,包括错误排查

前置环境

官方要求

Sonarqube7.8的官方文档 中,有比较明确的说明该版本需要哪些环境。 首先是 JDK,Oracle JDKOpen JDK 都可以,版本需要是 8 和 11 皆可,如下图: A5BFFDAA-18C0-4AA2-9B38-57455CDFC2B5.png 图中有提到 JDK8 在下个版本就不支持了,这里不要紧,我们没有升级需求。

其次是数据库,在官方文档中没有说明支持 MySQL ,但其实 Sonarqube7.8 仍然支持 MySQL ,从配置文件中可以得知,如下图: A0A8C21F-FEB8-4022-9E27-8128CD24CC70.png 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 直接下载即可,如下图: CA0F9527-B5D3-4DE1-8FDD-772A6E14A962.png

解压安装包

将下载好的安装包上传到服务器,使用 unzip sonarqube-7.8.zip 即可,我这里是放在了 /opt 目录,后续操作都以该目录为基准,如下图: 28E0FCB8-E177-4683-9FBD-81AE9A28DFDF.png

配置数据库连接

使用 vi /opt/sonarqube-7.8/conf/sonar.properties 打开 Sonarqube 的核心配置文件,在文件开头就可以找到 MySQL 的相关配置,如下图: 0036D5EF-750F-4B51-8DF8-FB4EC136BDE0.png 这里用于连接 MySQL 的用户名和密码,可以单独创建,也可以不创建,只要是能够远程访问的用户皆可。 需要注意的是 sonar.jdbc.url 中指定要连接的数据库,比如上图中是 sonar ,这个一定要提前创建。Sonarqube 虽然在启动时会自动生成业务表,但并不能自动创建库,切记!

指定 JDK 运行环境

使用 vi /opt/sonarqube-7.8/conf/wrapper.conf 打开配置文件,如下图: C9EF5B40-1AF4-4026-825B-52EBB471DE3E.png 同样的,在文件最开头就可以找到 wrapper.java.command ,将当前系统 JDK 运行环境中的 java 命令的绝对地址填入。 想要找到该命令的真实地址,可参考下图: 275DC1F1-0364-4116-8B82-BFCAD595911E.png

创建用户用于启动 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 环境下的启动文件,如下图: 0B5115A7-B0CF-4C55-93F5-F854D2972BAF.png 找到 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 打开配置文件,如下图: A3EF8A71-E6EB-4F5A-AF13-9227D939BB1D.png 找到 sonar.search.javaAdditionalOpts 选项,在后面填入 -Dbootstrap.system_call_filter=false

配置 Sonarqube 访问地址

使用 vi /opt/sonarqube-7.8/conf/sonar.properties 打开配置文件,如下图: 0D6C12AF-CB84-4491-826D-BB54CAFA329B.png 在 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 来查询端口是否对外开放,如下图: 368AC0B7-B095-4098-B0BB-9F4F02D5AC41.png 如果显示为 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.logweb.log 即可。

总结

如果按照上述步骤配置完后,Sonarqube 还是无法启动,建议先清空日志,然后再次尝试启动,之后从上至下逐行排查 web.loges.log 。错误肯定会有,只是有可能报错过多,真正的错误在文件起始位置。