官网好像没什么有用信息,上 GitHub 后发现有 docker-compose 文件,方便许多:

https://github.com/SonarSource/docker-sonarqube/blob/master/example-compose-files

SonarQube Docker Compose 示例目录

这里选择 sq-with-postgres 部署。

其他几个版本说明:

目录名含义适用场景
sq-with-postgresSonarQube + PostgreSQL最基础、最常用部署方式,官方推荐。
sq-with-mcp-postgresSonarQube + MCP + PostgreSQL比上面多部署了一个 MCP(Model Context Protocol)服务,供 AI 助手(Claude、ChatGPT、Cursor 等)访问 SonarQube。
sq-dce-postgresSonarQube Data Center Edition + PostgreSQL企业数据中心版(DCE),用于高可用、集群部署,需要商业许可证。
sq-dce-with-mcp-postgresData Center Edition + MCP + PostgreSQLDCE 版本,同时启用 MCP。

创建 docker-compose.yaml

官方示例大概如下:

services:
  sonarqube:
    image: sonarqube:community
    hostname: sonarqube
    container_name: sonarqube
    read_only: true
    depends_on:
      db:
        condition: service_healthy
    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
      - sonarqube_temp:/opt/sonarqube/temp
    tmpfs:
      - /tmp:size=256M,mode=1777
    ports:
      - "9000:9000"
    networks:
      - ${NETWORK_TYPE:-ipv4}

  db:
    image: postgres:17
    healthcheck:
      test: [ "CMD-SHELL", "pg_isready -d $${POSTGRES_DB} -U $${POSTGRES_USER}" ]
      interval: 10s
      timeout: 5s
      retries: 5
    hostname: postgresql
    container_name: postgresql
    environment:
      POSTGRES_USER: sonar
      POSTGRES_PASSWORD: sonar
      POSTGRES_DB: sonar
    volumes:
      - postgresql:/var/lib/postgresql
    networks:
      - ${NETWORK_TYPE:-ipv4}

volumes:
  sonarqube_data:
  sonarqube_temp:
  sonarqube_extensions:
  sonarqube_logs:
  postgresql:

networks:
  ipv4:
    driver: bridge
    enable_ipv6: false
  dual:
    driver: bridge
    enable_ipv6: true
    ipam:
      config:
        - subnet: "192.168.2.0/24"
          gateway: "192.168.2.1"
        - subnet: "2001:db8:2::/64"
          gateway: "2001:db8:2::1"

网络这一侧没有特殊要求可以删掉,走 Docker 默认网络即可,使用 IPv4;数据都放到 /data/sonarqube 下。

修改内容如下,镜像是可以直接 pull 的哦:

services:
  sonarqube:
    image: swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/sonarqube:9.9.0-community
    hostname: sonarqube
    container_name: sonarqube
    read_only: true
    depends_on:
      db:
        condition: service_healthy
    environment:
      SONAR_JDBC_URL: jdbc:postgresql://db:5432/sonar
      SONAR_JDBC_USERNAME: sonar
      SONAR_JDBC_PASSWORD: sonar
    volumes:
      - /data/sonarqube/data:/opt/sonarqube/data
      - /data/sonarqube/extensions:/opt/sonarqube/extensions
      - /data/sonarqube/logs:/opt/sonarqube/logs
      - /data/sonarqube/temp:/opt/sonarqube/temp
    tmpfs:
      - /tmp:size=256M,mode=1777
    ports:
      - "9000:9000"

  db:
    image: swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/postgres:17
    healthcheck:
      test: [ "CMD-SHELL", "pg_isready -d $${POSTGRES_DB} -U $${POSTGRES_USER}" ]
      interval: 10s
      timeout: 5s
      retries: 5
    hostname: postgresql
    container_name: postgresql
    environment:
      POSTGRES_USER: sonar
      POSTGRES_PASSWORD: sonar
      POSTGRES_DB: sonar
    volumes:
      - /data/sonarqube/postgresql:/var/lib/postgresql

处理权限和内核参数

解决文件权限问题:

chmod -R 777 /data/sonarqube/

修改内核参数,否则内置 ES 可能起不来。

临时生效:

sysctl -w vm.max_map_count=262144

永久生效:

echo "vm.max_map_count=262144" >> /etc/sysctl.conf
sysctl -p

访问控制台

浏览器访问:

http://<服务器IP>:9000

初始凭证:

用户名:admin
密码:admin

汉化

平台支持直接下载中文插件。

进入 Administration

进入 Administration

进入 Marketplace,搜索 chinese,安装 Chinese Pack:

安装 Chinese Pack

等一会之后界面上有一个重启服务的弹窗,仔细找一下,重启后就好了。

SonarQube 中文界面

更多推荐