背景
国产化的推行,项目开始使用达梦数据库,使用Nacos作为配置中心,需要对数据进行持久化存储。此处使用docker-compose部署nacos。
参考文章
Nacos适配达梦数据库(不修改源码),基于Docker-compose_nacos 达梦数据库
实现步骤
第一步:部署一个没有使用外部数据源的nacos
此处部署的是 nacos 2.3.2版本,docker-compose配置文件内容如下,运行启动后默认账号密码都是nacos
version: "3"
services:
nacos:
image: nacos/nacos-server:v2.3.2-slim
container_name: nacos
environment:
- PREFER_HOST_MODE=hostname
- MODE=standalone
- NACOS_AUTH_ENABLE=true
- NACOS_AUTH_IDENTITY_KEY=serverIdentity
- NACOS_AUTH_IDENTITY_VALUE=security
- NACOS_AUTH_TOKEN=ZDFhMTUyMDItYjAyZi00ZTM3LTkzYzctNmQxNTIyOTUyNzQ1
volumes:
- ./standalone-logs/:/home/nacos/logs
ports:
- 8848:8848
- 9848:9848
部署完成之后,使用
docker exec -it nacos /bin/bash
命令进入到容器中,执行ll
可以看到当前目录下的文件信息如下图
进入conf
目录下可以看到nacos
启动的配置文件: application.properties
第二步:拷贝出nacos启动的配置文件进行修改
确定容器中application.properties
配置文件的路径之后,退出容器,使用docker cp
命令将文件从容器中拷贝出来:
docker cp nacos:/home/nacos/conf/application.properties ./conf/application.properties
使用vim编辑器打开application.properties
进行修改,修改后的文件内容如下:
# spring
server.servlet.contextPath=${SERVER_SERVLET_CONTEXTPATH:/nacos}
server.contextPath=/nacos
server.port=${NACOS_APPLICATION_PORT:8848}
server.tomcat.accesslog.max-days=30
server.tomcat.accesslog.pattern=%h %l %u %t "%r" %s %b %D %{User-Agent}i %{Request-Source}i
server.tomcat.accesslog.enabled=${TOMCAT_ACCESSLOG_ENABLED:false}
server.error.include-message=ALWAYS
# default current work dir
server.tomcat.basedir=file:.
#*************** Config Module Related Configurations ***************#
### Deprecated configuration property, it is recommended to use `spring.sql.init.platform` replaced.
#spring.datasource.platform=${SPRING_DATASOURCE_PLATFORM:}
#spring.sql.init.platform=${SPRING_DATASOURCE_PLATFORM:}
spring.sql.init.platform=mysql
nacos.cmdb.dumpTaskInterval=3600
nacos.cmdb.eventTaskInterval=10
nacos.cmdb.labelTaskInterval=300
nacos.cmdb.loadDataAtStart=false
#db.num=${MYSQL_DATABASE_NUM:1}
#db.url.0=jdbc:mysql://${MYSQL_SERVICE_HOST}:${MYSQL_SERVICE_PORT:3306}/${MYSQL_SERVICE_DB_NAME}?${MYSQL_SERVICE_DB_PARAM:characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useSSL=false}
#db.user.0=${MYSQL_SERVICE_USER}
#db.password.0=${MYSQL_SERVICE_PASSWORD}
db.num=1
db.url.0=jdbc:dm://192.168.20.222:5237?schema=NACOS&characterEncoding=UTF-8&useUnicode=true&serverTimezone=Asia/Shanghai
db.user.0=NACOS
db.password.0=wydm@nacos
## DB connection pool settings
db.pool.config.connectionTimeout=${DB_POOL_CONNECTION_TIMEOUT:30000}
db.pool.config.validationTimeout=10000
db.pool.config.maximumPoolSize=20
db.pool.config.minimumIdle=2
db.pool.config.driver-class-name=dm.jdbc.driver.DmDriver
### The auth system to use, currently only 'nacos' and 'ldap' is supported:
nacos.core.auth.system.type=${NACOS_AUTH_SYSTEM_TYPE:nacos}
### worked when nacos.core.auth.system.type=nacos
### The token expiration in seconds:
nacos.core.auth.plugin.nacos.token.expire.seconds=${NACOS_AUTH_TOKEN_EXPIRE_SECONDS:18000}
### The default token:
nacos.core.auth.plugin.nacos.token.secret.key=${NACOS_AUTH_TOKEN:}
### Turn on/off caching of auth information. By turning on this switch, the update of auth information would have a 15 seconds delay.
nacos.core.auth.caching.enabled=${NACOS_AUTH_CACHE_ENABLE:false}
nacos.core.auth.enable.userAgentAuthWhite=${NACOS_AUTH_USER_AGENT_AUTH_WHITE_ENABLE:false}
nacos.core.auth.server.identity.key=${NACOS_AUTH_IDENTITY_KEY:}
nacos.core.auth.server.identity.value=${NACOS_AUTH_IDENTITY_VALUE:}
## spring security config
### turn off security
nacos.security.ignore.urls=${NACOS_SECURITY_IGNORE_URLS:/,/error,/**/*.css,/**/*.js,/**/*.html,/**/*.map,/**/*.svg,/**/*.png,/**/*.ico,/console-fe/public/**,/v1/auth/**,/v1/console/health/**,/actuator/**,/v1/console/server/**}
# metrics for elastic search
management.metrics.export.elastic.enabled=false
management.metrics.export.influx.enabled=false
nacos.naming.distro.taskDispatchThreadCount=10
nacos.naming.distro.taskDispatchPeriod=200
nacos.naming.distro.batchSyncKeyCount=1000
nacos.naming.distro.initDataRatio=0.9
nacos.naming.distro.syncRetryDelay=5000
nacos.naming.data.warmup=true
nacos.console.ui.enabled=true
nacos.core.param.check.enabled=true
主要修改了这部分:
注意:
虽然我们配置的是达梦的数据库连接信息,但是数据源平台配置成了mysql,为啥呢,因为官方文档里面说的配置成dm并不生效,会提示找不到数据源dm。以下图片来源于参考文章的第二篇(nacos官方)。
第三步:将达梦数据库驱动程序映射进入docker
在docker-compose.yaml
同级目录下创建一个plugins
目录,把达梦数据库的驱动程序放入这个目录下,然后修改docker-compose.yaml
文件, 把修改后的application.properties
文件和达梦数据库的驱动映射到容器中。最终修改后的docker-compose.yaml
文件内容如下:
version: "3"
services:
nacos:
image: nacos/nacos-server:v2.3.2-slim
container_name: nacos
environment:
- PREFER_HOST_MODE=hostname
- MODE=standalone
- NACOS_AUTH_ENABLE=true
- NACOS_AUTH_IDENTITY_KEY=serverIdentity
- NACOS_AUTH_IDENTITY_VALUE=security
- NACOS_AUTH_TOKEN=ZDFhMTUyMDItYjAyZi00ZTM3LTkzYzctNmQxNTIyOTUyNzQ1
volumes:
- ./standalone-logs/:/home/nacos/logs
- ./conf/application.properties:/home/nacos/conf/application.properties
- ./plugins/:/home/nacos/plugins/
ports:
- 8848:8848
- 9848:9848
docker-compose.yaml
文件所在目录结构如下图所示:
第四步:启动容器,验证
启动容器,访问页面,随便创建几个用户,看数据库里用户表有没有变化,有则配置成功。
总结
三步走:
- 修改application.properties配置文件;
- 映射驱动;
- 启动验证。
过程中的难点在于配置application.properties
的时候有个坑,就是官方文档写的dm不生效,改成了mysql解决。
做好数据备份,一般的项目问题不大
Nacos项目挺不错的 ps:除非自己选择的数据库足够稳定、安全 否则不太建议使用它来存储重要的东西哦