如何在 Sonarqube docker 图像中跨容器调用持久保存配置和分析
How to persist configuration & analytics across container invocations in Sonarqube docker image
Sonarqube 官方 docker 图片,不会保留任何配置更改,例如:creating users, changing root password or even installing new plugins
。
一旦容器重新启动,所有配置更改都会消失,安装的插件也会丢失。重启后,甚至项目的密钥及其之前的 QA 分析数据也不可用。
使用Sonarqube的官方docker镜像如何持久化数据?
- Sonarqube 图像带有一个临时的 h2 数据库引擎,不推荐用于生产,并且不会在容器重新启动时持续存在。
- 我们需要建立一个自己的数据库,并在启动容器时将其指向Sonarqube。
- Sonarqube docker 图像显示了从 Sonarqube Dockerfile 看到的两卷
"$SONARQUBE_HOME/data", "$SONARQUBE_HOME/extensions"
。
由于我们希望跨调用持久保存数据,因此我们需要确保已设置生产级数据库并将其链接到 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
嗨@VanagaS 和其他人在这里着陆。
我只是想提供一种替代上述方法的方法。也许有些人甚至会认为它更容易。
请注意 docker-sonarqube
图像的 Docker 文件中的这一行 SONARQUBE_HOME。我们可以控制这个环境变量。
使用时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
而volumeMounts
属性中的name
指向Kubernetes部署YAML文件volumes
部分的一个volume。
这将再次使 Sonarqube 使用 /sonarqube-data
mountPath 来创建扩展、conf 等文件夹,然后在其中保存数据。
瞧,你的 Sonarqube 数据因此得以保留。
我希望这对其他人有所帮助。
N.B。请注意,YAML 和 Docker 运行 示例并不详尽。他们专注于持久化 Sonarqube 数据的问题。
自 Sonarqube v7.9 起,不支持 Mysql。需要使用 postgresql。安装 Postgresql 并在主机 ip 上配置为 运行 而不是本地主机,首选私有 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 运行 -d
--name sonarqube
-p 9000:9000
-e SONARQUBE_JDBC_USERNAME=声纳
-e SONARQUBE_JDBC_PASSWORD=我的密码
-e SONARQUBE_JDBC_URL=jdbc:postgresql://{host/private 仅 ip}:5432/sonar
-v /server_data/sonarqube/data:/opt/sonarqube/data
-v /server_data/sonarqube/extensions:/opt/sonarqube/extensions
声呐
执行“docker logs container_id”时可能会遇到此错误
ERROR: [1] bootstrap checks failed [1]: max virtual memory areas
vm.max_map_count [65530] is too low, increase to at least [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 版本
Sonarqube 官方 docker 图片,不会保留任何配置更改,例如:creating users, changing root password or even installing new plugins
。
一旦容器重新启动,所有配置更改都会消失,安装的插件也会丢失。重启后,甚至项目的密钥及其之前的 QA 分析数据也不可用。
使用Sonarqube的官方docker镜像如何持久化数据?
- Sonarqube 图像带有一个临时的 h2 数据库引擎,不推荐用于生产,并且不会在容器重新启动时持续存在。
- 我们需要建立一个自己的数据库,并在启动容器时将其指向Sonarqube。
- Sonarqube docker 图像显示了从 Sonarqube Dockerfile 看到的两卷
"$SONARQUBE_HOME/data", "$SONARQUBE_HOME/extensions"
。
由于我们希望跨调用持久保存数据,因此我们需要确保已设置生产级数据库并将其链接到 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
嗨@VanagaS 和其他人在这里着陆。
我只是想提供一种替代上述方法的方法。也许有些人甚至会认为它更容易。
请注意 docker-sonarqube
图像的 Docker 文件中的这一行 SONARQUBE_HOME。我们可以控制这个环境变量。
使用时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
而volumeMounts
属性中的name
指向Kubernetes部署YAML文件volumes
部分的一个volume。
这将再次使 Sonarqube 使用 /sonarqube-data
mountPath 来创建扩展、conf 等文件夹,然后在其中保存数据。
瞧,你的 Sonarqube 数据因此得以保留。
我希望这对其他人有所帮助。
N.B。请注意,YAML 和 Docker 运行 示例并不详尽。他们专注于持久化 Sonarqube 数据的问题。
自 Sonarqube v7.9 起,不支持 Mysql。需要使用 postgresql。安装 Postgresql 并在主机 ip 上配置为 运行 而不是本地主机,首选私有 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 运行 -d
--name sonarqube
-p 9000:9000
-e SONARQUBE_JDBC_USERNAME=声纳
-e SONARQUBE_JDBC_PASSWORD=我的密码
-e SONARQUBE_JDBC_URL=jdbc:postgresql://{host/private 仅 ip}:5432/sonar
-v /server_data/sonarqube/data:/opt/sonarqube/data
-v /server_data/sonarqube/extensions:/opt/sonarqube/extensions
声呐
执行“docker logs container_id”时可能会遇到此错误
ERROR: [1] bootstrap checks failed [1]: max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [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 版本