引言

SonarQube是一个开源的代码质量管理平台,用于持续检查代码质量,提供代码缺陷、漏洞和代码异味检测。它支持多种编程语言,并能够与CI/CD工具集成,帮助开发团队在开发过程中实时监控和改进代码质量。在Rocky Linux 8.7系统上安装和配置SonarQube需要一系列步骤,本文将详细介绍从基础环境准备到服务启动的全过程,包括数据库配置以及常见问题的解决方案。

环境准备

在开始安装SonarQube之前,我们需要确保Rocky Linux 8.7系统已经进行了基础配置。首先,更新系统到最新状态:

sudo dnf update -y 

然后,安装必要的工具和依赖:

sudo dnf install -y wget unzip curl which java-11-openjdk-devel 

为了确保SonarQube能够正常运行,我们需要设置系统参数。编辑/etc/sysctl.conf文件:

sudo vi /etc/sysctl.conf 

在文件末尾添加以下内容:

vm.max_map_count=262144 fs.file-max=65536 ulimit -n 65536 ulimit -u 4096 

保存并退出,然后应用更改:

sudo sysctl --system 

接下来,我们需要创建一个专用的用户来运行SonarQube,这有助于提高安全性:

sudo useradd -r -s /bin/false sonarqube 

Java环境安装与配置

SonarQube需要Java环境支持,推荐使用OpenJDK 11。我们可以使用以下命令安装:

sudo dnf install -y java-11-openjdk-devel 

安装完成后,验证Java版本:

java -version 

应该显示类似以下内容:

openjdk version "11.0.xx" OpenJDK Runtime Environment (build 11.0.xx) OpenJDK 64-Bit Server VM (build 11.0.xx, mixed mode, sharing) 

设置JAVA_HOME环境变量,编辑/etc/profile.d/java.sh文件:

sudo vi /etc/profile.d/java.sh 

添加以下内容:

export JAVA_HOME=$(dirname $(dirname $(readlink $(readlink $(which java))))) export PATH=$PATH:$JAVA_HOME/bin 

保存并退出,然后使更改生效:

source /etc/profile.d/java.sh 

验证JAVA_HOME是否设置正确:

echo $JAVA_HOME 

数据库安装与配置

SonarQube支持多种数据库,包括PostgreSQL、MySQL、Oracle和SQL Server。在本教程中,我们将使用PostgreSQL作为SonarQube的数据库。

首先,安装PostgreSQL:

sudo dnf install -y postgresql postgresql-server 

初始化PostgreSQL数据库:

sudo postgresql-setup --initdb 

启动PostgreSQL服务并设置开机自启:

sudo systemctl start postgresql sudo systemctl enable postgresql 

登录到PostgreSQL并创建SonarQube数据库和用户:

sudo -u postgres psql 

在PostgreSQL命令行中执行以下SQL语句:

CREATE DATABASE sonarqube; CREATE USER sonar WITH ENCRYPTED PASSWORD 'your_password'; GRANT ALL PRIVILEGES ON DATABASE sonarqube TO sonar; ALTER DATABASE sonarqube OWNER TO sonar; q 

接下来,我们需要配置PostgreSQL允许远程连接。编辑/var/lib/pgsql/data/pg_hba.conf文件:

sudo vi /var/lib/pgsql/data/pg_hba.conf 

在文件末尾添加以下内容:

host sonarqube sonar 0.0.0.0/0 md5 

然后,编辑/var/lib/pgsql/data/postgresql.conf文件:

sudo vi /var/lib/pgsql/data/postgresql.conf 

找到listen_addresses参数,将其修改为:

listen_addresses = '*' 

保存并退出,然后重启PostgreSQL服务:

sudo systemctl restart postgresql 

SonarQube下载与安装

