环境准备与前提条件

一、服务器环境准备(JDK17)(非必须)

PS:Nacos 的 Docker 镜像在构建时,已经封装了其运行所需的 Java 环境。只需要直接使用镜像即可,无需在宿主机或容器内额外安装 JDK,此处JDK的安装可以跳过。

1.选择存档

2.找到17及以前的版本(本次使用17.0.1,Nacos3.x需JDK17支持)

3.复制该段地址,打开MobaXterm,连接服务器,使用命令新建一个目录并进入
 

mkdir /home/JDK
cd /home/JDK

然后使用该命令下载:

wget https://download.oracle.com/java/17/archive/jdk-17.0.1_linux-x64_bin.tar.gz

​wget https://download.oracle.com/java/17/archive/jdk-17.0.1_linux-x64_bin.tar.gz

4.下载完毕后进行解压并移动

tar zxvf jdk-17.0.1_linux-x64_bin.tar.gz
mv jdk-17.0.1 /usr/local/

5.最后一步配置系统变量

(1)使用文本编辑器打开当前用户主目录下的.bashrc文件。

vim ~/.bashrc

(2)在.bashrc文件的末尾添加以下内容,并wq保持

(3)保存并关闭.bashrc文件后,在终端中执行以下命令,使刚刚添加的配置立即在当前会话中生效:

source ~/.bashrc

完毕后不需要重启服务器,在控制台输入 java --version有输出信息即成功

二、Nacos的正式部署,编写docker-compose.yml文件

  • 示例配置包含Nacos 3.0.3镜像、MySQL 8.0作为持久化存储
  • 关键参数说明:MODE=standalone(单机模式)、JVM_XMS堆内存设置(重要!实测如果不对内存配置,很大可能导致服务器卡顿!)
version: "3.2"

services:

  icms:
    image: mysql:8.0
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD : #(你的密码)
    volumes:
      - "$PWD/school/data:/var/lib/mysql"
      - "$PWD/school/conf:/etc/mysql/conf.d"
    ports:
      - "3306:3306"
      
  nacos:
    image: nacos/nacos-server:v3.0.3
    container_name: nacos
    environment:
      - MODE=standalone
       #下面这仨可以自己设置
      - NACOS_AUTH_TOKEN=bv2Rqyxb+xBRAuq1uL/TkXDZyBLNTJXokn44rT7fsik=
      - NACOS_AUTH_IDENTITY_KEY=bmFjb3NfaWRlbnRpdHlfa2V5XzE3NTYxNzQyODE=
      - NACOS_AUTH_IDENTITY_VALUE=bmFjb3NfaWRlbnRpdHlfdmFsdWVfMTc1NjE3NDI4OA==
       #上面这仨可以自己设置
      - JVM_XMS=512m     
      - JVM_XMX=1024m    
      - JVM_XMN=256m     
      - JVM_MS=64m      
      - JVM_MMS=128m     
    ports:
      - "8848:8848"
      - "9848:9848"
      - "8080:8080"
    volumes:
      - ./data/:/home/docker/nacos/data
    restart: always

保存后,使用命令启动:

docker-compose up -d

使用命令查看容器情况:

docker ps

出现下面框框中的两项即说明服务启动成功

此时我们回到自己的电脑上,在浏览器输入:http://(你的服务器公网ip):8080/(注意在3.x版本中默认的管理面板端口为8080且后面的路径不需要加/nacos)

即可进入Nacos控制面板(左上角有当前版本号和部署模式)

三、后端服务注册

1.新建SpringBoot项目,选择版本3.2.5(实测3.5.5会出现兼容问题)

2.Maven构建项目(web、springboot、spring-alibaba-nacos-config、spring-cloud-starter-alibaba-nacos-discovery)
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>3.2.5</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.snowy</groupId>
    <artifactId>nacos-test</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>nacos-test</name>
    <description>nacos-test</description>
    <url/>
    <licenses>
        <license/>
    </licenses>
    <developers>
        <developer/>
    </developers>
    <scm>
        <connection/>
        <developerConnection/>
        <tag/>
        <url/>
    </scm>
    <properties>
        <java.version>17</java.version>
    </properties>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>

        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-alibaba-nacos-config</artifactId>
            <version>2023.0.3.2</version>
        </dependency>
        
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
            <version>2023.0.3.2</version>
        </dependency>
        
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

