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文件的局部
<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来划分不同的环境。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,233评论 6 495
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,357评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 159,831评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,313评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,417评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,470评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,482评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,265评论 0 269
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,708评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,997评论 2 328
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,176评论 1 342
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,827评论 4 337
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,503评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,150评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,391评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,034评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,063评论 2 352

推荐阅读更多精彩内容