文档说明

  1. 适用架构:SpringCloud Alibaba + Nacos(注册中心 + 配置中心)+ Gateway 网关多微服务(示例:amip-auth、amip-server-system 等)
  2. 核心逻辑:Nacos Namespace 隔离环境,prod 独立命名空间、独立配置集、独立服务分组,本地 / 测试 / 生产环境完全隔离,不污染其他环境配置
  3. 目标:从零搭建一套可上线的 prod 生产环境,包含 Nacos 后台操作、项目配置改造、部署规范

一、前置准备

1. 环境资源清单

资源 说明
Nacos 服务集群 生产独立 Nacos 集群(禁止和 dev/test 共用一套 Nacos),地址:nacos-prod-xxx:8848
生产服务器集群 微服务部署机器、数据库、Redis、MQ、存储中间件(prod 独立实例,不共用测试)
项目代码仓库 Git 主干分支为 prod 稳定分支,禁止合并测试未验证代码
数据库 prod 库 独立库、独立账号、生产级权限

2. 环境规范约定(统一标准,所有微服务遵守)

  1. Namespace 命名规范
    dev:amip-dev(开发)
    test:amip-test(测试)
    prod:amip-prod(生产)
  2. Group 分组规范
    业务微服务统一分组:AMIP_PROD_GROUP(区分测试默认 DEFAULT_GROUP)
  3. DataId 配置文件命名规范
    # 单服务私有配置
    {服务名}-prod.yaml
    示例:amip-auth-prod.yaml、amip-gateway-prod.yaml
  4. 服务名统一:spring.application.name 固定不变,仅通过 namespace/group/env 区分环境

二、第一步:Nacos 后台创建 Prod 隔离环境

2.1 创建生产 Namespace

  1. 登录生产独立 Nacos 控制台(区分测试 Nacos 地址)
  2. 左侧菜单:命名空间 → 新建命名空间
    • 命名空间名称:amip-prod
    • 命名空间 ID:amip-prod(必须手动填写,后续代码配置使用)
    • 描述:生产环境隔离命名空间,所有线上微服务注册、配置存放于此
    • 提交创建,切换命名空间到 amip-prod,后续所有操作均在此命名空间内

2.2 Nacos 配置中心新建 prod 配置集

2.2.1 新建单个微服务私有配置(以 amip-auth 为例)
  1. 配置管理 → 新建配置
    • Data ID:amip-auth-prod.yaml
    • Group:AMIP_PROD_GROUP
    • 格式:YAML
  2. 服务私有配置模板
spring:
  # 模板引擎配置
  freemarker:
    allow-request-override: false
    allow-session-override: false
    check-template-location: true
    expose-request-attributes: false
    expose-session-attributes: false
    expose-spring-macro-helpers: true
    prefer-file-system-access: true
    # 后缀名
    suffix: .ftl
    content-type: text/html
    enabled: true
    # 缓存配置
    cache: true 
    # 模板加载路径 按需配置
    template-loader-path: classpath:/templates/ 
    charset: UTF-8
swagger:
  title: AMIP Swagger API
  version: 2.7.0
  description: 授权中心服务
  license: Powered By Anke
  licenseUrl: https://www.ankepower.com
  terms-of-service-url: https://www.ankepower.com
  contact:
    name: anke
    email: zhuangxh@ankepower.com
    url: https://www.ankepower.com
  authorization:
    name: password
    token-url-list:
      - http://${GATEWAY_HOST:localhost}:${GATEWAY_PORT:88}/auth/oauth/token
# 第三方登录授权配置
oauth2:
  github:
    clientId: amip
    clientSecret: amip
    redirectUri: http://localhost:8000/login/oauth2/github
  1. 同理,所有微服务(gateway、system、file 等)均创建 {服务名}-prod.yaml 私有配置

2.2.2 Nacos 服务管理:确认 Prod 分组(无需提前创建,服务启动自动注册)

  1. 切换命名空间 amip-prod → 服务管理
  2. 后续微服务启动后,会自动注册到分组AMIP_PROD_GROUP,生产环境所有实例仅在此分组展示,和测试环境完全隔离

三、第二步:SpringBoot 项目本地配置改造(bootstrap.yml 核心,对接 Nacos Prod 环境)

3.1 配置文件分层规则

SpringCloud Alibaba 加载优先级:Nacos远程配置 > application.yml
所有环境切换逻辑写在application.yml仅放本地调试默认值,生产不生效

3.2 项目 application.yml 完整模板(支持 dev/test/prod 多环境切换 Nacos)

server:
  port: 18081

spring:
  application:
    # 应用名称
    name: @artifactId@
  profiles:
    # 环境配置
    active: @active@
  cloud:
    nacos:
      username: ${NACOS_USERNAME:}
      password: ${NACOS_PASSWORD:}
      discovery:
        # 服务注册地址
        server-addr: ${NACOS_HOST:127.0.0.1:8848}
        namespace: ${NACOS_NAMESPACE:}
      config:
        # 配置中心地址
        server-addr: ${spring.cloud.nacos.discovery.server-addr}
        # 配置文件格式
        file-extension: yml
        # 命名空间
        namespace: ${NACOS_NAMESPACE:}
        # 配置组
        group: ${NACOS_GROUP:DEFAULT_GROUP}
        # 共享配置
        # shared-configs:
          # - data-id: amip-app-${spring.profiles.active}.${spring.cloud.nacos.config.file-extension}
    # 暂时修复因sentinel导致的无法启动
    # openfeign:
      #lazy-attributes-resolution: true
  config:
    import:
      - optional:classpath:application-${spring.profiles.active}.yml
      - optional:nacos:amip-app-${spring.profiles.active}.${spring.cloud.nacos.config.file-extension}
      - optional:nacos:${spring.application.name}-${spring.profiles.active}.${spring.cloud.nacos.config.file-extension}

3.3 application-prod.yml

切换成prod后

NACOS_HOST: 192.168.1.211:8848
NACOS_USERNAME: nacos
NACOS_PASSWORD: nacos
NACOS_NAMESPACE: amip-prod

3.4 Maven 打包环境区分(pom.xml 配置 env 变量)

在pom.xml增加环境 profile,打包 prod 包时自动绑定环境变量

<profiles>
    <!-- 生产环境profile -->
    <profile>
        <id>prod</id>
        <properties>
            <env>prod</env>
        </properties>
        <activation>
            <activeByDefault>false</activeByDefault>
        </activation>
    </profile>
    <!-- 测试环境 -->
    <profile>
        <id>test</id>
        <properties>
            <env>test</env>
        </properties>
    </profile>
</profiles>

打包生产包命令:
shell

mvn clean package -Pprod -DskipTests
作者:caoyl  创建时间:2026-06-25 14:05
最后编辑:caoyl  更新时间:2026-06-25 15:37