nacos升级到2.0.3(单机模式)

前提:https://github.com/alibaba/spring-cloud-alibaba/wiki/版本说明

Spring Cloud AlibabaSpring CloudSpring BootNacos
2.2.7.RELEASESpring Cloud Hoxton.SR122.3.12.RELEASE2.0.3

spring官网中springcloud,springboot对应关系:https://spring.io/projects/spring-cloud

 

一、pom.xml文件

<parent>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-starter-parent</artifactId>
	<version>2.3.12.RELEASE</version>
	<relativePath/> 
</parent>
	
<properties>
<spring-cloud.version>Hoxton.SR12</spring-cloud.version>
<spring-cloud-alibaba.verion>2.2.7.RELEASE</spring-cloud-alibaba.verion>
<nacos-client.verion>2.0.3</nacos-client.verion>
</properties>	

<!-- Spring Cloud -->
<dependency>
	<groupId>org.springframework.cloud</groupId>
	<artifactId>spring-cloud-dependencies</artifactId>
	<version>${spring-cloud.version}</version>
	<type>pom</type>
	<scope>import</scope>
</dependency>
<!-- Spring Cloud Alibaba -->
<dependency>
	<groupId>com.alibaba.cloud</groupId>
	<artifactId>spring-cloud-alibaba-dependencies</artifactId>
	<version>${spring-cloud-alibaba.verion}</version>
	<type>pom</type>
	<scope>import</scope>
</dependency>

<!-- 服务注册 -->
<dependency>
	<groupId>com.alibaba.cloud</groupId>
	<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
<!-- 配置中心 -->
<dependency>
	<groupId>com.alibaba.cloud</groupId>
	<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>

<!--springboot版本变更2.3.12.RELEASE后@NotBlank注解失效引入-->
<dependency>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-starter-validation</artifactId>
</dependency>

自己记录 method(@Validated TestReq req) 替换 method(@RequestBody TestReq req)

二、下载nacos2.0.3

官方下载地址:https://github.com/alibaba/nacos/releases

windows加速下载地址:https://ghproxy.com/https://github.com//alibaba/nacos/releases/download/2.0.3/nacos-server-2.0.3.zip

linux加速下载地址:https://ghproxy.com/https://github.com//alibaba/nacos/releases/download/2.0.3/nacos-server-2.0.3.tar.gz

 三、下载后解压

1、修改application.properties中数据库配置

cd /lanren312/nacos/conf/
vim application.properties
    
#*************** Config Module Related Configurations ***************#
### If user MySQL as datasource:
spring.datasource.platform=mysql
 
### Count of DB:
db.num=1
 
### Connect URL of DB:
db.url.0=jdbc:mysql://服务器ip:3306/db_nacos?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true
db.user=root
db.password=你的数据库密码

nacos.core.auth.enabled=true  # 开启权限认证,很重要,很重要,很重要

nacos.core.auth.default.token.secret.key=自定义(Base64编码的字符串,且原始密钥长度不得低于32字符)
nacos.core.auth.server.identity.key=自定义(不能使用默认的)
nacos.core.auth.server.identity.value=自定义(不能使用默认的)

 https://nacos.io/zh-cn/docs/v2/guide/user/auth.html

nacos官方文档指出 nacos.core.auth.plugin.nacos.token.secret.key 不能使用默认值,nacos.core.auth.server.identity.key,nacos.core.auth.server.identity.value也一样,都需要修改。

2、修改nacos/bin/startup.cmd  set MODE="standalone" (linux是startup.sh)

3、linux多两个步骤

3.1、在/bin/startup.sh中配置JAVA_HOME

3.2、在安全组、防火墙中开放8848、9848、9849三个端口

 4、项目resource下的bootstrap.properties 文件

 我项目的resource只配置了一个 bootstrap.properties 文件,bootstrap 加载优先于 applicaton(优先级可以自行百度)

spring.profiles.active=prod
spring.application.name=lanren312-order
spring.cloud.nacos.config.group=monkey
spring.cloud.nacos.config.server-addr=http://192.168.0.103:8848   # 服务器ip
spring.cloud.nacos.config.file-extension=yaml

## 这些是2.x版本以上必须加的,不加服务启动就会报错
spring.cloud.nacos.config.username=nacos
spring.cloud.nacos.config.password=nacos  # 默认是nacos,建议把密码改掉
spring.cloud.nacos.discovery.username=nacos
spring.cloud.nacos.discovery.password=nacos # 默认是nacos,建议把密码改掉

1、我是用的默认的namespace,这里可以不写,如果你创建了新的,那么这么就要指定
2、nacos密码是默认的,建议导入sql时将密码改掉,百度搜索--Bcrypt密码生成计算器, https://www.jisuan.mobi/nX7.html
3、dataID格式: ${spring.application.name}-${spring.profiles.active}.${spring.cloud.nacos.config.file-extension}(格式可以自行百度)
我的这个服务的dataId: lanren312-order-prod.yaml
dataID不能有下划线“_” ,得是中划线"-"
配置中“:”后要有空格。accessKey: 5

 5、修改nacos访问路径方法

