首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >聊一聊SonarQube 3种不同部署方案

聊一聊SonarQube 3种不同部署方案

原创
作者头像
漫谈测试
发布2025-07-22 10:38:35
发布2025-07-22 10:38:35
1.3K0
举报
文章被收录于专栏:漫谈测试漫谈测试

一、单机Docker部署 (适合开发/测试) 方案 <1>

特点: 快速启动、资源占用少、适合体验和小团队测试。

代码语言:txt
复制
# 使用 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

启动命令:

代码语言:txt
复制
docker-compose up -d

访问: http://<服务器IP>:9000 (默认账号:admin/admin)

二、标准生产部署 (单节点) 方案<2>

特点: 分离组件、资源可控、适合中小团队生产环境。

架构:

数据库服务器 (单独):

PostgreSQL (>=11) 或 Microsoft SQL Server (商业版)

创建专用数据库和用户 (如 sonarqube/sonarqube)

应用服务器:

操作系统: Linux (推荐 Ubuntu/CentOS)

依赖: Java 11/17 (根据 SonarQube 版本要求)

安装步骤:

代码语言:txt
复制
# 下载解压 (以 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

# 启动服务

代码语言:txt
复制
sudo systemctl daemon-reload
sudo systemctl enable sonarqube
sudo systemctl start sonarqube

Web 服务器/反向代理 (如 Nginx):

提供 HTTPS 终止、域名访问、负载均衡 (如果未来扩展)

简单 Nginx 配置示例 (/etc/nginx/conf.d/sonarqube.conf):

nginx

代码语言:txt
复制
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 ...;
}

三、高可用 (HA) / 集群部署 (企业级生产) 方案<3>

特点: 高可用、可扩展性、适合大型团队或关键业务。

架构组件:

负载均衡器 (LB):

Nginx / HAProxy / 云服务商 LB (如 AWS ALB, GCP LB)

将请求分发到多个 sonarqube 应用节点

处理 SSL 终止

多个 SonarQube 应用节点:

无状态 (所有状态存储在共享数据库和共享文件系统上)

配置文件 (sonar.properties) 关键设置:

properties

代码语言:txt
复制
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

代码语言:txt
复制
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 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、单机Docker部署 (适合开发/测试) 方案 <1>
  • 二、标准生产部署 (单节点) 方案<2>
  • 三、高可用 (HA) / 集群部署 (企业级生产) 方案<3>
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档