部署 SonarQube 服务器

最近搭了下 SonarQube 服务器,在这里记录一下,以免下次需要的时候又花大量的时间精力找资料、找文档。

概括来说,主要分为以下几个步骤:

  1. 安装 JDK11 环境
  2. 安装 PostgreSQL 数据库
  3. 官网下载免费社区版本,并解压到非数字开头的目录。 LTS 表示长期维护版本(Long term support)
  4. 创建 sonarqube 用户, 因为依赖的 Elasticsearch 不支持 root 用户启动
  5. 到*$SONARQUBE-HOME/conf/sonar.properties* 文件中设置数据库连接参数。
  6. 启动*$SONARQUBE-HOME/bin/linux-x86-64/sonar.sh*

接下来,会分别介绍每步的操作和可能遇到的坑。

安装 JDK 环境

服务器是 centos7,所以很多软件可以直接通过 yum 来安装。

Java Server Scanners
Oracle JRE ✅11 ✅11
❌8 ❌8
OpenJDK ✅11 ✅11
❌8 ❌8

上表是 SonarQube 官网对 java 版本的要求情况,我们安装 OpenJDK 11 就好了。

先搜索下

1
yum search java-11-openjdk

search-result

1
yum install java-11-openjdk-devel.x86_64

安装成功

install-jdk-result

安装 PostgreSQL

对于数据库,SonarQube 支持很多常见的数据库,譬如 PostgreSQL、Microsoft SQL Server、Oracle、MySQL。经过考虑选择 PostgreSQL。对于 PostgreSQL 的版本,下表是官网的适配信息,注意要把数据库的编码设置为 UTF-8。

PostgreSQL ✅ 13
✅ 12
✅ 11
✅ 10
✅ 9.6
⚠️ Must be configured to use UTF-8 charset

按照下面的步骤,一步步执行就能完成 PostgreSQL 的安装。本次选择的最新版,需要下载其他版本也可以去官网生成安装脚本后执行安装。

1
2
3
4
5
sudo yum install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-7-x86_64/pgdg-redhat-repo-latest.noarch.rpm
sudo yum install -y postgresql13-server
sudo /usr/pgsql-13/bin/postgresql-13-setup initdb
sudo systemctl enable postgresql-13
sudo systemctl start postgresql-13

安装成功截图:

install-PostgreSQL-result

SonarQube 最终要使用账号密码连接数据库,因此修改 PostgreSQL 配置文件, 允许密码登录:

1
vi /var/lib/pgsql/13/data/pg_hba.conf

按照下图,将 METHOD 修改为 md5 便是使用账号密码连接了。

change-method

change-method-after

修改完成后,重启一下 postgresql 服务

1
2
systemctl enable postgresql-13
systemctl start postgresql-13

在创建 postgresql 过程中,会创建 postgres 用户,可以先改下 postgres 用户的密码:

change-postgres-psw

切换到 postgres 用户, 使用 sql 语句,创建服务于 SonarQube 的用户和数据库。

1
2
3
4
5
6
7
8
su - postgres  

psql
CREATE USER sonar ;
ALTER USER sonar WITH PASSWORD 'sonar';
CREATE DATABASE sonardb WITH ENCODING 'UTF8';
ALTER DATABASE sonardb OWNER TO sonar;
\q

创建 sonar 用户

在 Unix-based 的系统上,SonarQube 不能以 root 方式运行,因此需要为 SonarQube 创建一个用户, 这里添加一个名为 sonar 的用户,并设置密码:

1
2
useradd sonar
passwd sonar

useradd

官网下载免费社区版本,并解压到非数字开头的目录中,接着修改 sonarqube 文件夹的用户和用户组

chmod

调整 sonar 配置

SonarQube 的运行环境已经搭建完毕,接着修改 sonar 的配置,设置连接数据库的用户和密码。配置文件中已经有针对不同数据库的配置,找到 PostgreSQL 的配置,取消注释,修改下上文中创建的数据库名称即可。

1
vi sonarqube-8.9.2.46101/conf/sonar.propertie

sonar-config

SonarQube 默认运行在 9000 端口,为了能让外网访问,开放一下防火墙端口:

1
2
sudo firewall-cmd --add-port=9000/tcp --permanent
sudo firewall-cmd --reload

启动 SonarQube 服务

到 $SONARQUBE-HOME/bin/linux-x86-64/ 路径以 console 的形式启动 sonarqube,如果启动失败这样就能清晰的看到错误日志。

1
2
cd /opt/sonarqube-8.9.2.46101/bin/linux-x86-64
./sonar.sh console

可能会遇到如下的错误:

max_file_desc

max_map_count

遇到这些问题,是因为还需要调整下服务器的配置,SonarQube 有如下要求

If you’re running on Linux, you must ensure that:

  • vm.max_map_count is greater than or equal to 524288
  • fs.file-max is greater than or equal to 131072
  • the user running SonarQube can open at least 131072 file descriptors
  • the user running SonarQube can open at least 8192 threads

可以临时修改或者永久修改这些配置。

临时修改

1
2
3
4
5
sysctl -w vm.max_map_count=524288
sysctl -w fs.file-max=131072
su - sonar
ulimit -n 131072
ulimit -u 8192

永久修改

编辑 /etc/security/limits.conf 文件,在文件末尾添加如下配置:

1
2
3
vi /etc/security/limits.conf	
sonar  -  nofile 131072
sonar  -  nproc 8192

limits_conf

编辑 /etc/sysctl.conf 文件,在文件末尾添加如下配置:

1
2
3
vi /etc/sysctl.conf
vm.max_map_count=262144
fs.file-max=131072

image-20210731152349194

然后刷新

1
sysctl -p

最后查看下这些配置是否设置成功:

1
2
3
4
sysctl vm.max_map_count
sysctl fs.file-max
ulimit -n
ulimit -u

result

再次启动,没有错误了。

image-20210731001342721

访问 ip:9000 就能登录到 SonarQube 的管理后台了, 到这里服务就部署完毕。

web

作者

sadhu

发布于

2021-07-31

更新于

2021-07-31

许可协议