Skip to content
On this page

基本概念和安装启动

概念

Nacos(官方网站:nacos.io)是一个易于使用的平台,专为动态服务发现、配置和服务管理而设计。它帮助您轻松构建云原生应用程序和微服务平台。

Nacos提供四个主要功能:

  • 服务发现和服务健康检查

  • 动态配置管理

  • 动态 DNS 服务

  • 服务和元数据管理

启动Nacos

TIP

  • 启动nacos有单机模式运行集群模式,今天只使用单机模式

我们使用Docker来搭建Nacos服务,更多配置参考quick-start-docker

服务目录如下:

shell
.
├── .env # 环境变量文件,用于standalone-mysql-8.yaml读取环境变量
├── env
   ├── mysql.env # mysql 环境变量
   └── nacos-standlone-mysql.env # nacos相关环境变量
├── image
   └── mysql8
       └── Dockerfile # 启动nacos依赖的mysql镜像的Dockerfile
└── standalone-mysql-8.yaml # docker-compose 启动文件配置

.env

yaml
NACOS_VERSION=v2.4.0.1

WARNING

  • 如果用的版本比v2.4.0.1低,Mac Apple内核可能报错
shell
no matching manifest for linux/arm64/v8 in the manifest list entries

解决方法如下:

  • 可以在docker-compose.yaml中添加platform: linux/x86_64,(这里我的启动配置是standalone-mysql-8.yaml),参考链接
yaml
  nacos:
    image: nacos/nacos-server:${NACOS_VERSION}
    container_name: NACOS_STANDALONE_MYSQL
    restart: always
    platform: linux/x86_64
yaml
NACOS_VERSION=v2.3.1-slim

env/mysql.env

yaml
MYSQL_ROOT_PASSWORD=root # root用户密码
MYSQL_DATABASE=nacos_devtest # 启动nacos后,创建的数据库名称
MYSQL_USER=nacos # 创建的用户名称
MYSQL_PASSWORD=nacos # 创建的nacos用户密码
LANG=C.UTF-8

env/nacos-standlone-mysql.env

yaml
PREFER_HOST_MODE=hostname # 优先主机模式
MODE=standalone # 当前模式
SPRING_DATASOURCE_PLATFORM=mysql
MYSQL_SERVICE_HOST=mysql
MYSQL_SERVICE_DB_NAME=nacos_devtest # mysql 数据库名称
MYSQL_SERVICE_PORT=3306 # 数据库端口
MYSQL_SERVICE_USER=nacos # 数据库用户名
MYSQL_SERVICE_PASSWORD=nacos # 数据库密码
MYSQL_SERVICE_DB_PARAM=characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useUnicode=true&useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true
NACOS_AUTH_IDENTITY_KEY=2222 # 鉴权用的先忽略
NACOS_AUTH_IDENTITY_VALUE=2xxx # 鉴权用的先忽略
NACOS_AUTH_TOKEN=SecretKey012345678901234567890123456789012345678901234567890123456789 # 鉴权用的先忽略

image/mysql8/Dockerfile

yaml
FROM mysql:latest
# 将 https://raw.githubusercontent.com/alibaba/nacos/develop/distribution/conf/mysql-schema.sql 
# 这个远程文件下载并添加到镜像中的 /docker-entrypoint-initdb.d/ 目录下,并将其命名为 nacos-mysql.sql
ADD https://raw.githubusercontent.com/alibaba/nacos/develop/distribution/conf/mysql-schema.sql /docker-entrypoint-initdb.d/nacos-mysql.sql
# 将 /docker-entrypoint-initdb.d/nacos-mysql.sql 文件的所有者和所属组更改为 mysql 用户和 mysql 组
RUN chown -R mysql:mysql /docker-entrypoint-initdb.d/nacos-mysql.sql
# 对外暴露 3306端口
EXPOSE 3306
# 启动 MySQL 服务器,并设置字符集为 utf8mb4 和排序规则为 utf8mb4_unicode_ci
CMD ["mysqld", "--character-set-server=utf8mb4", "--collation-server=utf8mb4_unicode_ci"]

standalone-mysql-8.yaml

yaml
version: "2.6"
services:
  mysql:
    container_name: MYSQL_NACOS
    restart: always
    build:
      context: .
      dockerfile: ./image/mysql8/Dockerfile
    env_file:
      - ./env/mysql.env
    volumes:
      - ./mysql:/var/lib/mysql
    ports:
      - "1004:3306"
    # 通过命令检查容器是否健康运行
    healthcheck:
      test: [ "CMD", "mysqladmin" ,"ping", "-h", "localhost" ]
      interval: 5s
      timeout: 10s
      retries: 10
  nacos:
    image: nacos/nacos-server:${NACOS_VERSION}
    container_name: NACOS_STANDALONE_MYSQL
    restart: always
    env_file:
      - ./env/nacos-standlone-mysql.env
    volumes:
      - ./standalone-logs/:/home/nacos/logs
    ports:
      - "8848:8848"
      - "9848:9848"
    depends_on:
      mysql:
       condition: service_healthy

启动nacos

shell
docker-compose -f standalone-mysql-8.yaml up -d

然后访问http://localhost:8848/nacos就可以看到主界面

此时可以看到主界面会有一个提示

WARNING

  • 当前集群没有开启鉴权,请参考文档开启鉴权~

开启鉴权

详细内容参考Authentication

修改env/nacos-standlone-mysql.env,修改/添加下面的字段

yaml
# 其他字段
# xxx
NACOS_AUTH_ENABLE=true
NACOS_AUTH_IDENTITY_KEY=ZjcqSyNiIStfIjpNTEQ4OXkyM2tqYmtqQVMoKl5ZQCNSSktCTkNVKldUKiYjXkhUUEdJTm91NDUzeTUz
NACOS_AUTH_IDENTITY_VALUE=Zmprc2IwJiomIyVCSkJGSSZXVDNia2p0MjNpdTU2dHlzamtkYmdoZWdyM3QzNHQzNA==
NACOS_AUTH_TOKEN=OSgsazJIODlVODJhLXozMzM1aGpzMSpeJisyYlZIX0A4ODIxQkZLREYtKSMqJQ==

WARNING

  • NACOS_AUTH_IDENTITY_KEYNACOS_AUTH_IDENTITY_VALUENACOS_AUTH_TOKEN要使用Base64编码的字符串,字符串长度最少32位c

然后重启docker服务

shell
docker-compose -f xxx.yml down
docker-compose -f xxx.yml up -d

然后清空http://localhost:8848/nacos页面的localStorage的值,刷新页面,会出现登录界面

默认:用户名:nacos,密码:nacos

登录成功就可以啦