nacos 安装和配置以及使用

前置条件

  • 服务器环境:Ubuntu 20.04 64位
  • docker环境:Docker version 19.03.8
  • docker bridge network: dmjy-net
  • mysql 服务:mysql 8.x docker,mysql容器名称:dmjy-mysql,已加入docker bridge network:dmjy-net

一. 安装

1. 下载nacos官方的docker镜像

#pull docker image
docker pull nacos/nacos-server

# 如果只是想简单的体验一下nacos,直接运行启动一个容器就好了
docker run --name dmjy-nacos -d -p 8848:8848 --privileged=true -e MODE=standalone nacos/nacos-server
# 启动完成后访问: http://localhost:8848/nacos ,查看效果,默认用户名和密码都是 nacos

2. 在mysql中创建数据库nacos_devtest

3. 执行数据库初始化脚本创建表

初始化脚本连接:https://github.com/alibaba/nacos/blob/master/distribution/conf/nacos-mysql.sql

4. 启动

模式一. 单机模式启动nacos
docker run --network dmjy-net --name dmjy-nacos -d -p 8848:8848 --privileged=true --restart=always -e MODE=standalone -e PREFER_HOST_MODE=hostname -e JVM_XMS=256m -e JVM_XMX=256m -e SPRING_DATASOURCE_PLATFORM=mysql -e MYSQL_SERVICE_HOST=dmjy-mysql -e MYSQL_SERVICE_PORT=3306 -e MYSQL_SERVICE_DB_NAME=nacos_devtest -e MYSQL_SERVICE_USER=root -e MYSQL_SERVICE_PASSWORD=123456 nacos/nacos-server
  • 参数说明

--network dmjy-net 将容器加入到bridge network网络
MODE=standalone 单机模式运行
JVM_XMS=256m 默认2G,服务器资源有限的话建议调小一点
JVM_XMX=256m 默认2G,服务器资源有限的话建议调小一点
SPRING_DATASOURCE_PLATFORM=mysq 数据库类型
MYSQL_SERVICE_HOST=dmjy-mysql mysql地址,这里因为我的mysql和nacos在同一台宿主服务器上运行,并且已经加入同一个bridge network,所以可以直接通过容器名称访问mysql
MYSQL_SERVICE_PORT=3306 mysql端口
MYSQL_SERVICE_DB_NAME=nacos_devtest 数据库名称
MYSQL_SERVICE_USER=root mysql用户名
MYSQL_SERVICE_PASSWORD=123456 mysql密码

模式二. 集群模式启动
  1. 创建custom.properties
#spring.security.enabled=false
#management.security=false
#security.basic.enabled=false
#nacos.security.ignore.urls=/**
#management.metrics.export.elastic.host=http://localhost:9200
# metrics for prometheus
management.endpoints.web.exposure.include=*

# metrics for elastic search
#management.metrics.export.elastic.enabled=false
#management.metrics.export.elastic.host=http://localhost:9200

# metrics for influx
#management.metrics.export.influx.enabled=false
#management.metrics.export.influx.db=springboot
#management.metrics.export.influx.uri=http://localhost:8086
#management.metrics.export.influx.auto-create-db=true
#management.metrics.export.influx.consistency=one
#management.metrics.export.influx.compressed=true
  1. 创建nacos-hostname.env文件
PREFER_HOST_MODE=hostname
NACOS_SERVERS=nacos1:8848 nacos2:8848 nacos3:8848
MYSQL_SERVICE_HOST=dmjy-mysql
MYSQL_SERVICE_DB_NAME=nacos_devtest
MYSQL_SERVICE_PORT=3306
MYSQL_SERVICE_USER=root
MYSQL_SERVICE_PASSWORD=123456
  1. 创建cluster-logs目录
  2. 创建cluster.yaml文件
version: "3"
services:
  nacos1:
    hostname: nacos1
    container_name: nacos1
    image: nacos/nacos-server:latest
    volumes:
      - ./cluster-logs/nacos1:/home/nacos/logs
      - ./init.d/custom.properties:/home/nacos/init.d/custom.properties
    ports:
      - "8848:8848"
      - "9555:9555"
    env_file:
      - ./env/nacos-hostname.env
    restart: always
    networks:
      - dmjy-net

  nacos2:
    hostname: nacos2
    image: nacos/nacos-server:latest
    container_name: nacos2
    volumes:
      - ./cluster-logs/nacos2:/home/nacos/logs
      - ./init.d/custom.properties:/home/nacos/init.d/custom.properties
    ports:
      - "8849:8848"
    env_file:
      - ./env/nacos-hostname.env
    restart: always
    networks:
      - dmjy-net

  nacos3:
    hostname: nacos3
    image: nacos/nacos-server:latest
    container_name: nacos3
    volumes:
      - ./cluster-logs/nacos3:/home/nacos/logs
      - ./init.d/custom.properties:/home/nacos/init.d/custom.properties
    ports:
      - "8850:8848"
    env_file:
      - ./env/nacos-hostname.env
    restart: always
    networks:
      - dmjy-net
