docker 安装 nacos 2.2.x 版本,实现 springboot 项目连接

1. docker-compose.yml

version: "3"
services:

  nacos:
    hostname: nacos                           # 域名
    container_name: nacos                     # 容器名
    image: nacos/nacos-server:v2.2.3          # 镜像版本,高版本目前没研究,一般会报错
    volumes:                                  # 数据卷,这里主要指定了 日志 和 配置文件的同步
      - ./application.properties:/home/nacos/conf/application.properties
      - /opt/docker/nacos/logs/:/home/nacos/logs
    ports:                                    # 端口映射规则:宿主机ip:容器ip
      - 1061:8848                             # 这个是 UI 页面的端口
      - 2061:9848                             # 这个是 客户端访问的端口,需要配置为上一个端口的 + 1000
      - 2062:9849                             # 这个是 服务端访问使用的端口,需要配置为上一个端口 + 1
    environment:
      - PREFER_HOST_MODE=hostname             # 运行模式:主机名,如果使用 ip 不需要此项
      - MODE=standalone                       # 单机运行
      - JVM_XMS=128M                          # 启动时堆内存分配大小
      - JVM_XMX=128M                          # 运行时堆内存分配上限
      - JVM_XMN=64M                           # 新生代的内存大小(建议为上限的 20% - 50%)

这里需要注意数据卷中,第一个文件是覆盖容器内的配置文件,我们可以在这个文件里配置自己想要的配置,具体参考下方

2. application.properties

# WEB 服务器的相关配置
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
server.tomcat.basedir=file:.

