Nacos官网【Nacos官网| Nacos 配置中心 | Nacos 下载| Nacos 官方社区 | Nacos 官网】
下载这个新版本踩坑踩得恶心的要死(吐槽一下😂)(3.2.3稳定版本,生产可用,后续中间件学习使用docker了,适配环境太浪费时间,推荐大家尽量使用docker)
一、Nacos Server(windows版本)
1. 下载windows版本的zip文件夹并解压
下载网址:【发布历史 | Nacos 官网】
① 点击左侧侧边栏的【发布历史】,点击版本这一列的【3.2.3】,即可自动下载zip文件夹

② 解压Nacos安装文件到没有中文和空格目录

2. 修改鉴权模式为【默认 Nacos 鉴权】(非生产自用可以不用设置,直接禁用所有auth权限认证即可)
① 修改鉴权模式
在解压的nacos文件夹**/conf/application.properties** 中,使用Ctrl + F进行查找【nacos.core.auth.system.type】,点击查找下一个,找到我们要变更鉴权配置的地方:

大概位置在207行附近,找到后按照如下配置逐个修改鉴权配置的值并保存:
bash
# ====================== 开启Nacos鉴权【干净无冲突】 ======================
nacos.core.auth.system.type=nacos
nacos.core.auth.enabled=true
nacos.core.auth.admin.enabled=true
nacos.core.auth.console.enabled=true
nacos.core.auth.server.identity.key=nacos
nacos.core.auth.server.identity.value=nacos
nacos.core.auth.plugin.nacos.token.secret.key=MqhVneqzjTyVea6o5zLiRbvFfswKEgVrwro890ULwh0=
nacos.core.auth.caching.enabled=true
nacos.core.auth.plugin.nacos.token.cache.enable=false
nacos.core.auth.plugin.nacos.token.expire.seconds=18000
# =====================================================================
② 编码格式设置为UTF-8

③ 清理 nacos 缓存日志(可选,避免旧配置残留,假如你启动Nacos失败过,可以用一下):
删除 nacos/logs 整个文件夹,然后重新执行启动命令

④鉴权模式对应的Spring Boot的yml配置:(若仅测试Nacos启动,可暂时不添加)
选择【开启鉴权】 ,后续你的 SpringBoot 项目连接 nacos 时 yml 必须加上:⭐
bash
spring:
cloud:
nacos:
discovery:
server-addr: 127.0.0.1:8848
config:
server-addr: 127.0.0.1:8848
# 新增鉴权identity
nacos:
core:
auth:
server:
identity:
key: nacos
value: nacos
⑤ 一些附录说明和供读者参考的内容(不想了解直接跳过)
鉴权配置的参考网址:【权限校验 | Nacos 官网】
由于我们是本地环境独立开发 ,我们选择**【默认 Nacos 鉴权】** ,默认 Nacos 鉴权使用本地用户、角色、权限和 token。
此外,若你想生成自己的Base64密钥,参考如下:
生成Base64密钥:(你也可以跳过此步骤直接使用我生成的密钥,就是个随机码,没啥用)
打开windows的powershell,输入命令并回车
bash
$rng = [System.Security.Cryptography.RandomNumberGenerator]::Create();
$bytes = New-Object byte[] 32;
$rng.GetBytes($bytes);
[System.Convert]::ToBase64String($bytes)

得到Base64编码,放到yml中${custom_base64_token_secret_key}位置替换即可。
最后实际可用的默认Nacos鉴权配置如下:
bash
nacos.core.auth.system.type=nacos # 鉴权类型选择默认Nacos鉴权
nacos.core.auth.enabled=true # 开启鉴权认证
nacos.core.auth.admin.enabled=true # 开启管理员鉴权
nacos.core.auth.console.enabled=true # 开启控制台鉴权
# 鉴权必须填写的三个认证参数
nacos.core.auth.server.identity.key=nacos
nacos.core.auth.server.identity.value=nacos
nacos.core.auth.plugin.nacos.token.secret.key=MqhVneqzjTyVea6o5zLiRbvFfswKEgVrwro890ULwh0=
3. 启动Nacos服务
① 打开解压文件夹的bin目录:

② 在bin目录路径上输入cmd回车
③ 看到cmd命令窗口打开后,输入命令并回车(命令含义为启动【单机模式】)
bash
startup.cmd -m standalone
4. 验证Nacos服务是否启动成功
控制台末尾出现这行日志说明启动nacos服务成功!

5. Nacos控制台页面
打开任意浏览器,输入地址:http://127.0.0.1:8080, 即可进入Nacos控制台页面。
注意:首次打开会要求初始化管理员用户
nacos的密码。

我们用户名和密码均设置为nacos即可,方便记忆。若密码为空,则会生成随机密码,你还得保存,很麻烦!

然后我们就进入了Nacos的控制台页面:

