一、历史部署版本信息整理
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. 关键注意事项
-
权限一致性
- 恢复时需保持原目录所有者(步骤 2 的
stat
结果)
- 恢复时需保持原目录所有者(步骤 2 的
-
空间预估
du -sh /opt/sonar/backup/*
- 确保目标服务器有足够空间(建议预留 2 倍余量)
-
备份验证策略
- 数据库:
pg_restore -l sonar_db_dump.sql
检查结构 - 压缩包:
tar -tf 包名.tar.gz
验证文件列表
- 数据库:
-
迁移窗口
- 全过程需在维护时段进行
- 总耗时参考:
- 停止服务: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
目录。 - 建议在操作前备份关键数据,避免意外。