现在,我们可以下载并安装SonarQube。首先,访问SonarQube官方网站(https://www.sonarqube.org/downloads/)获取最新版本的下载链接。在本教程中,我们将使用SonarQube 9.9.0.65466 Community Edition。

下载SonarQube:

cd /opt sudo wget https://binaries.sonarsource.com/Distribution/sonarqube/sonarqube-9.9.0.65466.zip 

解压下载的文件:

sudo unzip sonarqube-9.9.0.65466.zip 

创建一个符号链接以便于管理:

sudo ln -s sonarqube-9.9.0.65466 sonarqube 

更改SonarQube目录的所有权:

sudo chown -R sonarqube:sonarqube /opt/sonarqube-9.9.0.65466 sudo chown -R sonarqube:sonarqube /opt/sonarqube 

SonarQube配置

现在,我们需要配置SonarQube以使用我们之前创建的PostgreSQL数据库。编辑SonarQube配置文件:

sudo vi /opt/sonarqube/conf/sonar.properties 

找到并取消注释以下行,并根据实际情况修改:

sonar.jdbc.username=sonar sonar.jdbc.password=your_password sonar.jdbc.url=jdbc:postgresql://localhost/sonarqube 

保存并退出。

接下来,我们需要配置SonarQube Web服务器的访问地址。编辑同一个文件,找到并取消注释以下行:

sonar.web.host=0.0.0.0 sonar.web.port=9000 sonar.web.context=/sonarqube 

保存并退出。

启动SonarQube服务

现在,我们可以启动SonarQube服务。首先,我们需要以sonarqube用户身份运行SonarQube:

sudo -u sonarqube /opt/sonarqube/bin/linux-x86-64/sonar.sh start 

检查SonarQube服务状态:

sudo -u sonarqube /opt/sonarqube/bin/linux-x86-64/sonar.sh status 

如果服务正在运行,应该显示”SonarQube is running (pid xxxxx)“。

为了方便管理,我们可以创建一个systemd服务文件。编辑/etc/systemd/system/sonarqube.service文件:

sudo vi /etc/systemd/system/sonarqube.service 

添加以下内容:

[Unit] Description=SonarQube service After=syslog.target network.target [Service] Type=forking ExecStart=/opt/sonarqube/bin/linux-x86-64/sonar.sh start ExecStop=/opt/sonarqube/bin/linux-x86-64/sonar.sh stop User=sonarqube Group=sonarqube Restart=always LimitNOFILE=65536 LimitNPROC=4096 [Install] WantedBy=multi-user.target 

保存并退出,然后重新加载systemd配置:

sudo systemctl daemon-reload 

启动SonarQube服务并设置开机自启:

sudo systemctl start sonarqube sudo systemctl enable sonarqube 

检查SonarQube服务状态:

sudo systemctl status sonarqube 

访问与初步设置

现在,我们可以通过浏览器访问SonarQube Web界面。打开浏览器,输入以下地址:

http://your_server_ip:9000/sonarqube 

默认情况下,使用以下凭据登录:

  • 用户名:admin
  • 密码:admin

首次登录后,系统会要求您更改密码。按照提示操作即可。

登录后,您可以开始配置SonarQube,包括:

  • 安装插件
  • 创建项目
  • 配置质量门
  • 设置权限等

常见问题及解决方案

1. SonarQube无法启动,提示”max virtual memory areas vm.max_map_count [65530] is too low”

解决方案:增加vm.max_map_count的值,如前所述,编辑/etc/sysctl.conf文件,添加vm.max_map_count=262144,然后运行sudo sysctl --system

2. SonarQube无法启动,提示”elasticsearch max file descriptors [4096] for elasticsearch process is too low”

解决方案:增加文件描述符限制,编辑/etc/security/limits.conf文件,添加以下内容:

sonarqube - nofile 65536 sonarqube - nproc 4096 

然后重启系统。

3. 数据库连接失败

解决方案:检查数据库配置是否正确,确保PostgreSQL服务正在运行,并且SonarQube配置文件中的数据库连接信息正确。检查防火墙设置,确保SonarQube服务器可以访问数据库端口(默认为5432)。

4. SonarQube Web界面无法访问

解决方案:检查SonarQube服务是否正在运行,检查防火墙设置,确保端口9000已开放。可以使用以下命令开放端口:

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

5. SonarQube运行缓慢或内存不足

解决方案:调整SonarQube的内存设置。编辑/opt/sonarqube/conf/sonar.properties文件,找到并修改以下参数:

sonar.web.javaOpts=-Xmx512m -Xms128m -XX:+HeapDumpOnOutOfMemoryError sonar.ce.javaOpts=-Xmx512m -Xms128m -XX:+HeapDumpOnOutOfMemoryError sonar.search.javaOpts=-Xmx512m -Xms128m -XX:+HeapDumpOnOutOfMemoryError 

根据服务器的实际内存情况调整这些值。

6. SonarQube启动后自动停止

解决方案:检查SonarQube日志文件,通常位于/opt/sonarqube/logs/目录下。查看sonar.log文件以获取错误信息。常见原因包括Java版本不兼容、内存不足或数据库连接问题。

7. 无法上传项目分析结果

解决方案:检查SonarQube服务器和项目分析工具之间的网络连接。确保SonarQube服务器URL正确配置在项目分析工具中。检查项目分析工具的日志以获取更多错误信息。

总结

通过本教程,我们详细介绍了在Rocky Linux 8.7系统上安装和配置SonarQube代码质量管理平台的完整过程。从基础环境准备、Java环境安装、数据库配置,到SonarQube的安装、配置和启动,以及常见问题的解决方案。现在,您已经拥有一个功能完整的SonarQube实例,可以开始使用它来管理和提高代码质量了。

SonarQube是一个强大的工具,可以帮助开发团队发现代码中的问题,提高代码质量,减少技术债务。通过持续集成和持续部署流程中的集成,SonarQube可以成为开发流程中不可或缺的一部分。

在实际使用过程中,您可能需要根据具体需求进一步配置SonarQube,例如安装特定语言的插件、配置质量门、设置权限等。希望本教程对您有所帮助,祝您使用SonarQube愉快!