6. 测试Nacos的服务注册与发现
① 测试服务注册
修改nacos/conf/application.properties,写入:(得不到AccessToken,没办法只能把权限给关了。事实上大家以后都可以直接关掉权限,本地用的话。我只是为了生产环境可能要使用权限,提前摸索下。自己开发不必使用权限)
bash
nacos.core.auth.enabled=false
若是怕缓存有影响,delete删除data和log文件夹(nacos运行会重新生成,别害怕)
在cmd窗口输入服务注册请求命令:
bash
curl -X POST "http://127.0.0.1:8848/nacos/v3/client/ns/instance?serviceName=quickstart.test.service&ip=127.0.0.1&port=8080"
可以看到,服务注册成功了!

Nacos控制台【服务列表】中可以看到我们刚刚注册的服务实例:

② 测试服务发现
cmd输入命令:
bash
curl -X GET "http://127.0.0.1:8848/nacos/v3/client/ns/instance/list?serviceName=quickstart.test.service"
可以看到,服务发现测试成功,返回success,data中包含host、port、服务实例名称等:

注意: 服务注册和发现的命令要快点执行,间隔要小,这只是个临时实例,很快就下线了。不然你得重新注册服务实例了!
7. 发布配置
① 登陆获取access token (cmd命令输入)
bash
curl -X POST "http://127.0.0.1:8848/nacos/v3/auth/user/login" -d "username=nacos" -d "password=nacos"
得到token:

② 使用access token,创建配置并发布到Nacos Server
bash
curl -X POST "http://127.0.0.1:8848/nacos/v3/admin/cs/config?dataId=quickstart.test.config&groupName=test&content=HelloWorld&accessToken=你的TOKEN"
可以看到,返回true,成功发布配置到nacos server了:

控制台也显示成功:


8. 拉取配置
cmd输入命令:
bash
curl -X GET "http://127.0.0.1:8848/nacos/v3/client/cs/config?dataId=quickstart.test.config&groupName=test"
可以看到,拉取配置信息成功,包含content内容:

9. 一些疑问
① 我们服务注册发起post请求,访问的是Nacos Server的端口8848,我们注册的服务实例的信息存储到哪里了?服务发现拉取服务实例信息又是从哪里拉取的?
**临时实例:**服务实例信息优先存入 Nacos Server 内存,单机 derby / 集群 mysql 仅存储服务元数据;
**持久实例:**实例信息持久化存入 derby(单机)/mysql(集群),同时在 Nacos Server 内存维护缓存。
服务发现拉取:客户端优先从 Nacos Server 的内存缓存拉取实例列表,同时客户端本地会缓存实例数据。
补充:
Nacos Server 内存: Nacos Server 进程运行时分配在 JVM 堆内的内存区域。
存储服务元数据:服务名、分组、保护阈值、元标签等服务维度基础信息。
持久化存储:服务元数据、持久化类型的实例数据。单机存入 derby 数据库,集群存入 MySQL。
Nacos Server 内存缓存:全量服务实例列表(实例 IP、端口、权重、健康状态、集群信息等实时实例数据)。
② Nacos Server的端口是8848,Nacos Console的端口是8080,二者之间是什么关系?我们Nacos Client访问的是Server,是如何将Nacos Server内的数据传递给Nacos Console的? Nacos Console又将这些从Nacos Server中取到的数据存储在哪里?我们正常一个Nacos Client交互的实际上一直都是Nacos Server吗?Console在Client-Server交互过程中充当什么角色?
- 关系:Nacos Console 是内置在 Nacos Server 里的 Web 模块,8848 为 Nacos Server 核心服务端口,8080 是 Console 前端页面端口,二者同属一个应用进程。
- 数据传递:Nacos Console 通过调用 Nacos Server 自身开放的内部 API 获取数据。
- Console 存储:Console 不额外存储数据,展示的数据直接来源于 Nacos Server 的内存缓存与持久化数据库(derby/MySQL)。
- Client 交互:Nacos Client 交互对象始终是 Nacos Server。
- Console 角色:仅可视化管理面板,不参与 Client 与 Server 之间的服务注册、发现、配置交互流程。
③ Console作为内置在Server中的Web模块,是前端模块的一堆文件吗?另外,Console占用前端端口8080,我们后端自己开发的应用也是8080,二者端口冲突吗?端口冲突的话我们该如何正常启动后端程序同时正常使用Nacos Console呢?
Console 包含前端静态资源与配套后端接口;会端口冲突。
Console和自己的后端应用端口冲突的解决方案:
方案 1:修改 Nacos 配置文件 conf/application.properties,新增nacos.console.port=新端口(如 8081),重启 Nacos,后端应用继续使用 8080。
方案 2:修改后端开发应用的启动端口,不再使用 8080。
方案 3:Nacos 独立部署 Console 模块。