</project>
spring-cloud-starter-alibaba-nacos-discovery的版本号必须与SpringBoot的版本相匹配。
3.编辑配置文件application.yml

注意注册服务的端口必须为8848

server:
  port: 9080
spring:
  application:
    name: nacostest
  config:
    import:
      - "nacos:springboot3x:properties?group=DEFAULT_GROUP"
  cloud:
    nacos:
      discovery:
        server-addr: (公网ip):8848/
        fail-fast: false
        watch-delay: 30000

# 为plainKey提供默认值
plainKey: "defaultPlainKeyValue"
4.各个类的编写
主应用类 NacosTestApplication

@SpringBootApplication标记该类为Spring Boot应用的启动入口,整合了@Configuration@EnableAutoConfiguration@ComponentScan的功能。@EnableDiscoveryClient启用服务注册与发现功能,使应用能作为客户端注册到Nacos服务器。

package com.snowy.nacostest;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;

@SpringBootApplication
@EnableDiscoveryClient
public class NacosTestApplication {

    public static void main(String[] args) {
        SpringApplication.run(NacosTestApplication.class, args);
    }

}
ConfigController 控制器类

通过@RestController定义RESTful接口,演示Nacos配置管理功能。@Value注解从Nacos拉取配置值,@NacosConfigListener实现配置动态监听。接口/testPlainKey返回静态配置,/rate返回动态监听的配置值。该组件非服务注册核心逻辑,仅用于功能演示。

package com.snowy.nacostest.config;

import com.alibaba.cloud.nacos.annotation.NacosConfig;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class ConfigController {

    @Value("${plainKey:defaultPlainKeyValue}")
    String testKey;

    @NacosConfig(dataId = "routeconfig", group = "config", key = "rate")
    String rate;

    @RequestMapping("/testPlainKey")
    public String test() {
        return testKey;
    }

    @RequestMapping("/rate")
    public String rate() {
        return rate;
    }

}
MyRateConfigService 服务类

利用@NacosConfigListener监听指定配置ID(如rate.config)的变化,实时响应配置更新。当Nacos中配置被修改时,rate()方法自动触发并打印新值。此组件同样为配置管理演示模块,非服务注册必要部分。

package com.snowy.nacostest.service;

import com.alibaba.cloud.nacos.annotation.NacosConfigListener;
import org.springframework.stereotype.Service;

@Service
public class MyRateConfigService {

    @NacosConfigListener(dataId = "routeconfig",group = "config")
    public void rate(String rateConfig) {
        System.out.println("receiveRateConfig:"+rateConfig);
    }

}
最小化服务注册实现
  1. 依赖配置
    确保pom.xmlbuild.gradle包含Nacos Discovery依赖:

    <dependency>
        <groupId>com.alibaba.cloud</groupId>
        <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
    </dependency>
    
  2. 配置文件
    application.yml需指定Nacos服务器地址:

    spring:
      cloud:
        nacos:
          discovery:
            server-addr: ${NACOS_HOST:127.0.0.1}:8848
    
  3. 注解启用
    主类需标注@EnableDiscoveryClient,其余配置管理和监听类可移除。

组件作用总结
  • 必需组件:主应用类(含注解)、Nacos依赖、配置文件。
  • 可选组件ConfigControllerMyRateConfigService仅用于配置管理演示,不影响服务注册核心流程。删除后仍可正常注册服务到Nacos。

四、启动与验证服务

  • 启动后端服务,端口9080
  • 访问http://服务器IP:8848/nacos,默认账号密码为nacos/nacos,查看服务列表

发现服务已成功注册到Nacos

五、常见问题与调优

  • Nacos启动失败排查:容器日志分析(docker logs nacos或者docker logs {id})、端口冲突检查(netstat -tuln | grep 8080或者8848)

六、安全加固

  • 修改默认账号密码,启用Nacos鉴权功能
  • 通过阿里云安全组限制8848端口仅允许内网或特定IP访问

七、备份与升级

  • 定期备份MySQL数据与Nacos配置
  • 版本升级步骤:修改镜像标签至目标版本,滚动更新容器
Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