美文网首页
docker安装sonarqube

docker安装sonarqube

作者: david161 | 来源:发表于2022-04-06 09:00 被阅读0次

    这里我们在我们的服务器上搭建一个SonarQube,这里通过docker安装,使用的是SonarQube8.9的长期支持版本,配套的需要。

    sonarqube官网

    https://hub.docker.com/_/sonarqube
    

    postgreSQL官网

    https://hub.docker.com/_/postgres
    

    ELK初始化设置

    这里我们安装的SonarQube依赖ELK,我们这里需要修改系统控制权限,原因在于ElasticSearch需要开辟一个65536字节以上空间的虚拟内存。Linux默认不允许任何用户和应用程序直接开辟这么大的虚拟内存,这样我们就需要去修改sysctl.conf文件。

    vi /etc/sysctl.conf 
    添加参数:新增如下内容在sysctl.conf文件中,当前用户拥有的内存权限大小 
    vm.max_map_count=262144 
    
    重启生效:让系统控制权限配置生效 
    sysctl -p
    

    基础镜像

    # 拉取7.9.4的镜像环境
    docker pull sonarqube:7.9.4-community 
    
    # 拉取8.9.8的镜像环境
    docker pull sonarqube:8.9.8-community 
    
    最新版本 
    docker pull postgres:13-alpine 
    
    根据官方要求: 
    sonarqube:7.9.4-community版本postgreSQL数据的版本为:9.3–9.6。最高支持10版本。 
    docker pull postgres:9.6.19-alpine 
    
    sonarqube:8.9.8-community版本postgreSQL数据的版本为:9–12。最高支持13版本。
    docker pull postgres:12.4-alpine
    

    自定义镜像

    查看sonarqube版本

    查看sonarqube版本的目的是为了自定义镜像。

    # 启动 sonarqube:7.9.4-community,起名sonarqube,做端口号映射
    docker run -itd --name=sonarqube -p 9000:9000 sonarqube:7.9.4-community 
    docker exec -it sonarqube /bin/bash 
    cat /etc/issue 
    返回信息如下: 
    Debian GNU/Linux 10 \n \l 
    
    结论:sonarqube7.9.x是debian系统 
    # 退出容器
    exit 
    # 停止容器
    docker stop sonarqube 
    # 删除容器
    docker rm sonarqube 
    
    # 启动 sonarqube:8.9.8-community,起名sonarqube,做端口号映射
    docker run -itd --name=sonarqube -p 9000:9000 sonarqube:8.9.8-community 
    
    # 查看启动情况日志
    docker logs -f sonarqube
    
    # 进入容器查看
    docker exec -it sonarqube /bin/bash 
    cat /etc/issue 
    返回信息如下: 
    Welcome to Alpine Linux 3.13 
    Kernel \r on an \m (\l) 
    
    结论:sonarqube8.9.x是Alpine系统,这里也可以解释了8.x的版本为啥比7.x的版本还要小一点了。
    # 退出容器
    exit 
    # 停止容器
    docker stop sonarqube 
    # 删除容器
    docker rm sonarqube
    

    这里我们可以查看到SonarQube的目录(8.9.8社区版)


    image.png

    sonarqube制作镜像

    上面我们已经看到了,原始的sonarqube镜像有一些问题,一个是时区问题,不是我们的东八区的时间而是UTC时间,需要我们调整。另外一个可选的调整是中文插件没有匹配上,我们要拷贝中文插件到对应得目录里面去。

    dockerfile

    上面我们已经看到了,sonarqube7.x是基于debian系统的。

    FROM sonarqube:7.9.4-community 
    # 作者信息 
    MAINTAINER sonarqube from date UTC by Asia/Shanghai "david"
    #设置系统时间
    ENV TZ Asia/Shanghai 
    #将中文jar包复制到对应目录(这里jar包要提前准备好,注意汉化包的匹配,8.x版本后汉化包的名称才和sonarqube对应上)
    ADD sonar-l10n-zh-plugin-1.29.jar /opt/sonarqube/extensions/plugins/
    

    而sonarqube8.9.x是基于Alpine Linux基础系统的,同样的我们也可以基于他制作镜像

    FROM sonarqube:8.9.8-community 
    # 作者信息 
    MAINTAINER sonarqube from date UTC by Asia/Shanghai "david"
    #设置系统时间
    ENV TZ Asia/Shanghai 
    #将中文jar包复制到对应目录
    ADD sonar-l10n-zh-plugin-8.9.jar /opt/sonarqube/extensions/plugins/
    

    dockerfile编写完成后,我们要将Dockerfile和汉化包上传到服务器上。


    image.png

    汉化包我们可以下载,下载地址:

    https://github.com/xuhuisheng/sonar-l10n-zh/releases
    

    我们可以基于他来构造镜像了,7.9.4的版本和8.9.8的版本分别执行如下命令

    # 构建7.9.4的版本镜像(注意命令后面还有一个点)
    docker build --rm -t david/sonarqube:7.9.4-community .
    
    # 构建8.9.8的版本镜像(注意命令后面还有一个点)
    docker build --rm -t david/sonarqube:8.9.8-community .
    

    8.9.8版本的执行结果如下图所示:


    image.png
    试运行镜像

    试运行的目的是为了获得容器内挂载卷的内容,另外顺便可以看下汉化包是不是起到作用了,上面我们已经删掉了之前的8.9.8的标准镜像,这里我们执行命令运行一下我们的自定义镜像。

    # 运行我们自定义的对象sonarqube:8.9.8-community
    docker run -itd --name=sonarqube -p 9000:9000 david/sonarqube:8.9.8-community 
    
    # 查看一下运行日志是否有问题(可选择不看,看的话看到SonarQube is up的字样说明已经启动成功了)
    docker logs -f sonarqube
    
    #把容器里面的内容拷贝到宿主机下
    docker cp sonarqube:/opt/sonarqube /home/david/data/ 
    

    上面过程中启动成功后,我们可以通过页面访问看一下我们的SonarQube是否启动成功了,包含汉化包是否生效。我们直接输入地址http://192.168.0.15:9000,看到效果正常的,如下图所示:


    image.png

    容器卷挂载

    我们要挂载容器卷过后,我们的docker迁移后数据才不会丢失。
    我们在进入到容器后,可以看到他的目录,这里以8.9.8版本为例,如下图所示:


    image.png

    这里面有些目录我们是需要挂载的,官方的建议需要挂载的目录卷如下:
    /opt/sonarqube/data:数据文件,例如嵌入式H2数据库和Elasticsearch索引。
    /opt/sonarqube/logs: 包含 SonarQube 访问日志、web 进程、CE 进程、Elasticsearch 日志。
    /opt/sonarqube/extensions: 用于 3rd 方插件。
    以上是8.x.x版本的需要映射的目录卷,如果是7.9.X版本的还要多映射一个conf目录。
    /opt/sonarqube/conf:这个目录是配置文件的,例如sonar.properties文件。

    生产级的sonarqube部署

    之前我们制作的镜像,都没有关联数据库,这个对实际的公司级的项目来说是不够的,为了防止我们我们的数据丢失,需要挂载postgre数据库,这里使用docker-compose的方式去对sonarqube做一个完整的

    容器目录准备

    这里我们先建好对应的目录

    # 创建容器映射路径 
    mkdir -p  /home/david/data/postgresql/data 
    mkdir -p /home/david/data/sonarqube/{extensions,logs,data} 
    
    # 启动容器映射路径权限问题 
    chmod -R 777 /home/david/data/postgresql/* 
    chmod -R 777 /home/david/data/sonarqube/*
    
    docker-compose.yml文件编写

    这里的docker-compose的编写我们可参考官网中关于dockerfile部分的介绍,docker官网地址:

    https://hub.docker.com/_/sonarqube
    https://hub.docker.com/_/postgres
    

    从上面选择对应的版本的Dockerfile相关的链接,可以查看到相关的配置项。

    version: "3.7" 
    services: 
      postgres:
        image: postgres:12.4-alpine 
        ports: 
        - 5432:5432 
        restart: always 
        environment: 
          - POSTGRES_DB=sonar 
          - POSTGRES_USER=sonar 
          - POSTGRES_PASSWORD=sonar 
          - TZ=Asia/Shanghai 
        volumes: 
        - /home/david/data/postgresql/data:/var/lib/postgresql/data 
      sonarqube: 
        image: david/sonarqube:8.9.8-community 
        ports: 
        - 9000:9000 
        environment: 
          - SONARQUBE_JDBC_URL=jdbc:postgresql://postgres:5432/sonar
          - SONARQUBE_JDBC_USERNAME=sonar
          - SONARQUBE_JDBC_PASSWORD=sonar 
        restart: always 
        depends_on: 
          - postgres 
        volumes: 
        - /home/david/data/sonarqube/data:/opt/sonarqube/data 
        - /home/david/data/sonarqube/logs:/opt/sonarqube/logs 
        - /home/david/data/sonarqube/extensions:/opt/sonarqube/extensions
    
    运行容器
    # 启动docker-compose
    docker-compose up -d 
    
    # 查看docker-compose的启动日志
    docker-compose logs -f 
    
    # 查看容器运行情况
    docker-compose ps
    

    这里容器运行有依赖关系,所以我们要稍微等一下再判断容器运行是否正常。

    相关文章

      网友评论

          本文标题:docker安装sonarqube

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