Nacos 封裝與 Docker 部署指南
0 準備工作
核心概念?
命名空間:用于隔離不同環境(如 dev、test、prod)或業務線,默認命名空間為public。?
數據 ID:配置集的唯一標識,命名規則推薦為{服務名}-{profile}.{擴展名}(如user-service-dev.yaml)。?
分組:用于區分同一命名空間下的不同配置集,默認分組為DEFAULT_GROUP。
在pom.xml中添加:
<dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId><version>2.2.7.RELEASE</version> <!-- 與Spring Cloud版本匹配 -->
</dependency>
1.封裝代碼
@SpringBootApplication(scanBasePackages = "com.alibaba.nacos")
@ServletComponentScan
@EnableScheduling
public class SpringNacosApplication {// 建議將這些配置移到application.properties中@Value("${nacos.standalone}")private String standalone;@Value("${nacos.core.auth.enabled}") private String authEnabled;public static void main(String[] args) {SpringApplication.run(JeecgNacosApplication.class, args);}// 添加配置類@Configurationpublic static class NacosConfig {@Beanpublic ConfigurableEnvironment environment(ConfigurableEnvironment env) {Map<String, Object> config = new HashMap<>();config.put("nacos.standalone", standalone);config.put("nacos.core.auth.enabled", authEnabled);config.put("server.tomcat.basedir", "logs");config.put("server.port", "8848");env.getPropertySources().addFirst(new MapPropertySource("nacos-config", config));return env;}}
}
在 application.properties 中添加以下配置:
# Nacos 配置
nacos.standalone=true
nacos.core.auth.enabled=false# 服務器配置
server.port=8848
server.tomcat.basedir=logs
對于生產環境,建議:
- 使用集群模式而非單機模式
- 啟用鑒權功能
- 配置持久化到數據庫
- 設置合適的 JVM 參數
2. 部署前提??
在部署 Nacos 前,需確保環境滿足以下條件:?
- JDK 版本:至少 JDK 1.8(推薦 1.8+),需配置JAVA_HOME環境變量。?
- -MySQL(可選):集群模式需使用 MySQL 存儲配置(推薦 5.7 + 或 8.0),單機模式可使用默認嵌入式數據庫(Derby),但生產環境建議用 MySQL。?
- 端口占用:Nacos 默認使用 3 個端口,需確保未被占用:?
8848:主端口(控制臺與 API 通信);?
9848:客戶端與服務端通信的 gRPC 端口;?
9849:服務端間通信的 gRPC 端口。。?
3 Docker 部署配置
Dockerfile
FROM openjdk:8-jdk-alpine
VOLUME /tmp
ARG JAR_FILE=target/*.jar
COPY ${JAR_FILE} app.jar
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]
4. 端口配置
4.1. 防火墻和安全組配置
確保以下端口在服務器/開發機上開放:
8848 - Nacos 服務端口
9848 - Nacos 集群通信端口(如果是集群模式)
7848 - Nacos 集群選舉端口(如果是集群模式)
4.2 容器化部署端口映射
ports:
- “8848:8848” # 主機端口:容器端口
- “9848:9848” # 集群通信端口
dockers部署 這個很重要
4.3 啟動容器
docker run -d \--name nacos-standalone \-p 8848:8848 \-p 9848:9848 \-p 9849:9849 \-e MODE=standalone \ # 指定單機模式-e JVM_XMS=512m \ # 初始堆內存-e JVM_XMX=512m \ # 最大堆內存nacos/nacos:2.2.3
參數說明:
- -p:映射容器端口到宿主機(必須包含 8848、9849、9848);
- MODE=standalone:強制單機模式(默認集群模式);
- JVM_*:調整 JVM 參數,避免內存占用過高。
通用注意事項:
集群部署時,所有節點需處于同一網絡,確保 9848/9849 端口可互通(gRPC 通信);
啟動前檢查端口占用,避免與其他服務沖突(可通過netstat -tunlp | grep 8848排查)。
5. 微服務連接配置
其他微服務連接 Nacos 時,確保配置正確的地址和端口:
spring:cloud:nacos:discovery:server-addr: 127.0.0.1:8848config:server-addr: 127.0.0.1:8848
6、常見問題與注意事項?
- 啟動失敗:檢查端口是否被占用(netstat -tunlp | grep 8848)、JDK 環境是否正確、數據庫連接是否正常。?
- 集群數據不一致:確保所有節點cluster.conf配置一致,且連接同一 MySQL。?
- 配置不生效:檢查bootstrap.yml中的server-addr、namespace(需用 ID)、dataId命名是否正確。?
- 安全加固:生產環境需開啟 Nacos 認證(application.properties中設置nacos.core.auth.enabled=true),并修改默認用戶名密碼。?
通過以上步驟,可完成 Nacos 的部署與配置管理。Nacos 的高可用設計和動態配置能力,能有效簡化微服務架構中的服務治理與配置維護工作。?