# 跳过验证的请求
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/**}

# 启动数据持久化模式
spring.sql.init.platform=mysql
# 数据库的数量
db.num=1
# 数据库连接
db.url.0=jdbc:mysql://mysql:3306/nacos
# 账号
db.user.0=nacos
# 密码
db.password.0=nacos
# 指定了 CMDB 数据的转储任务间隔,单位为秒
nacos.cmdb.dumpTaskInterval=3600
# 指定了 CMDB 事件任务的间隔,单位为秒
nacos.cmdb.eventTaskInterval=10
# 指定了 CMDB 标签任务的间隔,单位为秒
nacos.cmdb.labelTaskInterval=300
# 指定了在启动时是否加载 CMDB 数据的设置
nacos.cmdb.loadDataAtStart=false

# 开启鉴权
nacos.core.auth.enabled=true
# 授权系统,目前仅支持 nacos 或 ldap
nacos.core.auth.system.type=nacos
# 授权系统为 nacos 时的令牌过期时间
nacos.core.auth.plugin.nacos.token.expire.seconds=18000
# 鉴权插件用于生成用户登陆临时 accessToken 所使用的密钥,《随便写大于32个字符》
nacos.core.auth.plugin.nacos.token.secret.key=V1ZWb1YyRkhTblJhUkU1aFZqSjRORmxXWkVka1ZuQXpVRlF3UFE9PQ==
# 服务端的身份标识密钥,《随便写大于32个字符》
nacos.core.auth.server.identity.key=V1ZWb1YyRkhTblJhUkU1aFZqSjRORmxXWkVka1ZuQXpVRlF3UFE9PQ==
# 服务端的身份标识值,《随便写大于32个字符》
nacos.core.auth.server.identity.value=V1ZWb1YyRkhTblJhUkU1aFZqSjRORmxXWkVka1ZuQXpVRlF3UFE9PQ==
# 是否启用身份认证缓存
nacos.core.auth.caching.enabled=false
# 是否启用用户代理(User-Agent)的身份认证白名单机制
nacos.core.auth.enable.userAgentAuthWhite=false

# 禁用将指标导出到 elasticsearch
management.metrics.export.elastic.enabled=false
# 禁用将指标导出到 influxDB
management.metrics.export.influx.enabled=false

# 分发任务的线程数量
nacos.naming.distro.taskDispatchThreadCount=10
# 分发任务的周期,单位为毫秒
nacos.naming.distro.taskDispatchPeriod=200
# 批量同步键的数量
nacos.naming.distro.batchSyncKeyCount=1000
# 节点启动时从其他节点同步数据的比例。如果设置为0.9,则表示节点启动时将尝试从其他节点同步90%的数据
nacos.naming.distro.initDataRatio=0.9dx

该文件笔者是从容器内部拷贝出来,并且做了修改以及没响配置的注释,主要是数据库的配置和鉴权的配置

3. pom.xml

在 springboot 项目中引入对应的客户端版本

<!-- Nacos 客户端 -->
<dependency>
    <groupId>com.alibaba.nacos</groupId>
    <artifactId>nacos-client</artifactId>
    <version>2.2.3</version>
</dependency>

4. bootstrap.yml

配置相关的连接信息

# spring.cloud.nacos.username:                    账号
# spring.cloud.nacos.password:                    密码

# spring.cloud.nacos.discovery.server-addr:       注册中心地址
# spring.cloud.nacos.discovery.namespace:         注册中心命名空间,默认:public
# spring.cloud.nacos.discovery.group:             注册中心分组,默认:DEFAULT_GROUP

# spring.cloud.nacos.config.server-addr:          配置中心地址
# spring.cloud.nacos.config.namespace:            配置中心命名空间,默认:public
# spring.cloud.nacos.config.group:                配置中心分组,默认:DEFAULT_GROUP
# spring.cloud.nacos.config.file-extension:       配置文件后缀名
# spring.cloud.nacos.config.shared-configs:       配置中心的共享配置,主要如通用数据库等
# spring.cloud.nacos.config.extension-configs:    配置中心的扩展配置,常用于特殊处理,覆盖一些专有配置
spring:
  cloud:
    nacos:
      username: nacos
      password: nacos
      discovery:
        server-addr: 192.168.200.101:1061
      config:
        server-addr: ${spring.cloud.nacos.discovery.server-addr}
        file-extension: yml
        shared-configs:
          - data-id: common-config.yml
            refresh: true

5. 常见问题

5.1. 未开启鉴权,客户端连接不上

image-20240327162010214

我们从 2.1 一下的版本升级到 2.2 之后,往往会出现上方的错误

这是因为鉴权配置没配,需要我们奖鉴权配上,主要配置如下

# 开启鉴权
nacos.core.auth.enabled=true
# 授权系统,目前仅支持 nacos 或 ldap
nacos.core.auth.system.type=nacos
# 鉴权插件用于生成用户登陆临时 accessToken 所使用的密钥,《随便写大于32个字符》
nacos.core.auth.plugin.nacos.token.secret.key=V1ZWb1YyRkhTblJhUkU1aFZqSjRORmxXWkVka1ZuQXpVRlF3UFE9PQ==
# 服务端的身份标识密钥,《随便写大于32个字符》
nacos.core.auth.server.identity.key=V1ZWb1YyRkhTblJhUkU1aFZqSjRORmxXWkVka1ZuQXpVRlF3UFE9PQ==
# 服务端的身份标识值,《随便写大于32个字符》
nacos.core.auth.server.identity.value=V1ZWb1YyRkhTblJhUkU1aFZqSjRORmxXWkVka1ZuQXpVRlF3UFE9PQ==

5.2. Server check fail, please check server 9848

springboot 项目在连接 nacos 服务器时,出现上方的错误,端口找不到

这是因为新版的 nacos grpc 连接时默认的端口 是在配置端口的基础上向上偏移1000 的端口,即我们配置了 8848,他会寻找 9848 端口进行连接,如果我们的 docker 没有开放这个端口亦或者防火墙没有开放该端口,程序就会报错

我们可以在容器启动时,放开这个端口,同时服务器防火墙放开这三个端口

ports:                                    # 端口映射规则:宿主机ip:容器ip
  - 1061:8848                             # 这个是 UI 页面的端口
  - 2061:9848                             # 这个是 客户端访问的端口,需要配置为上一个端口的 + 1000
  - 2062:9849                             # 这个是 服务端访问使用的端口,需要配置为上一个端口 + 1
  • 5
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值