10

Sonarqube 官方 docker 镜像,不会保留任何配置更改,例如:creating users, changing root password or even installing new plugins.

一旦容器重新启动,所有配置更改都会消失,安装的插件也会丢失。甚至项目的密钥和它们之前的 QA 分析数据在重新启动后也不可用。

在使用 Sonarqube 的官方 docker 镜像时,我们如何持久化数据?

4

3 回答 3

16
  • Sonarqube 映像带有一个临时的 h2 数据库引擎,不建议将其用于生产,并且不会在容器重启后持续存在。
  • 我们需要建立自己的数据库,并在启动容器时将其指向 Sonarqube。
  • 从Sonarqube Dockerfile"$SONARQUBE_HOME/data", "$SONARQUBE_HOME/extensions"中可以看出, Sonarqube docker图像公开了两个卷。

由于我们想要跨调用持久化数据,我们需要确保已设置生产级数据库并链接到 Sonarqube,并创建扩展目录并将其作为卷安装在主机上,以便所有下载的插件都可用容器调用,并且可以被多个容器使用(如果需要)。

数据库设置:

create database sonar;
grant all on sonar.* to `sonar`@`%` identified by "SOME_PASSWORD";
flush privileges;

# since we do not know the containers IP before hand, we use '%' for sonarqube host IP.

没有必要创建表,Sonarqube 如果找不到它们就会创建它们。

启动 Sonarqube 容器:

# create a directory on host
mkdir /server_data/sonarqube/extensions
mkdir /server_data/sonarqube/data # this will be useful in saving startup time

# Start the container
docker run -d \
    --name sonarqube \
    -p 9000:9000 \
    -e SONARQUBE_JDBC_USERNAME=sonar \
    -e SONARQUBE_JDBC_PASSWORD=SOME_PASSWORD \
    -e SONARQUBE_JDBC_URL="jdbc:mysql://HOST_IP_OF_DB_SERVER:PORT/sonar?useUnicode=true&characterEncoding=utf8&rewriteBatchedStatements=true&useConfigs=maxPerformance" \
    -v /server_data/sonarqube/data:/opt/sonarqube/data \
    -v /server_data/sonarqube/extensions:/opt/sonarqube/extensions \
    sonarqube
于 2016-08-07T18:39:02.187 回答
3

嗨@VanagaS 和其他登陆这里的人。

我只是想提供上述的替代方案。也许有些人甚至会认为它更容易。

请注意映像的Dockerfile中的 SONARQUBE_HOME这一行docker-sonarqube。我们可以控制这个环境变量。

使用时docker run。只需这样做:

txt docker run -d \ ... ... -e SONARQUBE_HOME=/sonarqube-data -v /PERSISTENT_DISK/sonarqubeVolume:/sonarqube-data

这将使 Sonarqube 创建 conf、data 等文件夹并将数据存储在其中。如所须。


或与Kubernetes. 在您的部署 YAML 文件中。做:

txt ... ... env: - name: SONARQUBE_HOME value: /sonarqube-data ... ... volumeMounts: - name: app-volume mountPath: /sonarqube-data

属性中的 指向Kubernetesname部署YAML 文件部分中的卷。这将再次使 Sonarqube 使用mountPath 来创建扩展、conf 等文件夹,然后将数据保存在其中。volumeMountsvolumes/sonarqube-data

瞧,您的 Sonarqube 数据因此得以保留。

我希望这对其他人有帮助。

NB 请注意,YAML 和 Docker 运行示例并不详尽。他们专注于持久化 Sonarqube 数据的问题。

于 2018-12-12T08:36:01.337 回答
0

从 Sonarqube v7.9 开始,不支持 Mysql。需要使用postgresql。安装 Postgresql 并配置为在主机 ip 而不是 localhost 上运行,首选私有 ip。

参考:https ://www.digitalocean.com/community/tutorials/how-to-install-and-use-postgresql-on-ubuntu-18-04

postgres=# create database sonar;
postgres=# create user sonar with encrypted password 'mypass';
postgres=# grant all privileges on database sonar to sonar;

在主机上创建目录

mkdir /server_data/sonarqube/extensions
mkdir /server_data/sonarqube/data # this will be useful in saving startup time

启动容器

docker run -d
--name sonarqube
-p 9000:9000
-e SONARQUBE_JDBC_USERNAME=sonar
-e SONARQUBE_JDBC_PASSWORD=mypass
-e SONARQUBE_JDBC_URL=jdbc:postgresql://{host/private ip only}:5432/sonar
-v /server_data/sonarqube /data:/opt/sonarqube/data
-v /server_data/sonarqube/extensions:/opt/sonarqube/extensions
sonarqube

当您执行“docker logs container_id”时,您可能会遇到此错误

错误:[1] 引导检查失败 [1]:最大虚拟内存区域 vm.max_map_count [65530] 太低,至少增加到 [262144]

这是修复,在您的主机上运行

sysctl -w vm.max_map_count=262144

为了添加主机名编辑 /etc/postgresql/10/main/postgresql.conf

为了添加 docker 作为 postgres 的客户端编辑/etc/postgresql/10/main/pg_hba.conf

10 - 使用的 postgres 版本

于 2020-07-30T07:06:33.287 回答