SonarQube Server 安装与项目初始化

笔记/CICD/SonarQube代码扫描/SonarQube Server 安装与项目初始化

背景与动机#

SonarQube Server 是代码扫描结果的中心服务。安装它之前,要先明确一个边界:Scanner 只负责扫描,Server 才负责项目管理、规则管理、结果展示和质量门禁计算。

官方安装路径主要有三类:

  • Docker 镜像:适合本地验证、小团队或容器化部署。
  • Linux ZIP 包:适合传统虚拟机或物理机部署。
  • Kubernetes / OpenShift:适合已经有容器平台和 Helm 管理能力的环境。

生产环境不建议只用内置临时数据库。一般应使用外部 PostgreSQL、SQL Server 或 Oracle,下面示例以 PostgreSQL 为主。

img
img

安装前准备#

1. Linux 内核参数#

SonarQube 底层依赖搜索引擎组件,对 Linux 文件数和虚拟内存映射数量有要求。常见检查命令:

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

常见建议值:

Terminal window
sudo sysctl -w vm.max_map_count=524288
sudo sysctl -w fs.file-max=131072
ulimit -n 131072
ulimit -u 8192

持久化可以写入:

/etc/sysctl.d/99-sonarqube.conf
/etc/security/limits.d/99-sonarqube.conf

如果用 systemd 管理 SonarQube,还要在 unit 的 [Service] 中设置:

LimitNOFILE=131072
LimitNPROC=8192

2. 数据库准备#

生产环境应使用外部数据库。以 PostgreSQL 为例:

CREATE DATABASE sonarqube;
CREATE USER sonar WITH ENCRYPTED PASSWORD 'sonar_password';
GRANT ALL PRIVILEGES ON DATABASE sonarqube TO sonar;

实际生产环境要使用强密码,并按数据库版本兼容性选择支持版本。

方式一:Docker 部署#

Docker 方式适合快速验证,也适合配合 Docker Compose 做小规模部署。

1. Docker Compose 示例#

更接近真实环境的写法是配 PostgreSQL:

services:
sonarqube:
image: swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/sonarqube:community
container_name: sonarqube
depends_on:
- postgres
ports:
- "9000:9000"
environment:
SONAR_JDBC_URL: jdbc:postgresql://postgres:5432/sonarqube
SONAR_JDBC_USERNAME: sonar
SONAR_JDBC_PASSWORD: sonar
SONAR_ES_BOOTSTRAP_CHECKS_DISABLE: true
volumes:
- ./sonarqube_data:/opt/sonarqube/data
- ./sonarqube_extensions:/opt/sonarqube/extensions
- ./sonarqube_logs:/opt/sonarqube/logs
postgres:
image: swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/postgres:15
container_name: sonarqube-postgres
environment:
POSTGRES_DB: sonarqube
POSTGRES_USER: sonar
POSTGRES_PASSWORD: sonar
volumes:
- ./postgresql_data:/var/lib/postgresql/data
Terminal window
sudo mkdir sonarqube_{data,extensions,logs}
sudo useradd --system --create-home --shell /bin/bash sonar
sudo chown -R sonar:sonar sonarqube*

启动:

Terminal window
docker compose up -d
docker compose logs -f sonarqube

2. Docker 常见注意点#

  • vm.max_map_count 是宿主机参数,不是只在容器里改。
  • 生产环境密码不要明文写在公开仓库里。
  • SonarQube 和 PostgreSQL 数据卷必须持久化。
  • 升级前先备份数据库和 SonarQube 数据。

方式二:Linux ZIP 包部署#

Linux ZIP 方式适合传统服务器部署,常见路径是下载 ZIP、解压、配置数据库、用独立用户运行。

1. 创建运行用户#

Terminal window
sudo useradd --system --create-home --shell /bin/bash sonarqube

不要用 root 直接运行 SonarQube。

2. 解压安装包#

Terminal window
sudo unzip sonarqube-*.zip -d /opt
sudo ln -s /opt/sonarqube-* /opt/sonarqube
sudo chown -R sonarqube:sonarqube /opt/sonarqube*

3. 配置数据库连接#

编辑:

/opt/sonarqube/conf/sonar.properties

设置 PostgreSQL:

