服务器SonarQube教程:Docker部署与代码扫描实操
服务器SonarQube教程:从零搭建代码扫描平台
SonarQube 是一套开源的代码质量分析平台,能检查代码缺陷、漏洞和重复率。
在服务器上部署 SonarQube,可以让团队在提交代码前自动发现潜在问题。
本文以 Linux 服务器和 Docker 为例,带零基础用户完成安装、配置与首次扫描。
部署前需要确认的几件事
- 服务器配置:建议至少 2 核 CPU、4GB 内存。SonarQube 对内存敏感,2GB 以下容易启动失败。
- 操作系统:常见 Linux 发行版均可,示例使用 Ubuntu 22.04,其他发行版命令需对应调整。
- 已安装 Docker 和 Docker Compose:用
docker --version和docker compose version检查,没有则先安装。 - 开放端口:默认 Web 端口 9000,确保防火墙或安全组允许访问。
- 数据库:生产环境建议使用 PostgreSQL,本教程用 Docker 同时启动 PostgreSQL 和 SonarQube。
用 Docker Compose 启动 SonarQube 与数据库
创建一个工作目录,例如 /opt/sonarqube,然后新建 docker-compose.yml:
version: "3"
services:
db:
image: postgres:15
container_name: sonar-db
environment:
POSTGRES_USER: sonar
POSTGRES_PASSWORD: sonar
POSTGRES_DB: sonar
volumes:
- sonar_db:/var/lib/postgresql/data
restart: always
sonarqube:
image: sonarqube:lts-community
container_name: sonarqube
depends_on:
- db
environment:
SONAR_JDBC_URL: jdbc:postgresql://db:5432/sonar
SONAR_JDBC_USERNAME: sonar
SONAR_JDBC_PASSWORD: sonar
ports:
- "9000:9000"
volumes:
- sonar_data:/opt/sonarqube/data
- sonar_extensions:/opt/sonarqube/extensions
- sonar_logs:/opt/sonarqube/logs
restart: always
volumes:
sonar_db:
sonar_data:
sonar_extensions:
sonar_logs:
执行启动命令:
docker compose up -d
查看日志确认启动成功:
docker compose logs -f sonarqube
当日志出现 SonarQube is operational 时,浏览器访问 http://服务器IP:9000,默认账号密码均为 admin,首次登录会要求修改密码。
安装中文插件与创建项目
登录后点击顶部 Administration → Marketplace,搜索 Chinese,找到中文语言包点击 Install,然后重启 SonarQube 容器:
docker compose restart sonarqube
重启后界面变为中文。
接着点击 创建项目 → 手动,输入项目标识和显示名称,生成一个令牌(Token),这个令牌只显示一次,务必复制保存。
在代码仓库中执行扫描
以 Maven 项目为例,在项目根目录执行:
mvn clean verify sonar:sonar \
-Dsonar.projectKey=你的项目标识 \
-Dsonar.host.url=http://服务器IP:9000 \
-Dsonar.login=你生成的令牌
如果是前端项目,先安装 SonarScanner:
npm install -g sonarqube-scanner
然后在项目根目录创建 sonar-project.properties:
sonar.projectKey=你的项目标识
sonar.host.url=http://服务器IP:9000
sonar.login=你生成的令牌
sonar.sources=src
执行扫描:
sonar-scanner
扫描完成后,回到 SonarQube 网页即可看到代码质量报告。
常见报错与避坑说明
- 启动后无法访问 9000 端口:检查服务器安全组和防火墙,Ubuntu 可执行
sudo ufw allow 9000。 - 日志提示内存不足:在
docker-compose.yml的 sonarqube 服务下增加ulimits或调整宿主机vm.max_map_count:sudo sysctl -w vm.max_map_count=262144。 - 数据库连接失败:确认 PostgreSQL 容器已就绪,SonarQube 启动时数据库未准备好会重试,若持续失败检查用户名密码是否一致。
- 扫描时提示令牌无效:令牌只在创建时显示一次,丢失需重新生成。
- 生产环境不要用默认密码:首次登录后立即修改 admin 密码,并避免将 9000 端口直接暴露到公网,建议通过 Nginx 反向代理并配置 HTTPS。
验证部署是否成功
- 浏览器能正常打开 SonarQube 登录页,且界面为中文。
- 执行一次扫描后,项目页面能看到代码行数、缺陷、漏洞等指标。
- 重启服务器后,执行
docker compose ps确认两个容器状态均为Up。
如果扫描结果为空,检查 sonar.sources 路径是否指向实际代码目录。
按上述步骤操作后,你已拥有一套可用的服务器 SonarQube 代码扫描环境,后续可结合 CI 工具实现自动分析。