SonarQube 迁移

SonarQube迁移全流程详解

一、历史部署版本信息整理

1. SonarQube 部署信息
  • 版本sonarqube-8.9.3.48735
  • 安装目录/opt/sonarqube-8.9.3.48735
  • 配置文件
    # 位置:/opt/sonarqube-8.9.3.48735/conf/sonar.properties
    sonar.jdbc.username=sonar
    sonar.jdbc.password=sonar12
    sonar.jdbc.url=jdbc:postgresql://127.0.0.1:15432/sonar?currentSchema=public
    

2. JDK 环境信息
  • 配置文件/opt/sonarqube-8.9.3.48735/conf/wrapper.conf
  • Java 路径/opt/java/openjdk-11/bin/java
  • 版本详情
    openjdk version "11.0.7" 2020-04-14 LTS
    OpenJDK Runtime Environment Zulu11.39+15-CA (build 11.0.7+10-LTS)
    OpenJDK 64-Bit Server VM Zulu11.39+15-CA (build 11.0.7+10-LTS, mixed mode)
    

3. PostgreSQL 数据库信息
  • 数据库类型:PostgreSQL
  • 版本11.12
  • 连接信息
    • 用户名:sonar
    • URL:jdbc:postgresql://127.0.0.1:15432/sonar?currentSchema=public
    • 驱动:PostgreSQL JDBC Driver 42.2.19
容器部署详情
  • 容器名称sonar-pg_pg_1
  • 镜像版本postgres:11.12-alpine
  • 端口映射15432:5432
  • 数据卷挂载
    volumes:
      - ./pg-data:/var/lib/postgresql/data
    
  • 环境变量
    environment:
      - POSTGRES_USER=sonar
      - POSTGRES_PASSWORD=xxxxxxx  # 实际密码已隐藏
      - POSTGRES_DB=sonar
      - DB_EXTENSION=pg_trgm
    
  • 权限配置
    uid=70(postgres) gid=70(postgres) groups=70(postgres)
    
Docker Compose 配置
# 位置:/home/xxx/docker-compose/sonar-pg/docker-compose.yml
version: "2"
services:
  pg:
    restart: always
    image: postgres:11.12-alpine
    volumes:
      - ./pg-data:/var/lib/postgresql/data
    environment:
      - POSTGRES_USER=sonar
      - POSTGRES_PASSWORD=xxxxxxx
      - POSTGRES_DB=sonar
      - DB_EXTENSION=pg_trgm
    ports:
      - "15432:5432"

4. 关键组件关系图
graph LR
  SonarQube[SonarQube 8.9.3] -->|JDBC 连接| PostgreSQL[PostgreSQL 11.12]
  SonarQube -->|依赖运行时| JDK[JDK 11.0.7]
  PostgreSQL -->|容器化运行| Docker[Docker Engine]
  Docker -->|挂载卷| HostFS[/home/xxx/docker-compose/sonar-pg/pg-data]


二、SonarQube 迁移备份步骤详解

1. 准备备份目录
mkdir -p /opt/sonar/backup && cd /opt/sonar/backup
  • 创建专用备份目录并进入
2. 验证目录权限
stat /opt/sonarqube-8.9.3.48735
  • 确认目录所有者权限(需与运行用户一致)
3. 停止 SonarQube 服务
su xxx
cd /opt/sonarqube-8.9.3.48735
./bin/linux-x86-64/sonar.sh stop
exit  # 返回 root
  • 必须确认进程完全终止(建议用 ps aux | grep sonar 验证)
4. 数据库备份
docker exec sonar-pg_pg_1 pg_dump -U sonar -d sonar > /opt/sonar/backup/sonar_db_dump.sql
docker stop sonar-pg_pg_1
  • 双重保障:逻辑备份 + 后续物理备份
  • 停止容器确保数据一致性
