特点: 快速启动、资源占用少、适合体验和小团队测试。
# 使用 Docker Compose (保存为 docker-compose.yml)
version: '3'
services:
sonarqube:
image: sonarqube:community # 或 lts版 (推荐)
container_name: sonarqube
ports:
- "9000:9000"
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
depends_on:
- db
networks:
- sonarnet
db:
image: postgres:13
container_name: postgres
environment:
- POSTGRES_USER=sonar
- POSTGRES_PASSWORD=sonar
- POSTGRES_DB=sonar
volumes:
- postgres_data:/var/lib/postgresql/data
networks:
- sonarnet
volumes:
sonarqube_data:
sonarqube_extensions:
postgres_data:
networks:
sonarnet:
driver: bridge启动命令:
docker-compose up -d访问: http://<服务器IP>:9000 (默认账号:admin/admin)
特点: 分离组件、资源可控、适合中小团队生产环境。
架构:
数据库服务器 (单独):
PostgreSQL (>=11) 或 Microsoft SQL Server (商业版)
创建专用数据库和用户 (如 sonarqube/sonarqube)
应用服务器:
操作系统: Linux (推荐 Ubuntu/CentOS)
依赖: Java 11/17 (根据 SonarQube 版本要求)
安装步骤:
# 下载解压 (以 9.9.x LTS 为例)
wget https://binaries.sonarsource.com/Distribution/sonarqube/sonarqube-9.9.4.87374.zip
unzip sonarqube-9.9.4.87374.zip -d /opt
mv /opt/sonarqube-9.9.4.87374 /opt/sonarqube
# 修改配置文件 /opt/sonarqube/conf/sonar.properties
sonar.jdbc.username=sonarqube
sonar.jdbc.password=your_strong_password
sonar.jdbc.url=jdbc:postgresql://dbserver:5432/sonarqube?currentSchema=my_schema # 可选指定Schema
# (可选) 配置Web上下文、端口等
# sonar.web.context=/sonarqube
# sonar.web.port=80
# 创建专用用户并授权
sudo useradd -r -s /bin/bash sonarqube
sudo chown -R sonarqube:sonarqube /opt/sonarqube
# 配置Systemd服务 (创建 /etc/systemd/system/sonarqube.service)
[Unit]
Description=SonarQube service
After=syslog.target network.target
[Service]
Type=forking
User=sonarqube
Group=sonarqube
ExecStart=/opt/sonarqube/bin/linux-x86-64/sonar.sh start
ExecStop=/opt/sonarqube/bin/linux-x86-64/sonar.sh stop
Restart=always
LimitNOFILE=65536
LimitNPROC=4096
[Install]
WantedBy=multi-user.target# 启动服务
sudo systemctl daemon-reload
sudo systemctl enable sonarqube
sudo systemctl start sonarqubeWeb 服务器/反向代理 (如 Nginx):
提供 HTTPS 终止、域名访问、负载均衡 (如果未来扩展)
简单 Nginx 配置示例 (/etc/nginx/conf.d/sonarqube.conf):
nginx
server {
listen 80;
server_name sonar.yourcompany.com; # 或使用IP
location / {
proxy_pass http://localhost:9000; # SonarQube 应用地址
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
# 强烈建议配置SSL证书启用HTTPS
# listen 443 ssl;
# ssl_certificate ...;
# ssl_certificate_key ...;
}特点: 高可用、可扩展性、适合大型团队或关键业务。
架构组件:
负载均衡器 (LB):
Nginx / HAProxy / 云服务商 LB (如 AWS ALB, GCP LB)
将请求分发到多个 sonarqube 应用节点
处理 SSL 终止
多个 SonarQube 应用节点:
无状态 (所有状态存储在共享数据库和共享文件系统上)
配置文件 (sonar.properties) 关键设置:
properties
sonar.cluster.enabled=true
sonar.cluster.node.type=application # 节点类型 (application 或 search)
sonar.cluster.node.name=sonar-app-node1 # 唯一节点名
sonar.cluster.hosts=sonar-app-node1,sonar-app-node2,sonar-search-node1,sonar-search-node2 # 所有节点主机名/IP
sonar.cluster.search.hosts=sonar-search-node1:9001,sonar-search-node2:9001 # 指向 Search 节点
sonar.cluster.web.port=9000 # 应用节点端口
sonar.cluster.ce.port=9002 # Compute Engine 端口
sonar.cluster.search.port=9001 # Search 节点端口 (内部通信)
# 共享存储路径 (所有节点必须挂载同一个共享存储)
sonar.path.data=/shared_storage/sonarqube/data
sonar.path.temp=/shared_storage/sonarqube/temp
sonar.path.logs=/shared_storage/sonarqube/logs # 可选,集中日志管理更佳
# 共享数据库配置 (同单节点)
sonar.jdbc.url=...
sonar.jdbc.username=...
sonar.jdbc.password=...专用 Elasticsearch 集群 (Search 节点):
至关重要: SonarQube 9.9+ 强制要求将 Elasticsearch 部署在独立的 Search 节点上,与应用节点分离。
至少 2 个 Search 节点 (推荐 3 个或更多奇数节点以实现高可用和分片)。
每个 Search 节点配置
properties
sonar.cluster.enabled=true
sonar.cluster.node.type=search # 节点类型为 search
sonar.cluster.node.name=sonar-search-node1 # 唯一节点名
sonar.cluster.hosts=sonar-app-node1,sonar-app-node2,sonar-search-node1,sonar-search-node2 # 所有节点
sonar.search.port=9001 # Search 节点内部通信端口
sonar.search.host=0.0.0.0 # 监听地址
# 共享存储路径 (仅 Search 节点需要访问其索引目录)
sonar.path.data=/shared_storage_for_search/sonarqube/data # 建议与应用节点的 data/temp 分开
# 数据库配置 (Search 节点也需要访问数据库获取元数据)
sonar.jdbc.url=...
sonar.jdbc.username=...
sonar.jdbc.password=...
# JVM 堆内存设置 (根据服务器资源调整,通常比应用节点大)
sonar.search.javaOpts=-Xmx8g -Xms8g -XX:+HeapDumpOnOutOfMemoryError共享存储
必须: 所有 sonarqube 应用节点和 sonarqube search 节点都需要访问同一个高可用、高性能、低延迟的共享文件系统。
应用节点共享: /shared_storage/sonarqube/data, /shared_storage/sonarqube/temp (可选 logs)。
Search 节点共享: /shared_storage_for_search/sonarqube/data (Elasticsearch 索引数据目录,非常重要!建议与应用数据物理分离)。
技术选项
云存储: AWS EFS, Azure Files, GCP Filestore。
本地网络存储: NFS (v4 或更高,配置好锁机制和性能调优), SAN。
分布式文件系统: GlusterFS, CephFS (需验证兼容性和性能)。
高可用数据库
PostgreSQL (主从复制 + 自动故障转移,如 Patroni + etcd) 或 Microsoft SQL Server (Always On AG)。
确保数据库能承受负载并具备容灾能力。
个人学习/小团队试用:方案一 (Docker) 最简单快捷。
中小团队正式生产:方案二 (单节点标准部署) 是主流选择,满足大部分需求。
大型团队/高可用要求/严格SLA:方案三 (高可用集群) 是必选项,但复杂度、成本和维护要求显著增加。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。