背景与动机
SonarQube Server 是代码扫描结果的中心服务。安装它之前,要先明确一个边界:Scanner 只负责扫描,Server 才负责项目管理、规则管理、结果展示和质量门禁计算。
官方安装路径主要有三类:
- Docker 镜像:适合本地验证、小团队或容器化部署。
- Linux ZIP 包:适合传统虚拟机或物理机部署。
- Kubernetes / OpenShift:适合已经有容器平台和 Helm 管理能力的环境。
生产环境不建议只用内置临时数据库。一般应使用外部 PostgreSQL、SQL Server 或 Oracle,下面示例以 PostgreSQL 为主。

安装前准备
1. Linux 内核参数
SonarQube 底层依赖搜索引擎组件,对 Linux 文件数和虚拟内存映射数量有要求。常见检查命令:
sysctl vm.max_map_countsysctl fs.file-maxulimit -nulimit -u常见建议值:
sudo sysctl -w vm.max_map_count=524288sudo sysctl -w fs.file-max=131072ulimit -n 131072ulimit -u 8192持久化可以写入:
/etc/sysctl.d/99-sonarqube.conf/etc/security/limits.d/99-sonarqube.conf如果用 systemd 管理 SonarQube,还要在 unit 的 [Service] 中设置:
LimitNOFILE=131072LimitNPROC=81922. 数据库准备
生产环境应使用外部数据库。以 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/datasudo mkdir sonarqube_{data,extensions,logs}sudo useradd --system --create-home --shell /bin/bash sonarsudo chown -R sonar:sonar sonarqube*启动:
docker compose up -ddocker compose logs -f sonarqube2. Docker 常见注意点
vm.max_map_count是宿主机参数,不是只在容器里改。- 生产环境密码不要明文写在公开仓库里。
- SonarQube 和 PostgreSQL 数据卷必须持久化。
- 升级前先备份数据库和 SonarQube 数据。
方式二:Linux ZIP 包部署
Linux ZIP 方式适合传统服务器部署,常见路径是下载 ZIP、解压、配置数据库、用独立用户运行。
1. 创建运行用户
sudo useradd --system --create-home --shell /bin/bash sonarqube不要用 root 直接运行 SonarQube。
2. 解压安装包
sudo unzip sonarqube-*.zip -d /optsudo ln -s /opt/sonarqube-* /opt/sonarqubesudo chown -R sonarqube:sonarqube /opt/sonarqube*3. 配置数据库连接
编辑:
/opt/sonarqube/conf/sonar.properties设置 PostgreSQL:
sonar.jdbc.username=sonarsonar.jdbc.password=sonar_passwordsonar.jdbc.url=jdbc:postgresql://127.0.0.1:5432/sonarqube4. 启动和停止
切换到运行用户:
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查看日志:
tail -f /opt/sonarqube/logs/sonar.logtail -f /opt/sonarqube/logs/web.logtail -f /opt/sonarqube/logs/es.logtail -f /opt/sonarqube/logs/ce.log5. systemd 管理思路
生产环境通常用 systemd 管理进程。关键点不是 unit 模板本身,而是:
- 使用
sonarqube用户运行。 - 设置
LimitNOFILE和LimitNPROC。 - 确认启动脚本路径和 Java 环境正确。
- 日志能被排查人员找到。
方式三:Kubernetes / Helm 部署
Kubernetes 方式适合已有集群、Ingress、存储和数据库能力的环境。官方文档推荐通过 Helm chart 安装。
1. 添加 Helm 仓库
helm repo add sonarqube https://SonarSource.github.io/helm-chart-sonarqubehelm repo update2. 创建命名空间
kubectl create namespace sonarqube3. 准备 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. 安装或升级
helm upgrade --install sonarqube sonarqube/sonarqube \ -n sonarqube \ -f values.yaml检查状态:
kubectl get pods -n sonarqubekubectl logs -n sonarqube deploy/sonarqube5. 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,并只授予当前项目分析权限。
运行扫描时优先通过环境变量传入:
export SONAR_TOKEN="your-project-token"不要把 token 明文写进仓库。
3. 第一次登录后的基础设置
建议先做几件事:
- 修改默认管理员密码。
- 配置 Server Base URL。
- 设置项目权限和用户组。
- 确认默认 Quality Gate。
- 确认项目使用的 Quality Profile。

常见陷阱
1. 只启动容器,不准备持久化
如果数据库和数据目录没有持久化,重建容器可能导致项目配置和历史分析结果丢失。
2. token 写进配置文件
sonar.token 可以作为参数传入,但不建议写进仓库里的配置文件。更安全的方式是使用环境变量或 CI/CD 凭据管理。
3. Project Key 随便改
Project Key 是项目身份。随意更改会导致扫描结果进入另一个项目,历史趋势也会断开。
4. 没看日志就猜原因
安装失败时优先看:
web.loges.logce.log- 容器或 Pod 日志
- 数据库连接日志
一句话总结
SonarQube Server 安装的核心不是“服务能跑起来”,而是数据库、数据持久化、系统参数、项目 key 和 token 都能稳定支撑后续 CI/CD 扫描。