docker安装sonarqube

2022-04-06  本文已影响0人  david161

这里我们在我们的服务器上搭建一个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

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

上一篇 下一篇

猜你喜欢

热点阅读