美文网首页
开发环境搭建 | 使用docker进行内网离线安装sonarqu

开发环境搭建 | 使用docker进行内网离线安装sonarqu

作者: Ricsy | 来源:发表于2023-08-25 16:40 被阅读0次


    一、安装简要

    1. 通过外网安装 sonarqube 并安装所需插件
    2. 打包相关镜像、sonarqube 工具插件
    3. 传输镜像、插件到内网
    4. 内网利用镜像安装 sonarqube
    5. 后台将插件放置到 sonarqube 的extensions/plugins目录并重启服务使插件生效
    6. 请你愉快使用!!!

    问题: 为什么要外网要安装一遍 sonarqube ,我又用不着?
    回答: 因为内网环境是无法通过 sonarqube 市场直接安装插件,只能从外网离线下载传输到内网使用,而且没找到能直接下载与sonarqube各版本的插件网址入口,虽然常见插件可以通过插件各自更新地址去获取(如:gitlab),但是依旧麻烦;如果你本身就有当前待安装sonarqube版本的插件包,也无需再更新插件,那你可以选择不装,直接进行内网操作。

    1.1 版本信息

    软件名称 版本 备注
    docker 24.0.5 2023.08.26 当前最新版,Winodws和Ubuntu均是该版本
    sonarqube 9.9 一般首选community社区版,个人或小型团队不考虑付费的开发者版、企业版、数据中心版
    postgres 15.4 2023.08.26 当前最新版

    sonarqube 9.9 官方文档 (附环境依赖截图)

    1.2 教程环境

    网络类型 系统 已安装软件 描述
    外网 Windows11 docker 请确保已安装对应Windows版,并已启用服务且服务正常
    内网 Ubuntu 22.04.2 AMD64 docker 请确保已安装对应Linux版,并已启用服务且服务正常
    • 查看docker服务状态: service docker status
    • 重启docker服务:        service docker restart

    1.3 sonarqube 常用插件整合

    文件名称 描述 下载地址
    sonar-pdf-plugin 生成PDF格式的 sonarqube 报告 https://gitee.com/zzulj/sonar-pdf-plugin
    sonar-l10n-zh 汉化sonarqube页面 https://github.com/xuhuisheng/sonar-l10n-zh

    为方便各位,整理的插件包见:sonarqube_extensions.tar.gz

    1.4 其他

    分类 文件名称 描述 下载地址
    docker 镜像 postgres 用于 sonarqube 的Database,可以选择其他数据库(如:Oracle等)
    开发插件 SonarLint 访问 SonarLint所有版本,根据自己jetbrains产品版本选择对应版本进行下载
    开发软件 NodeJS SonarLint 运行环境的依赖 Windows7  :node-v13.14.0-x64.msi

    Windows8+:node-v18.17.1-x64.msi

    备注:Windows7最高支持版本node 13.14.0
    • sonarqube 在默认情况下使用的是嵌入式数据库(H2数据库),而 H2 数据库适合用于评估和测试,不适合生产环境,如果直接使用H2,页面会提示:"Embedded database should be used for evaluation purposes only" ,为了解决这个问题,需要配置 SonarQube 使用一个持久性数据库,比如 PostgreSQL 、MySQL、Oracle或者Microsoft SQL Server等,以确保数据的持久存储和可靠性
    • sonarqube 7.9+不再支持Mysql,历史版本要求 Mysql版本满足 [5.6,8.0)
    • sonarqube页面地址默认为:localhost:9000(admin/admin)

    二、外网步骤

    PS:外网步骤的命令均在CMD窗口执行

    1. 进入指定目录
      mkdir sonarqube && cd sonarqube

    2. 下载相关镜像
      docker pull postgres:15.4 --platform linux/amd64

    docker pull sonarqube:9.9-community --platform linux/amd64

    1. 启动 sonarqube 镜像
    docker run --privileged=true -it --restart=always --name sonarqube ^
    -w /opt/sonarqube ^
    -p 9000:9000 ^
    -e TZ=Asia/Shanghai ^
    -e ALLOW_EMPTY_PASSWORD=yes ^
    -d sonarqube:9.9-community
    
    • 查看容器日志:docker logs -f sonarqube
    • 关闭容器方式:docker stop {容器ID}ps aux | grep {容器ID} | awk '{print $2}' | xargs kill -9
    1. 进入 sonarqube 并下载所需插件,重启后界面为中文

    考虑到不同 sonarqube 版本的插件名称可能会不同,可以参考对应的关键字

    常用插件名称 工具介绍 关键字
    Chinese Pack 汉化界面 Chinese
    ecoCode - Python language Python 静态代码分析 Python
    ecoCode - Java language Java 静态代码分析 Java
    ecoCode - PHP language PHP 静态代码分析 PHP
    1. 打包插件
      1)下载到本地


    2)压缩处理
    tar -czvf sonarqube_extensions.tar.gz ./plugins

    1. 镜像导出成tar包
    docker save -o sonarqube_9.9_community.tar sonarqube:9.9-community
    docker save -o postgres_15.4.tar postgres:15.4
    
    1. 压缩成tar.gz包(主要为减少内网文件传输大小)
    tar -czvf sonarqube_9.9_community.tar.gz sonarqube_9.9_community.tar
    tar -czvf postgres_15.4.tar.gz postgres_15.4.tar
    del sonarqube_9.9_community.tar postgres_15.4.tar
    dir
    

    三、内网步骤

    1. 上述3个tar.gz传输进行内网后放在指定Linux的指定目录(如:/opt/docker_images)


    2. 解压tar.gz包

    tar -xzvf sonarqube_9.9_community.tar.gz
    tar -xzvf postgres_15.4.tar.gz
    tar -xzvf sonarqube_extensions.tar.gz
    rm -rf sonarqube_9.9_community.tar.gz postgres_15.4.tar.gz sonarqube_extensions.tar.gz
    
    1. 使用内网Linux安装的docker加载镜像
    docker load -i sonarqube_9.9_community.tar
    docker load -i postgres_15.4.tar
    docker images
    
    1. 由于sonarqube安装目录是在容器中,便于方便与安全,故对重要目录进行挂载
      1)将/opt/sonarqube下的logs、conf、data、extensions目录挂载到宿主机中(以/opt/sonarqube为例)
      2)在宿主机创建/opt/sonarqube目录并赋予权限
    mkdir -p /opt/sonarqube/{logs,conf,data,extensions} && chmod -R 777 /opt/sonarqube
    
    1. Linux内核参数调整(在修改任何内核参数之前,最好了解参数的含义和影响,并在必要时备份系统或者记录当前的参数值,以便需要时可以恢复到之前的状态)
      1)调整单个进程拥有的虚拟内存区域数量(查看当前参数值:sysctl vm.max_map_count
      sysctl -w vm.max_map_count=262144

    2)调整系统可以打开的最大文件句柄数(查看当前参数值:sysctl fs.file-max
    sysctl -w fs.file-max=131072

    3)调整当前用户进程可以打开的最大文件句柄数量(查看当前参数值:ulimit -n
    ulimit -n 131072

    4)调整当前用户会话中允许的最大用户进程数(查看当前参数值:ulimit -u
    ulimit -u 8192

    • 为了使参数永久生效,加配置添加到/etc/sysctl.conf中,并使其立即生效
    • 第3、4条语句默认为sonarqube用户,可视情况调整其他用户名或*
      sed -i '$a\vm.max_map_count=262144' /etc/sysctl.conf
      sed -i '$a\fs.file-max=131072' /etc/sysctl.conf
      sysctl -p
      sed -i '$a\sonarqube - nofile 131072' /etc/security/limits.conf
      sed -i '$a\sonarqube - nproc 8192' /etc/security/limits.conf
    1. 启动 postgres 镜像并查看启动日志
      1)创建数据卷
      docker volume create pgdata

    2)启动容器

    docker run --privileged=true -it --restart=always --name postgres \
    -w /var/lib/postgresql/data \
    -p 5432:5432 \
    -e TZ=Asia/Shanghai \
    -e POSTGRES_USER=postgres \
    -e POSTGRES_PASSWORD=postgres \
    -v pgdata:/var/lib/postgresql/data \
    -d postgres:15.4
    

    3)查看日志
    docker logs -f postgres (Ctrl+C结束命令)

    4)创建sonar数据库

    export PGPASSWORD=postgres
    docker exec -it postgres psql -U postgres -c "CREATE DATABASE sonar;"
    unset PGPASSWORD
    
    1. 启动 sonarqube 镜像并查看启动日志
      1)启动容器(注意:调整17.31.34.24为实际的主机IP)
    docker run --privileged=true -it --restart=always --name sonarqube \
    -w /opt/sonarqube \
    -p 9000:9000 \
    -e TZ=Asia/Shanghai \
    -e ALLOW_EMPTY_PASSWORD=yes \
    -e SONAR_JDBC_URL="jdbc:postgresql://17.31.34.24:5432/sonar" \
    -e SONAR_JDBC_USERNAME=postgres \
    -e SONAR_JDBC_PASSWORD=postgres \
    -v /opt/sonarqube/logs:/opt/sonarqube/logs \
    -v /opt/sonarqube/conf:/opt/sonarqube/conf \
    -v /opt/sonarqube/data:/opt/sonarqube/data \
    -v /opt/sonarqube/extensions:/opt/sonarqube/extensions \
    -d sonarqube:9.9-community
    

    2)查看日志
    docker logs -f sonarqube

    【FAQ】:

    1. max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]
      解决方案:执行上述步骤4的第一步
    1. 访问 sonarqube
      默认:{主机IP}:9000 (admin/admin)
    1. 安装插件:将插件(jar 文件)复制到$SONAR_INSTALL_DIR/extensions/plugins目录下并重新启动
      cp -rf /opt/docker_image/plugins /opt/sonarqube/extensions/

    【后续文章】

    相关文章

      网友评论

          本文标题:开发环境搭建 | 使用docker进行内网离线安装sonarqu

          本文链接:https://www.haomeiwen.com/subject/iheumdtx.html