也没有去看官方文档,直接百度搜了写教程,直接干的。看到有 mysql和postgres两种数据库,我想直接用mysql把~毕竟熟悉点。最后终于踩坑了~sonqube7.9之后的版本不在支持mysql,我使用docker pull镜像的时候,基本都是latest状态,所以这个坑,是一定要带了。我把docker安装MySQL的操作,记录在最后,一方面如果需要建mysql可以有所借鉴,如果要用sonqube7.9之前,也能有所参看。
1.postgresql 运行,建库,授权
[root@localhost software]# docker run --name db -p 5432:5432 -e POSTGRES_USER=sonar -e POSTGRES_PASSWORD=sonar -d postgres
0860f8dee67445edfef33ebd2a79b8c8099e4ce2c1921e0e16289691c71f17a9
[root@localhost software]# docker exec -it db /bin/bash (进入db容器)
root@0860f8dee674:/# psql -U sonar (进入数据库)
psql (12.3 (Debian 12.3-1.pgdg100+1))
Type "help" for help.
sonar=# create database sonar; (建表)
ERROR: database "sonar" already exists(不知道数据库存在是不是因为之前MySQL建的)
sonar=# alter role sonar createdb;alter role sonar superuser;alter role sonar createrole; (给sonar授权)
ALTER ROLE
ALTER ROLE
ALTER ROLE
sonar=# alter database sonar owner to sonar; (sonar 数据库owner)
ALTER DATABASE
sonar=# exit (退出数据库)
root@0860f8dee674:/# exit (退出容器)
exit
2.运行sonarqube ==》运行等,报错处理
[root@localhost ~]# docker run --name sq -e sonar.jdbc.password=sonar -e sonar.jdbc.username=sonar -e sonar.jdbc.url=jdbc:postgresql://postgres/sonar --link db: postgres -p 9000:9000 -d sonarqube
196b0fcea1c288c617f685afdf83c37d99febb94bb8b6a45c9fad67baf2c6955
[root@localhost ~]# docker ps -a (查看新建容器状态,看到了exited)
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
196b0fcea1c2 sonarqube "bin/run.sh bin/sona…" 56 seconds ago Exited (0) 41 seconds ago sq
0860f8dee674 postgres "docker-entrypoint.s…" 5 minutes ago Up 5 minutes 0.0.0.0:5432->5432/tcp db
42bbe8a61a72 registry.cn-hangzhou.aliyuncs.com/anoy/yapi "node server/app.js" 4 days ago Up 23 hours 0.0.0.0:3000->3000/tcp yapi
e3bbf9397ed5 mongo "docker-entrypoint.s…" 4 days ago Up 23 hours 0.0.0.0:27017->27017/tcp docker_mongodb
[root@localhost ~]# docker logs 19 (查看容器的日志)
2020.06.23 15:03:29 INFO app[][o.s.a.AppFileSystem] Cleaning or creating temp directory /opt/sonarqube/temp
2020.06.23 15:03:29 INFO app[][o.s.a.es.EsSettings] Elasticsearch listening on /127.0.0.1:9001
2020.06.23 15:03:29 INFO app[][o.s.a.ProcessLauncherImpl] Launch process[[key='es', ipcIndex=1, logFilenamePrefix=es]] from [/opt/sonarqube/elasticsearch]: /opt/sonarqube/elasticsearch/bin/elasticsearch
2020.06.23 15:03:29 INFO app[][o.s.a.SchedulerImpl] Waiting for Elasticsearch to be up and running
2020.06.23 15:03:30 INFO app[][o.e.p.PluginsService] no modules loaded
2020.06.23 15:03:30 INFO app[][o.e.p.PluginsService] loaded plugin [org.elasticsearch.transport.Netty4Plugin]
OpenJDK 64-Bit Server VM warning: Option UseConcMarkSweepGC was deprecated in version 9.0 and will likely be removed in a future release.
2020.06.23 15:03:34 INFO es[][o.e.e.NodeEnvironment] using [1] data paths, mounts [[/ (rootfs)]], net usable_space [39.5gb], net total_space [43.7gb], types [rootfs]
2020.06.23 15:03:34 INFO es[][o.e.e.NodeEnvironment] heap size [495.3mb], compressed ordinary object pointers [true]
2020.06.23 15:03:34 INFO es[][o.e.n.Node] node name [sonarqube], node ID [h_Mcs4vaQcmxI8t9ctC2Mg]
2020.06.23 15:03:34 INFO es[][o.e.n.Node] version[6.8.4], pid[36], build[default/tar/bca0c8d/2019-10-16T06:19:49.319352Z], OS[Linux/3.10.0-514.el7.x86_64/amd64], JVM[AdoptOpenJDK/OpenJDK 64-Bit Server VM/11.0.6/11.0.6+10]
2020.06.23 15:03:34 INFO es[][o.e.n.Node] JVM arguments [-XX:+UseConcMarkSweepGC, -XX:CMSInitiatingOccupancyFraction=75, -XX:+UseCMSInitiatingOccupancyOnly, -Des.networkaddress.cache.ttl=60, -Des.networkaddress.cache.negative.ttl=10, -XX:+AlwaysPreTouch, -Xss1m, -Djava.awt.headless=true, -Dfile.encoding=UTF-8, -Djna.nosys=true, -XX:-OmitStackTraceInFastThrow, -Dio.netty.noUnsafe=true, -Dio.netty.noKeySetOptimization=true, -Dio.netty.recycler.maxCapacityPerThread=0, -Dlog4j.shutdownHookEnabled=false, -Dlog4j2.disable.jmx=true, -Djava.io.tmpdir=/opt/sonarqube/temp, -XX:ErrorFile=../logs/es_hs_err_pid%p.log, -Des.enforce.bootstrap.checks=true, -Xmx512m, -Xms512m, -XX:+HeapDumpOnOutOfMemoryError, -Des.path.home=/opt/sonarqube/elasticsearch, -Des.path.conf=/opt/sonarqube/temp/conf/es, -Des.distribution.flavor=default, -Des.distribution.type=tar]
2020.06.23 15:03:35 INFO es[][o.e.p.PluginsService] loaded module [analysis-common]
2020.06.23 15:03:35 INFO es[][o.e.p.PluginsService] loaded module [lang-painless]
2020.06.23 15:03:35 INFO es[][o.e.p.PluginsService] loaded module [mapper-extras]
2020.06.23 15:03:35 INFO es[][o.e.p.PluginsService] loaded module [parent-join]
2020.06.23 15:03:35 INFO es[][o.e.p.PluginsService] loaded module [percolator]
2020.06.23 15:03:35 INFO es[][o.e.p.PluginsService] loaded module [reindex]
2020.06.23 15:03:35 INFO es[][o.e.p.PluginsService] loaded module [repository-url]
2020.06.23 15:03:35 INFO es[][o.e.p.PluginsService] loaded module [transport-netty4]
2020.06.23 15:03:35 INFO es[][o.e.p.PluginsService] no plugins loaded
2020.06.23 15:03:38 WARN es[][o.e.d.c.s.Settings] [http.enabled] setting was deprecated in Elasticsearch and will be removed in a future release! See the breaking changes documentation for the next major version.
2020.06.23 15:03:39 INFO es[][o.e.d.DiscoveryModule] using discovery type [zen] and host providers [settings]
2020.06.23 15:03:40 INFO es[][o.e.n.Node] initialized
2020.06.23 15:03:40 INFO es[][o.e.n.Node] starting ...
2020.06.23 15:03:41 INFO es[][o.e.t.TransportService] publish_address {127.0.0.1:9001}, bound_addresses {127.0.0.1:9001}
2020.06.23 15:03:41 INFO es[][o.e.b.BootstrapChecks] explicitly enforcing bootstrap checks
ERROR: [1] bootstrap checks failed
[1]: max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]
2020.06.23 15:03:42 INFO es[][o.e.n.Node] stopping ...
2020.06.23 15:03:42 INFO es[][o.e.n.Node] stopped
2020.06.23 15:03:42 INFO es[][o.e.n.Node] closing ...
2020.06.23 15:03:42 INFO es[][o.e.n.Node] closed
2020.06.23 15:03:42 WARN app[][o.s.a.p.AbstractManagedProcess] Process exited with exit value [es]: 78
2020.06.23 15:03:42 INFO app[][o.s.a.SchedulerImpl] Process[es] is stopped
2020.06.23 15:03:42 INFO app[][o.s.a.SchedulerImpl] SonarQube is stopped
报错语句:[1]: max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]百度一下,修改文件
[root@localhost ~]# vi /etc/sysctl.conf ====》 修改本地文件的内存大小值(添加,vm.max_map_count = 655360)
[root@localhost ~]# sysctl -p
vm.max_map_count = 655360
[root@localhost ~]# docker ps -a (先查看镜像状态,exited)
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
196b0fcea1c2 sonarqube "bin/run.sh bin/sona…" 6 minutes ago Exited (0) 6 minutes ago sq
0860f8dee674 postgres "docker-entrypoint.s…" 11 minutes ago Up 11 minutes 0.0.0.0:5432->5432/tcp db
42bbe8a61a72 registry.cn-hangzhou.aliyuncs.com/anoy/yapi "node server/app.js" 4 days ago Up 23 hours 0.0.0.0:3000->3000/tcp yapi
e3bbf9397ed5 mongo "docker-entrypoint.s…" 4 days ago Up 23 hours 0.0.0.0:27017->27017/tcp docker_mongodb
[root@localhost ~]# docker start 19 (运行容器)
19
[root@localhost ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
196b0fcea1c2 sonarqube "bin/run.sh bin/sona…" 6 minutes ago Up 3 seconds 0.0.0.0:9000->9000/tcp sq
0860f8dee674 postgres "docker-entrypoint.s…" 11 minutes ago Up 11 minutes 0.0.0.0:5432->5432/tcp db
42bbe8a61a72 registry.cn-hangzhou.aliyuncs.com/anoy/yapi "node server/app.js" 4 days ago Up 23 hours 0.0.0.0:3000->3000/tcp yapi
e3bbf9397ed5 mongo "docker-entrypoint.s…" 4 days ago Up 23 hours 0.0.0.0:27017->27017/tcp docker_mongodb
[root@localhost ~]# docker ps -a (查看容器运行情况)
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
196b0fcea1c2 sonarqube "bin/run.sh bin/sona…" 7 minutes ago Up 19 seconds 0.0.0.0:9000->9000/tcp sq
0860f8dee674 postgres "docker-entrypoint.s…" 11 minutes ago Up 11 minutes 0.0.0.0:5432->5432/tcp db
42bbe8a61a72 registry.cn-hangzhou.aliyuncs.com/anoy/yapi "node server/app.js" 4 days ago Up 23 hours 0.0.0.0:3000->3000/tcp yapi
e3bbf9397ed5 mongo "docker-entrypoint.s…" 4 days ago Up 23 hours 0.0.0.0:27017->27017/tcp docker_mongodb
看到sonarqube和postgres都运行起来了,直接访问本地的9000端口,如图:
==============================MySQL 踩坑=============================
1.拉取镜像
docker pull mysql
2.新建文件夹,为下一步挂载做准备
mkdir -p ~/software/mysql/data(如果不创建也会自动创建)
3.启动MySQL
docker run \
-d \
-p 3306:3306 \
--name mysql_sonar \
-v ~/software/mysql/data:/var/lib/mysql \
-e MYSQL_ROOT_PASSWORD=123456 \
mysql:latest
参数说明:
-d 后台运行
-p 将后面的容器端口映射到前面的本机端口(前面是本机:宿主机,后面是容器)
-name 生成的容器的名字
-v 将容器中的文件挂载到本地(前面是本机:宿主机,后面是容器)
启动mysql,遇到一个问题:
docker: Error response from daemon: driver failed programming external connectivity on endpoint mysql_sonar (96357f403e596b41646897b7c65dd5e776e2d6599f1f3a5a515d7c0ff6d536fa): (iptables failed: iptables --wait -t nat -A DOCKER -p tcp -d 0/0 --dport 3306 -j DNAT --to-destination 172.17.0.4:3306 ! -i docker0: iptables: No chain/target/match by that name.
(exit status 1)).
解决方案:重启docker
systemctl restart docker
docker start mysql_sonar
4. 进入MySQL容器
docker exec -it mysql bash
4.1.登录 MySQL
mysql -u root -p
输入密码:123456
4.2.创建 Sonar 数据库
create database sonar;
4.3.添加远程登录用户:sonar ,并授予权限
CREATE USER 'sonar'@'%' IDENTIFIED WITH mysql_native_password BY 'sonar';
GRANT ALL PRIVILEGES ON *.* TO 'sonar'@'%';
4.4.退出MySQL
exit
5. 退出MySQL容器
exit
Sonar
1.拉去sonarqube镜像
1.新建sonarqube文件夹
mkdir ~/software/sonarqube
2.启动sonarqube
docker run -d --name sonarqube -p 9000:9000 -p 9092:9092 --link=mysql_sonar:mysql_sonar -v ~/software/sonarqube/logs:/opt/sonarqube/logs -v ~/software/sonarqube/conf:/opt/sonarqube/conf -v ~/software/sonarqube/data:/opt/sonarqube/data -v ~/software/sonarqube/extensions:/opt/sonarqube/extensions -e SONARQUBE_JDBC_USERNAME=sonar -e SONARQUBE_JDBC_PASSWORD=sonar -e SONARQUBE_JDBC_URL="jdbc:mysql://192.168.0.189:3306/sonar?useUnicode=true&characterEncoding=utf8&rewriteBatchedStatements=true&useConfigs=maxPerformance&useSSL=false" sonarqube:latest
3.通过docker logs containerID 查看log
第二步报错:Configuration file not found: /opt/sonarqube/conf/sonar.properties
4.去掉挂载试一下
docker run -d --name sonarqube -p 9000:9000 -p 9092:9092 --link=mysql_sonar:mysql_sonar -e SONARQUBE_JDBC_USERNAME=sonar -e SONARQUBE_JDBC_PASSWORD=sonar -e SONARQUBE_JDBC_URL="jdbc:mysql://192.168.0.189:3306/sonar?useUnicode=true&characterEncoding=utf8&rewriteBatchedStatements=true&useConfigs=maxPerformance&useSSL=false" sonarqube:latest
报错:
Exception in thread "main" org.sonar.process.MessageException: Unsupported JDBC driver provider: mysql_sonar
原来2019年4月10号,SonarQube发文称在7.9之后,所有的SonarQube的版本(CE、DE、EE和DCE)中将停止对MySQL的支持
原本想是因为MySQL自己熟悉点,就用MySQL。功课没有备足。