阿里云轻量级服务器上使用docker-compose部署Nacos3.0.3(单机部署)
环境准备与前提条件
- 提前在服务器上部署docker-compose,如若还未实现,请移步上一篇文章:阿里云轻量级服务器上docker-compose的安装教程-十二月_阿里云服务器 安装docker-compose-CSDN博客
- 阿里云轻量服务器配置要求:2核2G及以上配置
- 操作镜像:Alibaba Cloud Linux3.21.04
- 需开放8848(Nacos注册端口)、8080(Nacos3默认主页端口)、9848(gRPC端口)等防火墙规则
- 后端SpringBoot 3.2.5 + spring-alibaba-nacos-config 2023.0.3.2
- 使用到的软件:IDEA、MobaXterm、浏览器
一、服务器环境准备(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)
4.0.0
org.springframework.boot
spring-boot-starter-parent
3.2.5
com.snowy
nacos-test
0.0.1-SNAPSHOT
nacos-test
nacos-test
17
org.springframework.boot
spring-boot-starter
org.springframework.boot
spring-boot-starter-test
test
com.alibaba.cloud
spring-alibaba-nacos-config
2023.0.3.2
com.alibaba.cloud
spring-cloud-starter-alibaba-nacos-discovery
2023.0.3.2
org.springframework.boot
spring-boot-starter-web
org.springframework.boot
spring-boot-maven-plugin
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);
}
}
最小化服务注册实现
-
依赖配置
确保pom.xml或build.gradle包含Nacos Discovery依赖:com.alibaba.cloud spring-cloud-starter-alibaba-nacos-discovery -
配置文件
application.yml需指定Nacos服务器地址:spring: cloud: nacos: discovery: server-addr: ${NACOS_HOST:127.0.0.1}:8848 -
注解启用
主类需标注@EnableDiscoveryClient,其余配置管理和监听类可移除。
组件作用总结
- 必需组件:主应用类(含注解)、Nacos依赖、配置文件。
- 可选组件:
ConfigController和MyRateConfigService仅用于配置管理演示,不影响服务注册核心流程。删除后仍可正常注册服务到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配置
- 版本升级步骤:修改镜像标签至目标版本,滚动更新容器










