# 1. 下载并安装 JDK
```bash
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
```
```bash
source /etc/profile
```
# 2.下载安装 MySQL
# 3.下载安装 SonarQube
http://www.sonarqube.org/downloads/
```bash
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编码)
```bash
vi conf/sonar.properties
```
主要配置:
```bash
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 内核参数
可以通过以下命令查看相关内核参数:
```bash
sysctl vm.max_map_count
sysctl fs.file-max
ulimit -n
ulimit -u
```
可以通过root账户执行以下命令快速设置当前会话的内核参数:
```bash
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``以生效这些值:
```bash
vm.max_map_count=262144
#fs.file-max=65536 ## 我的机器,默认就超过 65535,故不再修改设置。
```
如果运行 SonarQube(本例中为``sonar``)的用户没有至少 65536 个开放描述符的权限,则必须在``/etc/security/limits.d/99-sonarqube.conf``或``/etc/security/limits.conf``中插入:
```bash
sonarqube - nofile 65536
sonarqube - nproc 2048
```
使配置生效:
```bash
sysctl -p
```
可以在[Elasticsearch文档](https://www.elastic.co/guide/en/elasticsearch/reference/5.5/system-config.html)中获得更多详细信息 。
### 3.2.2 seccomp 过滤器
默认情况下,Elasticsearch 使用的是 seccomp过滤器。在大多数发行版中,此功能在内核中激活,但在``Red Hat Linux 6``等发行版中,此功能已停用。如果您使用的是没有此功能的发行版,并且无法升级到激活了 seccomp的较新版本,则必须通过更新``sonar.properties``中的``sonar.search.javaAdditionalOpts``来显式停用此安全层:
```bash
sonar.search.javaAdditionalOpts=-Dbootstrap.system_call_filter=false
```
可以使用以下命令检查内核上是否有 seccomp:
```bash
$ grep SECCOMP /boot/config-$(uname -r)
```
如果内核有seccomp,将会看到:
```bash
CONFIG_HAVE_ARCH_SECCOMP_FILTER=y
CONFIG_SECCOMP_FILTER=y
CONFIG_SECCOMP=y
```
有关更多详细信息,可以参阅[Elasticsearch文档](https://www.elastic.co/guide/en/elasticsearch/reference/5.5/breaking-changes-5.2.html#_system_call_bootstrap_check)。
# 4 启动 SonarQube
系统中必有一个非root用户,因为 SonarQube 里使用的``elasticsearch``不允许使用root 账号启动。
我们创建一个名为 sonar 的用户:
```bash
# 创建用户
useradd sonarqube
passwd sonarqube
# 授权 Sonar 目录
chown -R sonarqube:sonarqube /opt/sonarqube-6.7.7/
```
启动:
```bash
# 切换至 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 下载对应版本中文插件包
```bash
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 服务端分析代码的命令行工具,可以把它简单理解为客户端。
```bash
wget https://binaries.sonarsource.com/Distribution/sonar-scanner-cli/sonar-scanner-cli-3.3.0.1492-linux.zip
```
。。。。。
CentOS 7 安装 SonarQube