sonar.jdbc.username=sonar
sonar.jdbc.password=sonar_password
sonar.jdbc.url=jdbc:postgresql://127.0.0.1:5432/sonarqube

4. 启动和停止#

切换到运行用户:

Terminal window
sudo su - sonarqube
/opt/sonarqube/bin/linux-x86-64/sonar.sh start
/opt/sonarqube/bin/linux-x86-64/sonar.sh status
/opt/sonarqube/bin/linux-x86-64/sonar.sh stop

查看日志:

Terminal window
tail -f /opt/sonarqube/logs/sonar.log
tail -f /opt/sonarqube/logs/web.log
tail -f /opt/sonarqube/logs/es.log
tail -f /opt/sonarqube/logs/ce.log

5. systemd 管理思路#

生产环境通常用 systemd 管理进程。关键点不是 unit 模板本身,而是:

  • 使用 sonarqube 用户运行。
  • 设置 LimitNOFILELimitNPROC
  • 确认启动脚本路径和 Java 环境正确。
  • 日志能被排查人员找到。

方式三:Kubernetes / Helm 部署#

Kubernetes 方式适合已有集群、Ingress、存储和数据库能力的环境。官方文档推荐通过 Helm chart 安装。

1. 添加 Helm 仓库#

Terminal window
helm repo add sonarqube https://SonarSource.github.io/helm-chart-sonarqube
helm repo update

2. 创建命名空间#

Terminal window
kubectl create namespace sonarqube

3. 准备 values.yaml#

一个简化示例:

edition: community
service:
type: ClusterIP
ingress:
enabled: true
hosts:
- name: sonarqube.example.com
postgresql:
enabled: false
jdbcOverwrite:
enable: true
jdbcUrl: jdbc:postgresql://postgres.example.com:5432/sonarqube
jdbcUsername: sonar
jdbcPassword: sonar_password
persistence:
enabled: true

不同 chart 版本字段可能变化,实际落地前要以当前 chart 的 values.yaml 为准。

4. 安装或升级#

Terminal window
helm upgrade --install sonarqube sonarqube/sonarqube \
-n sonarqube \
-f values.yaml

检查状态:

Terminal window
kubectl get pods -n sonarqube
kubectl logs -n sonarqube deploy/sonarqube

5. Kubernetes 常见注意点#

  • 存储要持久化,避免 Pod 重建后数据丢失。
  • 数据库建议使用独立托管 PostgreSQL,而不是随应用一起临时跑。
  • Ingress、TLS、反向代理路径要和 sonar.core.serverBaseURL 等配置匹配。
  • 节点也可能需要满足 vm.max_map_count 等系统参数要求。

项目初始化#

1. 创建项目#

登录 SonarQube Web 后,创建项目时需要关注:

  • Project Key:项目唯一标识。
  • Project Name:页面展示名称。
  • Main Branch:主分支名称。

Project Key 后续会写到扫描配置中,建议稳定、可读、不要频繁变动。

2. 创建 Token#

扫描需要 token。推荐使用项目级 token,并只授予当前项目分析权限。

运行扫描时优先通过环境变量传入:

Terminal window
export SONAR_TOKEN="your-project-token"

不要把 token 明文写进仓库。

3. 第一次登录后的基础设置#

建议先做几件事:

  • 修改默认管理员密码。
  • 配置 Server Base URL。
  • 设置项目权限和用户组。
  • 确认默认 Quality Gate。
  • 确认项目使用的 Quality Profile。

img
img

常见陷阱#

1. 只启动容器,不准备持久化#

如果数据库和数据目录没有持久化,重建容器可能导致项目配置和历史分析结果丢失。

2. token 写进配置文件#

sonar.token 可以作为参数传入,但不建议写进仓库里的配置文件。更安全的方式是使用环境变量或 CI/CD 凭据管理。

3. Project Key 随便改#

Project Key 是项目身份。随意更改会导致扫描结果进入另一个项目,历史趋势也会断开。

4. 没看日志就猜原因#

安装失败时优先看:

  • web.log
  • es.log
  • ce.log
  • 容器或 Pod 日志
  • 数据库连接日志

一句话总结#

SonarQube Server 安装的核心不是“服务能跑起来”,而是数据库、数据持久化、系统参数、项目 key 和 token 都能稳定支撑后续 CI/CD 扫描。

文章目录

文章目录