跳转至

第二章:安装与配置

系统要求

硬件要求

组件 最低要求 推荐配置
CPU 2 核 4+ 核
内存 2GB 4GB+
磁盘 10GB 50GB+ SSD

软件要求

  • Java: OpenJDK 17 或 Oracle JDK 17
  • 数据库: PostgreSQL 12+(推荐)、MySQL 8.0+、Oracle、SQL Server
  • 操作系统: Linux、Windows、macOS

Docker 方式安装(推荐)

1. 快速启动

使用 Docker Compose 一键部署:

# docker-compose.yml
version: "3.8"

services:
  sonarqube:
    image: sonarqube:community
    container_name: sonarqube
    depends_on:
      - db
    environment:
      SONAR_JDBC_URL: jdbc:postgresql://db:5432/sonar
      SONAR_JDBC_USERNAME: sonar
      SONAR_JDBC_PASSWORD: sonar
    volumes:
      - sonarqube_data:/opt/sonarqube/data
      - sonarqube_extensions:/opt/sonarqube/extensions
      - sonarqube_logs:/opt/sonarqube/logs
    ports:
      - "9000:9000"
    networks:
      - sonarnet

  db:
    image: postgres:15
    container_name: sonarqube_db
    environment:
      POSTGRES_USER: sonar
      POSTGRES_PASSWORD: sonar
      POSTGRES_DB: sonar
    volumes:
      - postgresql_data:/var/lib/postgresql/data
    networks:
      - sonarnet

volumes:
  sonarqube_data:
  sonarqube_extensions:
  sonarqube_logs:
  postgresql_data:

networks:
  sonarnet:
    driver: bridge

2. 启动服务

# 创建必要的目录
mkdir -p /opt/sonarqube

# 启动服务
docker-compose up -d

# 查看日志
docker-compose logs -f sonarqube

3. 访问 SonarQube

  • URL: http://localhost:9000
  • 默认账号: admin
  • 默认密码: admin

首次登录后会提示修改密码。

Linux 系统配置

SonarQube 使用 Elasticsearch,需要调整系统参数:

# 编辑 /etc/sysctl.conf
sudo vim /etc/sysctl.conf

# 添加以下配置
vm.max_map_count=262144
fs.file-max=65536

# 使配置生效
sudo sysctl -p

# 编辑 /etc/security/limits.conf
sudo vim /etc/security/limits.conf

# 添加以下配置
sonarqube   -   nofile   65536
sonarqube   -   nproc    4096

二进制包安装

1. 下载安装包

# 下载 SonarQube
wget https://binaries.sonarsource.com/Distribution/sonarqube/sonarqube-10.3.0.82913.zip

# 解压
unzip sonarqube-10.3.0.82913.zip -d /opt/
mv /opt/sonarqube-10.3.0.82913 /opt/sonarqube

2. 创建数据库

-- PostgreSQL
CREATE USER sonar WITH PASSWORD 'sonar';
CREATE DATABASE sonar OWNER sonar;
GRANT ALL PRIVILEGES ON DATABASE sonar TO sonar;

3. 配置 SonarQube

# 编辑配置文件
vim /opt/sonarqube/conf/sonar.properties

# 数据库配置
sonar.jdbc.username=sonar
sonar.jdbc.password=sonar
sonar.jdbc.url=jdbc:postgresql://localhost:5432/sonar

# Web 服务器配置
sonar.web.host=0.0.0.0
sonar.web.port=9000
sonar.web.context=/

# Elasticsearch 配置
sonar.search.javaAdditionalOpts=-Xms512m -Xmx512m

4. 创建服务用户

# 创建用户
sudo useradd -r -s /bin/false sonarqube

# 设置权限
sudo chown -R sonarqube:sonarqube /opt/sonarqube

5. 创建系统服务

# 创建 systemd 服务文件
sudo vim /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=on-failure
LimitNOFILE=65536
LimitNPROC=4096

[Install]
WantedBy=multi-user.target
# 启动服务
sudo systemctl daemon-reload
sudo systemctl enable sonarqube
sudo systemctl start sonarqube

# 查看状态
sudo systemctl status sonarqube

安装 SonarScanner

SonarScanner 是代码扫描的客户端工具。

1. 下载安装

# 下载
wget https://binaries.sonarsource.com/Distribution/sonar-scanner-cli/sonar-scanner-cli-5.0.1.3006-linux.zip

# 解压
unzip sonar-scanner-cli-5.0.1.3006-linux.zip -d /opt/
mv /opt/sonar-scanner-5.0.1.3006-linux /opt/sonar-scanner

# 添加到 PATH
echo 'export PATH=$PATH:/opt/sonar-scanner/bin' >> ~/.bashrc
source ~/.bashrc

2. 配置 Scanner

# 编辑配置文件
vim /opt/sonar-scanner/conf/sonar-scanner.properties

# 配置 SonarQube 服务器地址
sonar.host.url=http://localhost:9000

3. 验证安装

sonar-scanner -v

输出:

SonarScanner 5.0.1.3006
Java 17.0.8 Eclipse Adoptium (64-bit)
Linux 5.15.0-91-generic amd64

Maven/Gradle 插件配置

Maven

<!-- pom.xml -->
<build>
    <plugins>
        <plugin>
            <groupId>org.sonarsource.scanner.maven</groupId>
            <artifactId>sonar-maven-plugin</artifactId>
            <version>3.10.0.2594</version>
        </plugin>
    </plugins>
</build>

Gradle

// build.gradle
plugins {
    id "org.sonarqube" version "4.4.1.3373"
}

sonarqube {
    properties {
        property "sonar.projectKey", "my-project"
        property "sonar.host.url", "http://localhost:9000"
    }
}

初始配置

1. 登录管理后台

访问 http://localhost:9000,使用 admin/admin 登录。

2. 生成令牌

用户头像 → My Account → Security → Generate Tokens
# 示例令牌
squ_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

3. 配置邮件通知

# sonar.properties
sonar.smtp.host=smtp.example.com
sonar.smtp.port=587
sonar.smtp.username=noreply@example.com
sonar.smtp.password=your-password
sonar.smtp.starttls.enable=true

4. 配置代理(如需要)

# sonar.properties
sonar.web.javaAdditionalOpts=-Dhttp.proxyHost=proxy.example.com -Dhttp.proxyPort=8080

常见问题排查

1. 启动失败

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

# 常见原因
# - 内存不足
# - vm.max_map_count 配置过低
# - 端口被占用

2. 数据库连接失败

# 检查数据库连接
psql -h localhost -U sonar -d sonar

# 检查配置
grep -E "sonar.jdbc" /opt/sonarqube/conf/sonar.properties

3. Elasticsearch 启动失败

# 检查系统配置
sysctl vm.max_map_count

# 如果值太小,调整
sudo sysctl -w vm.max_map_count=262144

小结

本章介绍了 SonarQube 的多种安装方式:

  • Docker 方式:最简单,适合快速体验和开发环境
  • 二进制包方式:适合生产环境,需要更多配置

安装完成后,下一步是配置项目进行代码扫描。