这里我们在我们的服务器上搭建一个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
这里容器运行有依赖关系,所以我们要稍微等一下再判断容器运行是否正常。
网友评论