目录
[一、安装 Docker & Docker Compose](#一、安装 Docker & Docker Compose)
[1. 安装 Docker](#1. 安装 Docker)
[2. 配置国内镜像加速(可选,拉镜像更快)](#2. 配置国内镜像加速(可选,拉镜像更快))
[二、修改系统内核参数(SonarQube 强制要求,否则启动失败)](#二、修改系统内核参数(SonarQube 强制要求,否则启动失败))
[三、创建部署目录与 compose 配置](#三、创建部署目录与 compose 配置)
[1. 新建工作目录](#1. 新建工作目录)
[2. 编写 docker-compose.yml](#2. 编写 docker-compose.yml)
[五、启动 SonarQube 9.9](#五、启动 SonarQube 9.9)
[七、常见问题排查(Anolis OS 8.10 高频报错)](#七、常见问题排查(Anolis OS 8.10 高频报错))
[问题 1:Elasticsearch 启动失败 max_map_count 不足](#问题 1:Elasticsearch 启动失败 max_map_count 不足)
[问题 2:文件句柄过低报错 too many open files](#问题 2:文件句柄过低报错 too many open files)
[问题 3:数据库连接失败](#问题 3:数据库连接失败)
[问题 4:页面访问超时 / 打不开](#问题 4:页面访问超时 / 打不开)
环境前置说明
- Anolis OS 8.10 兼容 CentOS 8 操作逻辑,内核、系统参数配置通用
- SonarQube 9.9 LTS 要求:
- 内存:至少 2G,生产推荐 4G+
- 数据库:PostgreSQL 13~15(官方不支持 MySQL)
- 系统内核参数调整(虚拟内存、文件句柄)
- 容器方案:
sonarqube:9.9-community+ 独立 postgres 数据库容器
一、安装 Docker & Docker Compose
1. 安装 Docker
bash
# 安装依赖
dnf install -y dnf-plugins-core
# 添加阿里云docker源
dnf config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
# 安装docker
dnf install -y docker-ce docker-ce-cli containerd.io docker-compose-plugin
# 启动并开机自启
systemctl start docker
systemctl enable docker
# 验证
docker --version
docker compose version
2. 配置国内镜像加速(可选,拉镜像更快)
bash
mkdir -p /etc/docker
cat > /etc/docker/daemon.json <<EOF
{
"registry-mirrors": [
"https://docker.1ms.run",
"https://docker.xuanyuan.me",
"https://docker.m.daocloud.io"
]
}
EOF
systemctl daemon-reload
systemctl restart docker
二、修改系统内核参数(SonarQube 强制要求,否则启动失败)
SonarQube 使用 Elasticsearch,必须调整 vm.max_map_count、文件打开数限制
bash
# 1. 临时生效
sysctl -w vm.max_map_count=262144
sysctl -w fs.file-max=65536
# 2. 永久写入配置
echo "vm.max_map_count=262144" >> /etc/sysctl.conf
echo "fs.file-max=65536" >> /etc/sysctl.conf
sysctl -p
# 3. 修改进程打开文件限制
cat >> /etc/security/limits.conf <<EOF
* soft nofile 65536
* hard nofile 65536
sonarqube soft nproc 4096
sonarqube hard nproc 4096
EOF
三、创建部署目录与 compose 配置
1. 新建工作目录
bash
mkdir -p /data/sonarqube
cd /data/sonarqube
# 创建持久化数据目录
mkdir -p data logs extensions postgres_data
# 授权(sonarqube容器运行用户uid=1000)
chmod -R 777 ./
2. 编写 docker-compose.yml
bash
services:
postgres:
image: postgres:14
container_name: sonar-postgres
restart: always
environment:
POSTGRES_USER: sonar
POSTGRES_PASSWORD: Sonar@123456
POSTGRES_DB: sonarqube
volumes:
- ./postgres_data:/var/lib/postgresql/data
networks:
- sonar-net
healthcheck:
test: ["CMD-SHELL", "pg_isready -U sonar"]
interval: 10s
timeout: 5s
retries: 5
sonarqube:
image: sonarqube:9.9-community
container_name: sonarqube-9.9
restart: always
depends_on:
postgres:
condition: service_healthy
environment:
# 数据库连接
SONAR_JDBC_URL: jdbc:postgresql://postgres:5432/sonarqube
SONAR_JDBC_USERNAME: sonar
SONAR_JDBC_PASSWORD: Sonar@123456
# JVM内存,2C4G机器配置
SONAR_CE_JAVAOPTS: "-Xmx2048m"
SONAR_WEB_JAVAOPTS: "-Xmx1024m"
SONAR_SEARCH_JAVAOPTS: "-Xms512m -Xmx512m"
volumes:
- ./data:/opt/sonarqube/data
- ./extensions:/opt/sonarqube/extensions
- ./logs:/opt/sonarqube/logs
ports:
- "9000:9000"
networks:
- sonar-net
ulimits:
nofile:
soft: 65536
hard: 65536
nproc:
soft: 4096
hard: 4096
networks:
sonar-net:
四、防火墙放行端口
Anolis OS 8 默认 firewalld
# 放行9000端口
firewall-cmd --add-port=9000/tcp --permanent
firewall-cmd --reload
# 查看端口放行
firewall-cmd --list-ports
五、启动 SonarQube 9.9
cd /data/sonarqube
# 后台启动
docker compose up -d
# 查看启动日志(观察es、web、ce是否正常)
docker compose logs -f sonarqube
正常启动标志
日志出现 SonarQube is up 代表启动完成,首次初始化耗时 3~5 分钟。
六、访问与初始化
- 访问地址:
http://服务器IP:9000 - 默认账号密码:
- 用户名:
admin - 密码:
admin
- 用户名:
- 首次登录强制修改密码,建议设置复杂密码。
七、常见问题排查(Anolis OS 8.10 高频报错)
问题 1:Elasticsearch 启动失败 max_map_count 不足
max virtual memory areas vm.max_map_count [65530] is too low
解决:重新执行第二节内核参数配置,sysctl -p 重载。
问题 2:文件句柄过低报错 too many open files
解决:检查 /etc/security/limits.conf,重启容器:
docker compose down && docker compose up -d
问题 3:数据库连接失败
- 确认 postgres 容器健康:
docker compose ps - 核对 JDBC 账号密码,不要包含特殊符号空格
- 清空持久化目录重新初始化(数据会丢失)
bash
docker compose down
rm -rf ./postgres_data ./data
docker compose up -d
问题 4:页面访问超时 / 打不开
- 防火墙 9000 端口是否放行
- 云服务器安全组入站规则开放 9000
- 查看容器日志是否启动成功
八、日常运维命令
bash
# 停止
docker compose down
# 重启
docker compose restart sonarqube
# 查看实时日志
docker compose logs -f sonarqube
# 备份数据:直接打包 ./data ./postgres_data 目录
# 升级:修改image版本后重新up -d
补充:单机低配(2C2G)内存调优
修改 sonarqube 下环境变量内存参数,降低占用:
SONAR_CE_JAVAOPTS: "-Xmx1024m"
SONAR_WEB_JAVAOPTS: "-Xmx512m"
SONAR_SEARCH_JAVAOPTS: "-Xms256m -Xmx256m"