nacos的conf文件夹下application.properties中默认的context-path为/nacos,浏览器访问路径 http://192.168.0.103:8848/nacos
修改 server.servlet.contextPath=/
在项目的resource下的bootstrap.properties文件增加
spring.cloud.nacos.config.context-path=/
spring.cloud.nacos.discovery.context-path=/ 
浏览器访问路径 http://192.168.0.103:8848

修改 server.servlet.contextPath=/admin
在项目的resource下的bootstrap.properties文件增加
spring.cloud.nacos.config.context-path=/admin
spring.cloud.nacos.discovery.context-path=/admin
浏览器访问路径 http://192.168.0.103:8848/admin

6、 在nacos客户端新建配置

Data ID:lanren312-order-prod.yaml
Group: monkey
配置格式: YAML
配置内容:写之前的不用改,贴一部分关于nacos的配置
spring:
	cloud:
		nacos:
		  discovery:
			server-addr: 192.168.0.103:8848

做完这些,启动服务,就能注册到nacos上。

记录一些api

## 查看到nacos目前已经注册过的账号和加密后的密码
http://localhost:8848/nacos/v1/auth/users?pageNo=1&pageSize=10&username=nacos&password=nacos  
## 查看到dataId配置
http://localhost:8848/nacos/v1/cs/configs?group=monkey&tenant=public&dataId=lanren312-order-prod.yaml&username=nacos&password=nacos
## 查看nacos启动的服务
http://localhost:8848/nacos/v1/ns/upgrade/ops/metrics

四、说说碰到的问题

1、可能需要的pom.xml引用

<!--spring-cloud-dependencies 2020.0.0 默认不在加载bootstrap 配置文件,
如果项目中要用bootstrap 配置文件 需要手动添加spring-cloud-starter-bootstrap 依赖,不然启动项目会报错的。-->
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-bootstrap</artifactId>
    <version>3.0.2</version>
</dependency>	
	
<!--有博客说要排除自带的nacos-client,要重新引入,后面不排除发现也能用-->
<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
    <exclusions>
        <exclusion>
            <groupId>com.alibaba.nacos</groupId>
            <artifactId>nacos-client</artifactId>
        </exclusion>
    </exclusions>
</dependency>
<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
    <exclusions>
        <exclusion>
            <groupId>com.alibaba.nacos</groupId>
            <artifactId>nacos-client</artifactId>
        </exclusion>
    </exclusions>
</dependency>
<dependency>
    <groupId>com.alibaba.nacos</groupId>
    <artifactId>nacos-client</artifactId>
    <version>2.0.3</version>
</dependency>

2、开启权限验证,注册失败

经过检查发现
windows启动 会把配置文件写到 C:\Users\Administrator\nacos 目录下
linux中启动第一行日志就会打印 c.a.n.c.c.impl.LocalConfigInfoProcessor  : LOCAL_SNAPSHOT_PATH:/root/nacos/config
在nacos客户端修改配置后,这里面的文件也会实时更新,说明客户端这边没问题。

启动服务报错 3次get data from Nacos error,有报错 403,unknown user

NacosPropertySourceBuilder     : get data from Nacos error,dataId:lanren312-order
com.alibaba.nacos.api.exception.NacosException: http error, code=403,dataId= lanren312-order,group=monkey,tenant=
......
NacosPropertySourceBuilder     : get data from Nacos error,dataId:lanren312-order.yaml 
com.alibaba.nacos.api.exception.NacosException: http error, code=403,dataId= lanren312-order.yaml ,group=monkey,tenant=
......
NacosPropertySourceBuilder     : get data from Nacos error,dataId:lanren312-order-prod.yaml 
com.alibaba.nacos.api.exception.NacosException: http error, code=403,dataId= lanren312-order-prod.yaml ,group=monkey,tenant=
......
***************************
APPLICATION FAILED TO START
***************************

Description:
Failed to configure a DataSource: 'url' attribute is not specified and no embedded datasource could be configured.
Reason: Failed to determine a suitable driver class

Action:
Consider the following:
	If you want an embedded database (H2, HSQL or Derby), please put it on the classpath.
	If you have database settings to be loaded from a particular profile you may need to activate it (the profiles prod are currently active)

最终还指向了DataSource,可DataSource肯定不可能有错的,上面的3次报错也很可疑,于是去nacos的issues去碰碰运气
和我的问题一样,但没看到解决办法:https://github.com/alibaba/spring-cloud-alibaba/issues/2332

https://github.com/alibaba/spring-cloud-alibaba/issues/3210  里面说要在bootstrap.properties文件中添加 nacos账号密码。添加后启动服务控制台正常,nacos客户端可以看到服务已经注册上去。完美

期间有试过在nacos客户端中 lanren312-order-prod.yaml 里面配置nacos账户密码,启动还是报错,最终是将nacos账户密码配置在bootstrap.properties文件中解决了问题。

完!
   

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值