diff --git a/.gitea/workflows/ci.yml b/.gitea/workflows/ci.yml index 90b1eef..d244d4f 100644 --- a/.gitea/workflows/ci.yml +++ b/.gitea/workflows/ci.yml @@ -105,11 +105,13 @@ jobs: RB=userbase-service:rb-$(date +%s) docker tag userbase-service:latest "$RB" 2>/dev/null || true docker stop userbase-service 2>/dev/null; docker rm -f userbase-service 2>/dev/null - # 注意(SCA 2.2.4 坑): 命名空间必须用标准属性名 SPRING_CLOUD_NACOS_CONFIG_NAMESPACE, - # 用 NACOS_NAMESPACE 这个 env 名不会被 bootstrap 的 ${NACOS_NAMESPACE:dev} 解析到(会落 public); - # 凭据必须放顶层 SPRING_CLOUD_NACOS_USERNAME/PASSWORD, 放在 spring.cloud.nacos.config.* 下不生效(403)。 + # bootstrap.yml 默认 nacos.config.enabled=false(本地不连);CI 必须注入 NACOS_CONFIG_ENABLED=true 才会拉配置 + # SPRING_PROFILES_ACTIVE=prod 激活生产 profile(留给将来拆 application-prod.yml 用) + # namespace/凭据仍用顶层 SPRING_CLOUD_NACOS_* env(bootstrap 的 ${...} 占位符才能解析到) docker run -d --name userbase-service --restart unless-stopped --network infra-infra-net -p 8060:8060 \ --add-host sso.yunhaixingtong.com:192.168.10.160 \ + -e SPRING_PROFILES_ACTIVE=prod \ + -e NACOS_CONFIG_ENABLED=true \ -e NACOS_ADDR=nacos:8848 \ -e SPRING_CLOUD_NACOS_CONFIG_NAMESPACE=6196f0de-a28d-4894-8f10-e2982b57c6bc \ -e SPRING_CLOUD_NACOS_USERNAME=yh-reader \ @@ -125,7 +127,16 @@ jobs: if [ "$OK" = "0" ]; then echo "!! UNHEALTHY -> rollback to userbase-service:latest" docker stop userbase-service 2>/dev/null; docker rm -f userbase-service 2>/dev/null - docker run -d --name userbase-service --restart unless-stopped --network infra-infra-net -p 8060:8060 userbase-service:latest + # 回滚也必须注入同样的 env,否则 bootstrap 默认 enabled=false 会连不上 nacos 拉不到线上配置 + docker run -d --name userbase-service --restart unless-stopped --network infra-infra-net -p 8060:8060 \ + --add-host sso.yunhaixingtong.com:192.168.10.160 \ + -e SPRING_PROFILES_ACTIVE=prod \ + -e NACOS_CONFIG_ENABLED=true \ + -e NACOS_ADDR=nacos:8848 \ + -e SPRING_CLOUD_NACOS_CONFIG_NAMESPACE=6196f0de-a28d-4894-8f10-e2982b57c6bc \ + -e SPRING_CLOUD_NACOS_USERNAME=yh-reader \ + -e SPRING_CLOUD_NACOS_PASSWORD=123456 \ + userbase-service:latest echo "rolled back"; exit 7 fi echo "DEPLOY OK: $IMG" diff --git a/src/main/resources/bootstrap.yml b/src/main/resources/bootstrap.yml index 257ebb5..d5721ed 100644 --- a/src/main/resources/bootstrap.yml +++ b/src/main/resources/bootstrap.yml @@ -1,27 +1,47 @@ spring: application: name: userbase + # 本地默认 local(不连 nacos);CI 注入 SPRING_PROFILES_ACTIVE=prod + profiles: + active: ${SPRING_PROFILES_ACTIVE:local} cloud: nacos: config: - # Nacos 配置中心地址;生产也可通过环境变量 NACOS_ADDR 覆盖(例如内网别名 nacos:8848) + # ⭐ 本地默认关闭 nacos(profile=local 时完全不连,无 403 噪音,纯走 application.yml) + # CI 注入 NACOS_CONFIG_ENABLED=true 才启用,拉 prod namespace 配置覆盖 application.yml + enabled: ${NACOS_CONFIG_ENABLED:false} + # Nacos 配置中心地址;CI 注入 NACOS_ADDR=nacos:8848(容器内网别名) server-addr: ${NACOS_ADDR:nacos.yunhaixingtong.com:8848} - # public 命名空间:Nacos 中 public 的 namespace id 固定为空字符串 - namespace: ${NACOS_NAMESPACE:ce902c5c-b568-4465-b058-a98e1e2992e7} - # 应用自身配置所在分组 - group: USERBASE - # 配置文件格式;最终主配置 dataId = ${spring.application.name}.${file-extension},即 userbase.yaml + # 默认指向 prod namespace UUID,避免本地误开时连到空的 dev 命名空间 + # CI 用 SPRING_CLOUD_NACOS_CONFIG_NAMESPACE 覆盖(注意:NACOS_NAMESPACE 这个 env 名不生效,必须用 SPRING_CLOUD_NACOS_CONFIG_NAMESPACE) + namespace: ${SPRING_CLOUD_NACOS_CONFIG_NAMESPACE:6196f0de-a28d-4894-8f10-e2982b57c6bc} + # 主配置 group:userbase.yaml / application-infra.yaml 同组 + group: DEFAULT_GROUP + # 配置文件格式;最终主配置 dataId = ${spring.application.name}.${file-extension} = userbase.yaml file-extension: yaml encode: UTF-8 - # nacos 不可达时不强制退出,回退到本地 application.yml / application-prod.yml 兜底 + # nacos 不可达时不强制退出,回退到本地 application.yml 兜底 fail-fast: false - # 只读账号(仅 public 命名空间读权限),用于拉取配置;非管理员账号,可安全提交 - username: yh-reader - password: 123456 - # 共享公共配置:public 空间下的 common.yaml(所有服务公共项,如公共数据源 / Redis 等) - # 优先级低于本应用配置(userbase.yaml),即应用配置可覆盖公共配置中的同名字段 + # 只读账号(仅读取配置权限);CI 注入 SPRING_CLOUD_NACOS_USERNAME/PASSWORD + # 注意:凭据必须用顶层 SPRING_CLOUD_NACOS_* env,放在 spring.cloud.nacos.config.* 下不生效(403) + username: ${SPRING_CLOUD_NACOS_USERNAME:yh-reader} + password: ${SPRING_CLOUD_NACOS_PASSWORD:123456} + + # ============================================================ + # ⭐⭐⭐ 共享配置加载顺序(决定优先级!:排在数组越靠后 = 优先级越高 = 覆盖前面的同 key) + # 低 1) public 命名空间 application-default.yaml(跨环境公共:日期格式/上传大小等,所有应用都能继承) + # 中 2) prod 命名空间 application-infra.yaml(仅生产:mysql/redis/rabbitmq 中间件连接) + # 高 3) prod 命名空间 userbase.yaml(应用级主配置:上传路径/context-path/CAS等,覆盖前两个) + # 最高 4) 启动命令 -D 参数 / 环境变量(覆盖一切) + # ============================================================ shared-configs: - - data-id: common.yaml + # ① 1 号(最低优先级):public 命名空间(namespace="" 固定写空字符串)的 application-default.yaml + - data-id: application-default.yaml group: DEFAULT_GROUP - namespace: "" + namespace: "" # ⭐ 固定 = "",强制指向 Nacos "public" 命名空间,不读上面的全局 prod namespace refresh: false + + # ② 2 号(中等优先级):prod 命名空间(不写 namespace = 继承顶部全局 prod namespace id)的 application-infra.yaml + - data-id: application-infra.yaml + group: DEFAULT_GROUP + refresh: false \ No newline at end of file diff --git a/src/main/resources/bschconfig.jks b/src/main/resources/bschconfig.jks deleted file mode 100644 index c05e280..0000000 Binary files a/src/main/resources/bschconfig.jks and /dev/null differ