Linux+Docker部署单机Nacos实操——资源服务配置上云

339 阅读3分钟

一、背景与目标

在微服务架构中,Nacos 不仅可作为服务注册中心,还能作为动态配置中心。本文将通过以下步骤实现:

  1. 在Linux上部署单机版Nacos(使用Docker)
  2. 将服务A和服务B注册到Nacos
  3. 利用Nacos配置中心管理多环境配置(dev/prod分组)
  4. 本地服务连接Nacos配置中心的配置方法

二、部署Nacos单机服务(Linux+Docker)

1. 安装Docker(如已安装可跳过)
# 卸载旧版本(可选)
sudo yum remove docker docker-client docker-client-latest docker-common docker-latest docker-latest-logrotate docker-logrotate docker-engine

# 安装依赖
sudo yum install -y yum-utils device-mapper-persistent-data lvm2

# 添加Docker仓库
sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo

# 安装Docker引擎
sudo yum install docker-ce docker-ce-cli containerd.io

# 启动Docker
sudo systemctl start docker
sudo systemctl enable docker
2. 使用Docker部署Nacos
# 创建Nacos数据目录(持久化配置)
mkdir -p /opt/nacos/{logs,conf,data}

# 拉取Nacos镜像(以2.0.3版本为例)
docker pull nacos/nacos-server:v2.0.3

# 启动Nacos容器(单机模式)
docker run -d \
--name nacos-server \
-p 8848:8848 \
--restart=always \
-e MODE=standalone \
-v /opt/nacos/logs:/home/nacos/logs \
-v /opt/nacos/conf:/home/nacos/conf \
-v /opt/nacos/data:/home/nacos/data \
nacos/nacos-server:v2.0.3

关键参数解释

  • -e MODE=standalone:单机模式(生产建议集群)
  • -v挂载目录:持久化日志、配置、数据
  • 访问控制台:http://服务器IP:8848/nacos(默认账号:nacos/nacos)

三、SpringCloud服务注册与配置中心接入

1. 项目依赖配置(pom.xml)
<!-- SpringCloud Alibaba 版本管理 -->
<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-alibaba-dependencies</artifactId>
            <version>2021.0.5.0</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
    </dependencies>
</dependencyManagement>

<!-- Nacos服务发现 + 配置中心 -->
<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>
2. 本地配置文件(bootstrap.yml)
spring:
  application:
    name: service-a  # 服务名(对应Nacos Data ID)
  profiles:
    active: dev      # 环境标识(dev/prod)
  cloud:
    nacos:
      discovery:
        server-addr: 192.168.1.100:8848  # Nacos地址
        namespace: 9a3a8d7b-xxxx-xxxx-xxxx-xxxxxxxx  # 命名空间ID(可选)
        group: DEV_GROUP                 # 服务分组(默认DEFAULT_GROUP)
      config:
        server-addr: ${spring.cloud.nacos.discovery.server-addr}
        namespace: ${spring.cloud.nacos.discovery.namespace}
        group: ${spring.cloud.nacos.discovery.group}
        file-extension: yaml             # 配置文件格式
        refresh-enabled: true            # 开启动态刷新
3. Nacos控制台配置管理
  1. 创建命名空间(如dev/prod)

    • 命名空间ID建议用UUID(如dev-namespace
  2. 添加配置文件

    • Data ID: service-a-dev.yaml(格式:${spring.application.name}-${profile}.${file-extension}
    • Group: DEV_GROUP
    • 内容示例:
      # 自定义配置(如数据库连接)
      db:
        url: jdbc:mysql://localhost:3306/dev_db
        username: dev_user
      

四、Nacos配置中心高级功能

1. 配置分组(Group)
  • 用途:区分不同环境/业务线的配置
  • 操作:在同一个命名空间下,通过Group隔离配置(如DEV_GROUPPROD_GROUP
2. 动态配置刷新
  • 实现:在代码中使用@RefreshScope注解
    @RestController
    @RefreshScope
    public class ConfigController {
        @Value("${db.url}")
        private String dbUrl;
    }
    
3. 多文件配置
  • 场景:拆分公共配置与业务配置
  • Data ID命名规则
    • 共享配置:shared-config.yaml(所有服务读取)
    • 服务专属:service-a-dev.yaml

五、验证与调试

  1. 服务注册验证
    访问http://nacos-ip:8848/nacos,在“服务管理”中查看服务A/B的注册状态。

  2. 配置拉取验证
    在服务启动日志中搜索: Loaded config data from nacos, dataId: service-a-dev.yaml

  3. 动态刷新测试
    修改Nacos中的配置,观察服务日志是否输出: Refresh keys changed: [db.url]


六、注意事项

  1. 生产环境建议
    • 使用Nacos集群部署
    • 开启Nacos鉴权(配置nacos.core.auth.enabled=true
    • 配置MySQL持久化(替换内嵌Derby)
  2. 版本兼容性
    确保SpringCloud Alibaba与SpringBoot版本匹配(官方版本说明)。