CI/CD 第三步:CentOS7 代码审计 SonarQube 容器化部署
·
官网好像没什么有用信息,上 GitHub 后发现有 docker-compose 文件,方便许多:
https://github.com/SonarSource/docker-sonarqube/blob/master/example-compose-files

这里选择 sq-with-postgres 部署。
其他几个版本说明:
| 目录名 | 含义 | 适用场景 |
|---|---|---|
sq-with-postgres | SonarQube + PostgreSQL | 最基础、最常用部署方式,官方推荐。 |
sq-with-mcp-postgres | SonarQube + MCP + PostgreSQL | 比上面多部署了一个 MCP(Model Context Protocol)服务,供 AI 助手(Claude、ChatGPT、Cursor 等)访问 SonarQube。 |
sq-dce-postgres | SonarQube Data Center Edition + PostgreSQL | 企业数据中心版(DCE),用于高可用、集群部署,需要商业许可证。 |
sq-dce-with-mcp-postgres | Data Center Edition + MCP + PostgreSQL | DCE 版本,同时启用 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:

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

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

更多推荐
所有评论(0)