networks:
  dmjy-net:
    external: true

我的目录层级如下,不一定要跟我的保持一致,只是为了说明文件所在路径,如果你的跟我的路径不一样,修改cluster.yaml中相应的挂载目录就好了

/root
--|nacos
----|cluster.yaml
----|init.d
------|custom.properties
----|env
------|nacos.env
----|cluster-logs
  1. 启动容器
docker-compose -f /root/nacos/cluster.yaml up -d

二. 使用

  1. nacos地址:http://localhost:8848/nacos,默认用户名:密码为 nacos:nacos
  2. 修改默认用户名和密码(无法通过浏览器修改,需要手动修改数据库数据)
    2.1. 准备你的新密码:eg: 123456
    2.2. 随便百度一个Bcrypt密码在线生成器,将你的密码使用Bcrypt加密


    Bcrypt在线生成

    2.3. 在数据库中执行修改nacos用户密码的SQL

UPDATE users SET password = '$2a$10$U1b95oATVHFC275ZqSkb9ORO8IlnRz1tCVbCgdzohJnNExGGswM8e' WHERE username = 'nacos';

2.4. 如果还想修改默认的登录用户,接着执行如下SQL

UPDATE users set username = 'myname' WHERE username = 'nacos';
UPDATE roles set username = 'myname' WHERE username = 'nacos';

三. 最佳实践

前置条件:

  • 编程语言:java
  • jdk版本:java8
  • 基础框架:spring cloud alibaba
  1. nacos创建命名空间,我这里创建了两个命名空间,分别代表开发和生产环境。


    namespace
  2. 通常不同环境会使用不同的数据库配置,相同环境的不同项目会使用同一个数据库,只是数据库实例不同,在这里我们新建公共配置文件public-mysql.yaml


spring:
  datasource:
    url: jdbc:mysql://localhost:3306/${spring.application.name}?serverTimezone=Asia/Shanghai&useUnicode=true&characterEncoding=utf-8&useSSL=false&allowMultiQueries=true
    username: root
    password: 123456
    driver-class-name: com.mysql.cj.jdbc.Driver

这里使用了${spring.application.name}作为数据库实例的占位符,默认数据库实例和项目名称一致,当然你也可以自定义你的占位符,这样就不用每个配置文件中都配置相同的数据库连接了。

  1. 工程项目中引入nacos相关的maven依赖,以下只是pom.xml文件的局部

    1.8
    UTF-8
    UTF-8
    2.3.7.RELEASE
    2.2.2.RELEASE
    Hoxton.SR9
    ...


    ...
    
        org.springframework.boot
        spring-boot-starter-web
    
    
        com.alibaba.cloud
        spring-cloud-starter-alibaba-nacos-discovery
    
    
        com.alibaba.cloud
        spring-cloud-starter-alibaba-nacos-config
    
    ...


    
        
            org.springframework.cloud
            spring-cloud-dependencies
            ${spring-cloud.version}
            pom
            import
        
        
            org.springframework.boot
            spring-boot-dependencies
            ${spring-boot.version}
            pom
            import
        
        
            com.alibaba.cloud
            spring-cloud-alibaba-dependencies
            ${spring-cloud-alibaba.version}
            pom
            import
        
    

如果启动或注册nacos失败,注意spring-cloud-alibaba,spring-cloud,spring-boot的版本是否兼容,调整一下它们的版本

  1. boostrap.yml
namespace: 05845da2-88a5-447a-a500-48b0fe353d73
spring:
  application:
    name: dmjy-user
  cloud:
    nacos:
      username: nacos
      password: 123456
      server-addr: localhost:8848
      config: # nacos配置中心配置
        namespace: ${namespace}
        file-extension: yaml
        shared-configs:  # 公共配置文件
          - public-mysql.yaml
          - swagger.yaml
      discovery: # nacos服务注册中心配置
        namespace: ${namespace}

配置说明:

namespace:自定义变量,指定namespaceID,以供spring.cloud.nacos.config.namespacespring.cloud.nacos.discovery.namespace引用,避免重复配置。
spring.cloud.nacos.config.file-extension: 指定nacos配置中心配置文件格式。
spring.cloud.nacos.config.shared-configs: 引入公共配置列表。

nacos配置中心加载配置的规则如下:

规则1:默认加载的Data Id为: ${spring.application.name}.properties,如
spring.application.name=dmjy-user,则对应的配置文件Data Id: dmjy-user.properties
规则2:Data Id的构成由${spring.application.name}-${spring.prifiles.active}.${spring.cloud.nacos.config.file-extension}拼接而来,如果${spring.prifiles.active}未指定,则中间的-也不会出现。
如:spring.application.name=dmjy-userspring.cloud.nacos.config.file-extension=yaml,则加载的是指定namespace下的dmjy-user.yaml配置文件。

tips: 微服务架构下,通常不同环境的服务与服务之间通信隔离,所以建议通过namespace来划分不同的环境。

你可能感兴趣的:(nacos 安装和配置以及使用)