前言

认识 Nacos 是从了解 Spring Cloud 微服务框架开始的,项目使用了若依的微服务版本,配置文件名称不是 application.yml 而变成了 bootstrap[-dev].yml。dev 分支代码设置了 dev 配置文件,dev 配置文件中也只写了 nacos 的 configdiscovery 配置,分别给出了 server-addr 服务地址,然后就什么都没有了。

当时觉得很神奇,竟然可以把配置项统一放到一个三方服务里管理。登录到 Nacos 提供的用户界面里,发现 Nacos 不止可以管理配置,还可以管理服务。系统中的应用都以注册服务的形式在这边显示。

Spring Cloud 微服务框架中官方推荐的是 netflix 的 Eureka 服务器,作为注册中心使用。Nacos 是阿里贡献出来的开源项目,对标的大概就是 Eureka 服务器。

Nacos Docker 安装

之前网上找了一个 Nacos Docker 的安装指令,但在关闭容器之后再启动就会报错。接着找到了 Nacos Docker 的官方安装教程,测试 单机模式 Derby 是 OK 的。教程先下载 docker-compose 安装脚本,然后按照多种选项安装。Derby 百度了一下是一个内置的数据库,与 mysql 版本对应,默认用 Derby 就够了。单机模式对应集群,单机模式也够用。

安装镜像并启动容器之后,就可以通过链接访问 Nacos 提供的默认的用户界面了:http://127.0.0.1:8848/nacos/

Nacos 直接安装的版本可以看到,Nacos 需要 Java 环境来运行,默认的配置文件名为 application.properties,所以 Nacos 就是一个 Java 应用服务,访问链接中的 nacos/就是配置文件中设置的项目访问路径。

Nacos 开启鉴权

默认安装的 Nacos 是没有鉴权的,即访问直接进入到管理页面,没有登录的环节。Nacos 鉴权里提到了,只需要启动 docker 容器时配置一个参数即可开启鉴权。

NACOS_AUTH_ENABLE=true

文档里先创建运行 nacos/nacos-server,再调用 docker-compose 构建命令。这里可以直接修改构建的脚本 example/standalone-derby.yaml

version: "2"
services:
  nacos:
    image: nacos/nacos-server:${NACOS_VERSION}
    container_name: nacos-standalone
    environment:
      - PREFER_HOST_MODE=hostname
      - MODE=standalone
      - NACOS_AUTH_ENABLE=true
      - NACOS_AUTH_IDENTITY_KEY=serverIdentity
      - NACOS_AUTH_IDENTITY_VALUE=security
      - NACOS_AUTH_TOKEN=SecretKey012345678901234567890123456789012345678901234567890123456789
...

在 enviroment 环境变量中添加一项 - NACOS_AUTH_ENABLE=true。然后删除容器,重新启动。

开启之后,再次访问会跳转到登录页面,页面上有 内部系统,不可暴露到公网 红色字体提醒。因为这是 Nacos 简单鉴权,想要更安全的方式访问,需要开发 Nacos 鉴权插件。简单的鉴权登录账号密码为 nacos。此时项目如果想要访问,需要添加 usernamepassword 参数,否则启动会报错:User not found

有的博主提到 NACOS_AUTH_IDENTITY_KEYNACOS_AUTH_IDENTITY_VALUE 是设置登录账号、密码,但测试发现账号密码还是 nacos

修改 nacos 账号密码

网上提到了几种修改账号密码的方式,最方便的就是通过用户界面右上角的修改密码进行修改,当然只能修改密码,无法修改用户名。

另一种是通过 Nacos 的数据库来修改。所以这时需要 mysql 类型的方便访问。用户名是直接存的,密码需要 System.out.println(new BCryptPasswordEncoder().encode("password")); 加密。

为什么安装的是 Nacos 2.3.1,而不是最新版本的 2.3.2

访问 Nacos Docker github 库 发现,docker compose 安装的 Nacos 最新的脚本为 2.3.2(与 Nacos 版本一致),但本地安装的却是 2.3.1

上面的 Derby 安装脚本可以看到,Nacos 镜像版本为 nacos/nacos-server:${NACOS_VERSION}。找了一圈其他的配置文件,没有找到 ${NACOS_VERSION} 变量。后面使用 IDE 打开整个脚本项目,全项目搜索,终于找到了 example/.envNACOS_VERSION=v2.3.1