1. 下载并安装 JDK

vi /etc/profile
# jdk settings 
export JAVA_HOME=/opt/java/jdk1.8.0_191
export PATH=$JAVA_HOME/bin:$PATH
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
source /etc/profile

2.下载安装 MySQL

3.下载安装 SonarQube

http://www.sonarqube.org/downloads/

cd /opt
wget https://binaries.sonarsource.com/Distribution/sonarqube/sonarqube-6.7.7.zip
unzip sonarqube-6.7.7.zip
cd sonarqube-6.7.7

3.1 配置 SonarQube

编辑配置文件,配置连接数据库(需要事先在mysql上创建好sonar库,UTF8编码)

vi conf/sonar.properties

主要配置:

sonar.jdbc.username=
sonar.jdbc.password=
sonar.jdbc.url=

3.2 Linux 系统要求

  • Sonarqube 一定运行在root账户下
  • vm.max_map_count必须大于或等于262144
  • fs.file-max必须大于或等于65536
  • 运行 SnonarQube 的用户至少可以打开65536文件描述符(file descriptors)
  • 运行 SnonarQube 的用户至少可以打开2048线程
  • seccomp 必须已被编译到内核

3.2.1 内核参数

可以通过以下命令查看相关内核参数:

sysctl vm.max_map_count
sysctl fs.file-max
ulimit -n
ulimit -u

可以通过root账户执行以下命令快速设置当前会话的内核参数:

sysctl -w vm.max_map_count=262144
sysctl -w fs.file-max=65536
ulimit -n 65536
ulimit -u 2048

要更永久地设置这些值,必须更新/etc/sysctl.d/99-sonarqube.conf/etc/sysctl.conf以生效这些值:

vm.max_map_count=262144
#fs.file-max=65536 ## 我的机器,默认就超过 65535,故不再修改设置。

如果运行 SonarQube(本例中为sonar)的用户没有至少 65536 个开放描述符的权限,则必须在/etc/security/limits.d/99-sonarqube.conf/etc/security/limits.conf中插入:

sonarqube   -   nofile   65536
sonarqube   -   nproc    2048

使配置生效:

sysctl -p

可以在Elasticsearch文档中获得更多详细信息 。

3.2.2 seccomp 过滤器

默认情况下,Elasticsearch 使用的是 seccomp过滤器。在大多数发行版中,此功能在内核中激活,但在Red Hat Linux 6等发行版中,此功能已停用。如果您使用的是没有此功能的发行版,并且无法升级到激活了 seccomp的较新版本,则必须通过更新sonar.properties中的sonar.search.javaAdditionalOpts来显式停用此安全层:

sonar.search.javaAdditionalOpts=-Dbootstrap.system_call_filter=false

可以使用以下命令检查内核上是否有 seccomp:

$ grep SECCOMP /boot/config-$(uname -r)

如果内核有seccomp,将会看到:

CONFIG_HAVE_ARCH_SECCOMP_FILTER=y
CONFIG_SECCOMP_FILTER=y
CONFIG_SECCOMP=y

有关更多详细信息,可以参阅Elasticsearch文档

4 启动 SonarQube

系统中必有一个非root用户,因为 SonarQube 里使用的elasticsearch不允许使用root 账号启动。

我们创建一个名为 sonar 的用户:

# 创建用户
useradd sonarqube
passwd sonarqube
# 授权 Sonar 目录
chown -R sonarqube:sonarqube /opt/sonarqube-6.7.7/

启动:

# 切换至 sonarqube 用户下
sonarqube
cd /opt/sonarqube-6.7.7/bin/
cd linux-x86-64
# 先使用日志模式启动,无错误后再停掉并切换为后台启动
./sonar.sh console
# 后台启动模式
./sonar.sh start

## 查看日志
tail -f /opt/sonarqube-6.7.7/logs/sonar.log 

## 停止服务
./sonar.sh stop
## 重启服务
./sonar.sh restart

5.配置界面访问

Sonar 默认监听的端口时9000,可以在sonar.properties中通过sonar.web.port=来修改。

启动后,浏览器器访问:http://xxxx:9000,默认账户:admin/admin

6.安装 SoanrQube 汉化包(可选)

访问 https://github.com/SonarQubeCommunity/sonar-l10n-zh 下载对应版本中文插件包

cd /opt/sonarqube-6.7.7/extensions/plugins
wget https://github.com/SonarQubeCommunity/sonar-l10n-zh/releases/download/sonar-l10n-zh-plugin-1.19/sonar-l10n-zh-plugin-1.19.jar

重启服务,即可。

7.安装 SonarQube Scanner 客户端

访问 https://docs.sonarqube.org/display/SCAN/Analyzing+with+SonarQube+Scanner

SonarQube 是服务器端,它主要有两个功能:

  • 分析源代码;因为它内嵌了Apache模块,所以提供Web端的界面访问。
  • SonarQube Scanner 是一个利用 SonarQube 服务端分析代码的命令行工具,可以把它简单理解为客户端。
wget https://binaries.sonarsource.com/Distribution/sonar-scanner-cli/sonar-scanner-cli-3.3.0.1492-linux.zip

。。。。。

Q.E.D.


Think Big, Act Small