5. SonarQube 主目录备份
tar -czvf /opt/sonar/backup/sonarqube-8.9.3.48735.tar.gz \
    --exclude=sonarqube-8.9.3.48735/data/es7/* \
    --exclude=sonarqube-8.9.3.48735/logs/* \
    --exclude=sonarqube-8.9.3.48735/temp/* \
    -C /opt sonarqube-8.9.3.48735
  • 排除非必要目录(节省 50%+ 空间)
  • 保留核心配置和插件
6. 基础设施备份
# Docker 镜像
docker save -o /opt/sonar/backup/postgres-alpine.tar postgres:13.5-alpine

# 物理数据目录
tar -czvf /opt/sonar/backup/pgdata.tar.gz -C /home/xxx/docker-compose/sonar-pg pg-data

# Docker Compose 配置
cp /home/xxx/docker-compose/sonar-pg/docker-compose.yml /opt/sonar/backup/

# JDK 安装包
wget -O /opt/sonar/backup/openjdk-11.tar.gz https://binary.xxx.com.cn/src/java/openjdk-11.0.2_linux-x64_bin.tar.gz
7. 整合备份包
cd /opt/sonar/backup
tar -czvf sonar_migration_backup_$(date +%Y%m%d).tar.gz --exclude=sonar_migration_backup_* .
  • 自动添加日期标签
  • 排除自身避免递归
8. 传输到新服务器
# 新服务器创建目录
ssh root@新服务器IP "mkdir -p /opt/sonar/backup"

# 传输备份包
scp /opt/sonar/backup/sonar_migration_backup_*.tar.gz root@新服务器IP:/opt/sonar/backup/
  • 需提前配置 SSH 密钥认证
  • 建议校验文件完整性:
    md5sum sonar_migration_backup_*.tar.gz  # 新旧服务器对比
    

9. 关键注意事项
  1. 权限一致性

    • 恢复时需保持原目录所有者(步骤 2 的 stat 结果)
  2. 空间预估

    du -sh /opt/sonar/backup/*
    
    • 确保目标服务器有足够空间(建议预留 2 倍余量)
  3. 备份验证策略

    • 数据库:pg_restore -l sonar_db_dump.sql 检查结构
    • 压缩包:tar -tf 包名.tar.gz 验证文件列表
  4. 迁移窗口

    • 全过程需在维护时段进行
    • 总耗时参考:
      • 停止服务:1-3 分钟
      • 备份:取决于数据量(每 GB 约 2-5 分钟)
      • 传输:依赖网络带宽

建议在迁移前进行全流程演练,重点验证数据库恢复和目录权限重建环节。



三、新服务器部署SonarQube步骤整理

以下是根据您提供的部署过程整理出的结构化步骤。整个过程包括系统参数设置、依赖安装、数据库恢复和SonarQube配置等关键环节。所有步骤基于真实部署实践,确保清晰可靠。我将按逻辑顺序组织,分为主要阶段:系统准备、数据库部署、SonarQube安装和验证。

1. 系统参数设置

确保系统参数满足SonarQube官方要求(如vm.max_map_count至少524288)。包括动态设置和永久配置。

  • 检查当前参数值

    sysctl vm.max_map_count
    sysctl fs.file-max
    ulimit -n  # 检查文件描述符限制
    ulimit -u  # 检查线程限制
    
  • 动态设置当前会话

    sysctl -w vm.max_map_count=524288
    sysctl -w fs.file-max=131072
    ulimit -n 131072
    ulimit -u 8192
    
  • 永久设置系统参数

    echo "vm.max_map_count=524288" | sudo tee -a /etc/sysctl.conf
    echo "fs.file-max=131072" | sudo tee -a /etc/sysctl.conf
    sudo sysctl -p  # 应用配置
    echo "* soft nofile 131072" | sudo tee -a /etc/security/limits.conf
    echo "* hard nofile 131072" | sudo tee -a /etc/security/limits.conf
    echo "* soft nproc 8192" | sudo tee -a /etc/security/limits.conf
    echo "* hard nproc 8192" | sudo tee -a /etc/security/limits.conf
    
2. 依赖安装

安装必要的字体包和组件,确保SonarQube运行环境完整。

  • 安装Fontconfig和FreeType字体

    # 检查是否已安装
    dpkg -l | grep fontconfig
    dpkg -l | grep freetype
    # 安装缺失包
    apt-get install fontconfig-config libfontconfig1 libfreetype6
    
  • 检查内核SECCOMP支持(确保安全特性):

    grep SECCOMP /boot/config-$(uname -r)
    # 预期输出包含:CONFIG_SECCOMP=y 等
    
  • 安装Docker和组件(可选,如果使用容器化部署):

    apt-get update
    apt-get install docker-compose-plugin -y
    systemctl enable docker
    systemctl start docker
    
3. 目录准备和JDK安装

设置工作目录并安装匹配的JDK版本。

  • 创建目录和解压备份

    mkdir -p /opt/sonar/backup
    cd /opt/sonar/backup
    tar -zxvf /opt/sonar/backup/sonar_migration_backup_$(date +%Y%m%d).tar.gz -C /opt/sonar/backup/
    
  • 安装JDK

    mkdir -p /opt/software
    tar -xzvf /opt/sonar/backup/openjdk-11.tar.gz -C /opt/software
    # 验证安装
    /opt/software/jdk-11.0.2/bin/java -version
    
4. 数据库恢复和启动

恢复PostgreSQL数据库,有两种方案:直接恢复数据目录或SQL导入。

  • 创建数据库目录

    mkdir -p /home/xxx/docker-compose/sonar-pg
    
  • 方案一:直接恢复数据目录

    tar -xzvf /opt/sonar/backup/pgdata.tar.gz -C /home/xxx/docker-compose/sonar-pg
    chown -R 70:70 /home/xxx/docker-compose/sonar-pg/pg-data  # 修正权限
    cp /opt/sonar/backup/docker-compose.yml /home/xxx/docker-compose/sonar-pg/
    docker load -i /opt/sonar/backup/postgres-alpine.tar
    # 启动PostgreSQL
    cd /home/xxx/docker-compose/sonar-pg
    docker-compose up -d
    
  • 方案二:SQL导入(如果直接恢复失败)

    docker stop sonar-pg_pg_1  # 停止容器
    rm -rf /home/xxx/docker-compose/sonar-pg/pg-data
    mkdir -p /home/xxx/docker-compose/sonar-pg/pg-data
    chown -R 70:70 /home/xxx/docker-compose/sonar-pg/pg-data
    docker-compose up -d  # 重新启动
    docker cp /opt/sonar/backup/sonar_db_dump.sql sonar-pg_pg_1:/tmp/
    docker exec -it sonar-pg_pg_1 psql -U sonar -d sonar -f /tmp/sonar_db_dump.sql
    
  • 验证数据库状态

    docker-compose logs -f pg
    docker exec sonar-pg_pg_1 psql -U sonar -d sonar -c "SELECT 1"
    docker exec sonar-pg_pg_1 psql -U sonar -d sonar -c "\dt"  # 检查表数量
    
5. SonarQube安装和配置

解压并配置SonarQube,确保服务正确启动。

  • 解压安装包和设置用户

    tar -xzvf /opt/sonar/backup/sonarqube-8.9.3.48735.tar.gz -C /opt
    adduser --system --no-create-home --group xxx
    usermod -s /bin/bash xxx  # 修改用户shell
    chown -R xxx:xxx /opt/sonarqube-8.9.3.48735
    chmod -R 755 /opt/sonarqube-8.9.3.48735
    chmod +x /opt/sonarqube-8.9.3.48735/bin/linux-x86-64/*
    # 处理临时目录
    rm -rf /opt/sonarqube-8.9.3.48735/temp
    mkdir -p /opt/sonarqube-8.9.3.48735/temp
    chown -R xxx:xxx /opt/sonarqube-8.9.3.48735/temp
    chmod -R 755 /opt/sonarqube-8.9.3.48735/temp
    
  • 修改配置文件

    vim /opt/sonarqube-8.9.3.48735/conf/sonar.properties  # 更新数据库连接信息
    
  • 启动SonarQube服务

    su xxx
    cd /opt/sonarqube-8.9.3.48735
    rm -rf /opt/sonarqube-8.9.3.48735/data/es7/*  # 清理旧索引
    rm -rf /opt/sonarqube-8.9.3.48735/logs/*
    ./bin/linux-x86-64/sonar.sh start
    # 查看启动日志
    ./bin/linux-x86-64/sonar.sh console
    
6. 验证和注意事项
  • 端口检查:确保关键端口无冲突:
    lsof -i :9001  # SonarQube端口
    lsof -i :38670  # PostgreSQL端口
    
  • 整体验证
    • 访问SonarQube Web界面(自定义端口9001),确认服务运行。
    • 检查日志文件(位于/opt/sonarqube-8.9.3.48735/logs)是否有错误。
  • 注意事项
    • 数据库恢复时,优先使用方案一(直接恢复目录),如果失败则切换方案二(SQL导入)。
    • 确保所有路径(如/home/xxx)根据实际环境调整。
    • 如果迁移后索引重建,需清理es7目录。
    • 建议在操作前备份关键数据,避免意外。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值