美文网首页
nacos 安装和配置以及使用

nacos 安装和配置以及使用

作者: DimonHo | 来源:发表于2021-03-24 10:10 被阅读0次

    前置条件

    • 服务器环境: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文件的局部
    <properties>
        <java.version>1.8</java.version>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
        <spring-boot.version>2.3.7.RELEASE</spring-boot.version>
        <spring-cloud-alibaba.version>2.2.2.RELEASE</spring-cloud-alibaba.version>
        <spring-cloud.version>Hoxton.SR9</spring-cloud.version>
        ...
    </properties>
    <dependencies>
        ...
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </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>
        ...
    </dependencies>
    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>${spring-cloud.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-dependencies</artifactId>
                <version>${spring-boot.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
            <dependency>
                <groupId>com.alibaba.cloud</groupId>
                <artifactId>spring-cloud-alibaba-dependencies</artifactId>
                <version>${spring-cloud-alibaba.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>
    

    如果启动或注册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 安装和配置以及使用

          本文链接:https://www.haomeiwen.com/subject/spwfhltx.html