Anolis OS 8.10 Docker 部署 SonarQube 9.9 完整教程

目录

环境前置说明

[一、安装 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:页面访问超时 / 打不开)

八、日常运维命令

补充:单机低配(2C2G)内存调优


环境前置说明

  1. Anolis OS 8.10 兼容 CentOS 8 操作逻辑,内核、系统参数配置通用
  2. SonarQube 9.9 LTS 要求:
    • 内存:至少 2G,生产推荐 4G+
    • 数据库:PostgreSQL 13~15(官方不支持 MySQL)
    • 系统内核参数调整(虚拟内存、文件句柄)
  3. 容器方案: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 分钟。

六、访问与初始化

  1. 访问地址:http://服务器IP:9000
  2. 默认账号密码:
    • 用户名:admin
    • 密码:admin
  3. 首次登录强制修改密码,建议设置复杂密码。

七、常见问题排查(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:数据库连接失败

  1. 确认 postgres 容器健康:docker compose ps
  2. 核对 JDBC 账号密码,不要包含特殊符号空格
  3. 清空持久化目录重新初始化(数据会丢失)
bash 复制代码
docker compose down
rm -rf ./postgres_data ./data
docker compose up -d

问题 4:页面访问超时 / 打不开

  1. 防火墙 9000 端口是否放行
  2. 云服务器安全组入站规则开放 9000
  3. 查看容器日志是否启动成功

八、日常运维命令

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"
相关推荐
AAA@峥1 小时前
CentOS7 搭建 ELK 企业级日志集群:从部署到日志可视化完整实战
运维·elk·centos
ZKNOW甄知科技1 小时前
燕千云深度集成飞书:以AI之力,开启无感IT运维体验
大数据·运维·网络·数据库·人工智能·低代码·集成学习
叮咚侠2 小时前
docker安装的kibana+elasticsearch,突然kibana界面打不开了
运维·jenkins
nVisual2 小时前
数据中心机柜负载均衡与三相相位监控方案
运维·网络·负载均衡·数据中心布线·综合布线管理软件
国服第二切图仔2 小时前
02-breakpoint-system
运维·harmonyos
RisunJan2 小时前
Linux命令-semanage(SELinux 策略管理)
linux·运维·服务器
流浪0012 小时前
Linux系统篇 21:文件(五)——动静态库、ELF 底层原理全解
linux·运维·服务器
Dawn-bit2 小时前
Linux救援模式和系统恢复
linux·运维·服务器·云计算·运维开发
十八岁牛爷爷2 小时前
Linux 进程与进程状态・三层级深度解析
linux·运维·服务器