心情
这次搭建从 0 到 1 整个耗时一下午加一个晚上,查文档,找问题,看的我眼睛都花了。不过最后成功之后还是会感受到了胜利的喜悦 ❤️ 。
调研
先调研了一下 sonar 的版本以及特性,目前最新版本为 8.0,最新稳定版本为 7.9。由于性能原因,sonar 从 7.9 之后就不在支持 MySQL,替代方案为 postgres。
选型
所以这次就选择了 postgres:12
和 sonarqube:7.9-community
,同时在 docker-compose 文件中进行配置并启动。
问题
首先运行 postgres 并没有什么问题,遇到的 2 个问题都出现在运行 sonarqube 上,耗时这么久也是因为自己对操作系统的理解还是不够,定位问题定位错了,导致怎么改都没用,最后安静下来仔细思考,分析出真正的问题才得以解决。
问题 1
第一个问题就是权限问题,由于官方的镜像中使用了 elasticsearch,容器中安装 es 的用户并非 root 用户,但是我是使用 root 用户启动的 docker-compose,所以挂载到宿主机的 es 日志目录权限也很高,导致 es 权限不够并安装失败。
这里最开始以为是 SELINUX
导致的权限问题,在网上查找了好多方法并一一试验,然而并没有什么用。检讨一下,因为我的 SELINUX 状态一直是 Disabled,所以它并不会生效也不会限制我的权限,但是自己并没有早点认识到这个问题,还浪费了好几个小时调试。不过也算是学习了,知道了更多 Linux 的安全知识。
最后猜到症结所在,使用了最简单的 chmod -R 777 xxx
命令,授权给了挂载目录,重启,生效。
问题 2
第二个问题是在解决上面问题并正常启动之后,发现容器自己停掉了,但是一旦日志文件产生了,问题就好排查了。查看日志,如下:
ERROR: [1] bootstrap checks failed
[1]: max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]
科学检索了一下,很多人都遇到过,是给 elasticsearch 分配内存的配置问题,解决方法为在宿主机执行:sysctl -w vm.max_map_count=262144
vm.max_map_count
参数,是允许一个进程在 VMA 中拥有的最大数量(VMA:虚拟内存地址, 一个连续的虚拟地址空间),当进程占用内存超过时, 直接 OOM。
由于 elasticsearch 占用内存较高。官方要求 max_map_count
需要配置到最小 262144。
max_map_count
配置文件写在系统的 /proc/sys/vm
中
通过 docker inspect
命令, 可查看 docker 使用宿主机的 /proc/sys
作为只读路径之一。说明镜像使用宿主机的 max_map_count
参数。因此直接修改宿主机的 max_map_count
参数即可。
通过这个问题,又对 Linux 的进程内存管理有了更多的了解,所以也不算亏吧
附录
最后附上 docker-compose.yml:
version: '3'
services:
postgres:
image: postgres:12
restart: always
container_name: postgres
ports:
- 5432:5432
volumes:
- /opt/postgres/postgresql/:/var/lib/postgresql
- /opt/postgres/data/:/var/lib/postgresql/data
environment:
TZ: Asia/Shanghai
POSTGRES_USER: sonar
POSTGRES_PASSWORD: sonar
POSTGRES_DB: sonar
sonar:
image: sonarqube:7.9-community
container_name: sonar
depends_on:
- postgres
volumes:
- /opt/sonarqube/extensions:/opt/sonarqube/extensions
- /opt/sonarqube/logs:/opt/sonarqube/logs
- /opt/sonarqube/data:/opt/sonarqube/data
- /opt/sonarqube/conf:/opt/sonarqube/conf
ports:
- 9000:9000
environment:
SONARQUBE_JDBC_USERNAME: sonar
SONARQUBE_JDBC_PASSWORD: sonar
SONARQUBE_JDBC_URL: jdbc:postgresql://postgres:5432/sonar
欢迎来到这里!
我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。
注册 关于