SonarQube 安装与部署
二、安装与部署
最省事的部署方式是 Docker Compose 起「数据库 + 服务端」两个容器。注意 SonarQube 内置了 Elasticsearch,对宿主机内核参数有硬性要求,这一步漏了服务起不来。
- 调整内核参数:Elasticsearch 需要足够的虚拟内存映射区,否则启动时直接失败。这是最常见的部署失败原因。
- 准备 Compose 文件:一个 PostgreSQL(或其它受支持的数据库),一个 SonarQube 服务,通过环境变量注入连接信息。
- 启动并等待:首次启动要建表、初始化,耗时会明显长于后续启动,别急着判定失败。
- 登录改密:默认管理员账号是
admin,初始口令也是admin,第一次登录会强制改密。 - 装中文语言包(可选),再到「项目」里创建项目、生成令牌。
- 装扫描器:在代码侧安装
sonar-scanner,或直接用 Maven/Gradle 插件。
# 1) 内核参数(三选一,按操作系统选对应的写法)
# Linux 临时生效
sudo sysctl -w vm.max_map_count=524288
sudo sysctl -w fs.file-max=131072
ulimit -n 131072
ulimit -u 8192
# Linux 永久生效:写入 /etc/sysctl.conf
echo "vm.max_map_count=524288" | sudo tee -a /etc/sysctl.conf
echo "fs.file-max=131072" | sudo tee -a /etc/sysctl.conf
# 2) docker-compose.yml
cat > docker-compose.yml <<'EOF'
services:
db:
image: postgres:15
environment:
POSTGRES_USER: sonar
POSTGRES_PASSWORD: change_me
POSTGRES_DB: sonar
volumes:
- db-data:/var/lib/postgresql/data
restart: unless-stopped
sonarqube:
image: sonarqube:community
depends_on:
- db
ports:
- "9000:9000"
environment:
SONAR_JDBC_URL: jdbc:postgresql://db:5432/sonar
SONAR_JDBC_USERNAME: sonar
SONAR_JDBC_PASSWORD: change_me
# JVM 内存按机器规格调整,具体建议值以官方文档为准
SONAR_SEARCH_JAVAOPTS: "-Xms512m -Xmx512m"
volumes:
- sonar-data:/opt/sonarqube/data
- sonar-extensions:/opt/sonarqube/extensions
restart: unless-stopped
volumes:
db-data:
sonar-data:
sonar-extensions:
EOF
# 3) 启动
docker compose up -d
docker compose logs -f sonarqube
系统与依赖要求:Docker 与 Docker Compose;受支持的数据库(PostgreSQL 等);宿主机内存要留足(SonarQube 自身 + 数据库 + 分析过程都吃内存);如果放在反向代理后面,需要正确设置外部访问地址,否则部分跳转会指向容器内部地址。
| 报错 | 原因 | 处理 |
|---|---|---|
max virtual memory areas vm.max_map_count [65530] is too low | 内核参数未调整 | 按上面第 1 步设置 vm.max_map_count,Docker Desktop 环境需要在宿主机/WSL 里设置 |
max file descriptors [4096] for elasticsearch process is too low | 文件句柄上限太低 | 调 ulimit -n,容器环境通过 compose 的 ulimits 设置 |
Unable to connect to database | 数据库未就绪、连接串写错、或库未创建 | 确认 db 服务健康后再起服务端;核对 SONAR_JDBC_URL 里的主机名与库名 |
Port 9000 is already in use | 9000 端口被别的服务占用 | 映射到别的宿主端口,或停掉占用进程 |
| 页面能开但分析推不上来 | 扫描器侧的服务端地址或令牌不对 | 核对 sonar.host.url 与令牌;注意用的是分析令牌而不是登录口令 |
| 反向代理下登录后跳转异常 | 外部地址配置与实际访问地址不一致 | 设置服务器基础地址,保证协议、域名、路径三者一致 |
