diff --git a/docker/application-prod.yml b/docker/application-prod.yml index 7718c2f..94cec1c 100644 --- a/docker/application-prod.yml +++ b/docker/application-prod.yml @@ -1,4 +1,4 @@ -# UserBase 生产配置(线上以 nacos 的 userbase-prod.yml 为准,本文件是 nacos 不可达时的兜底) +# UserBase 生产配置(镜像内自足:配置中心已停用,运行时密码由 Gitea Secrets / projman .env 环境变量注入) server: port: 8060 servlet: @@ -20,8 +20,7 @@ spring: host: redis-server port: 6379 database: 0 - # 生产由 nacos application-infra.yaml 注入;此处仅作 nacos 不可达时的兜底, - # 密码不写死,运行时由容器环境变量 REDIS_PASSWORD 注入(值来自 Gitea Secrets,不入镜像) + # 兜底密码运行时由容器环境变量 REDIS_PASSWORD 注入(值来自 Gitea Secrets / projman .env,不入镜像) password: ${REDIS_PASSWORD} timeout: 2000ms data: @@ -29,14 +28,14 @@ spring: repositories: enabled: false -# datasource: -# url: jdbc:mysql://mysql8:3306/bsch_userbase?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true -# username: root -# # 生产由 nacos application-infra.yaml 注入;兜底密码运行时由 DB_PASSWORD 环境变量注入(来自 Gitea Secrets) -# password: ${DB_PASSWORD} -# driver-class-name: com.mysql.cj.jdbc.Driver -# min-idle: 10 -# max-active: 30 + # 镜像内兜底:db 密码运行时由 DB_PASSWORD 环境变量注入(来自 Gitea Secrets / projman .env,不入镜像) + datasource: + url: jdbc:mysql://mysql8:3306/bsch_userbase?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true + username: root + password: ${DB_PASSWORD} + driver-class-name: com.mysql.cj.jdbc.Driver + min-idle: 10 + max-active: 30 jpa: database: MySQL @@ -54,7 +53,7 @@ spring: host: rabbitmq port: 5672 username: admin - # 生产由 nacos application-infra.yaml 注入;兜底密码运行时由 RABBITMQ_PASSWORD 环境变量注入(来自 Gitea Secrets) + # 兜底密码运行时由 RABBITMQ_PASSWORD 环境变量注入(值来自 Gitea Secrets / projman .env,不入镜像) password: ${RABBITMQ_PASSWORD} listener: direct: diff --git a/docker/run-app.sh b/docker/run-app.sh index 163abd4..15bcb21 100644 --- a/docker/run-app.sh +++ b/docker/run-app.sh @@ -1,10 +1,9 @@ #!/bin/sh -# UserBase 启动入口:配置统一由 Nacos 配置中心在 bootstrap 阶段下发(见 bootstrap.yml) -# 不再需要手动 curl 拉取;若 nacos 不可达,bootstrap 中 fail-fast=false 会自动回退到 -# 镜像内烤好的 application-prod.yml 兜底默认。 +# UserBase 启动入口:配置中心(nacos)已停用,生产配置=镜像内烤好的 application-prod.yml +# + 运行时环境变量注入(Gitea Secrets / projman .env:DB_PASSWORD/REDIS_PASSWORD/RABBITMQ_PASSWORD)。 set -e -echo "[run-app] starting UserBase (profile=prod, nacos=${NACOS_ADDR:-nacos.yunhaixingtong.com:8848}) ..." +echo "[run-app] starting UserBase (profile=prod) ..." exec java ${JAVA_OPTS:--Xms512m -Xmx1024m} -Dfile.encoding=UTF-8 -jar /app/userbase.jar \ --spring.profiles.active=prod diff --git a/pom.xml b/pom.xml index e1a700f..c80e439 100644 --- a/pom.xml +++ b/pom.xml @@ -31,14 +31,6 @@ pom import - - - com.alibaba.cloud - spring-cloud-alibaba-dependencies - 2021.0.5.0 - pom - import - @@ -90,18 +82,6 @@ - - - com.alibaba.cloud - spring-cloud-starter-alibaba-nacos-config - - - - org.springframework.cloud - spring-cloud-starter-bootstrap - 3.1.8 - - org.springframework.boot spring-boot-starter-data-redis diff --git a/src/main/java/com/yunhai/userbase/service/impl/PropertyEnvConfigSource.java b/src/main/java/com/yunhai/userbase/service/impl/PropertyEnvConfigSource.java new file mode 100644 index 0000000..332aee0 --- /dev/null +++ b/src/main/java/com/yunhai/userbase/service/impl/PropertyEnvConfigSource.java @@ -0,0 +1,30 @@ +package com.yunhai.userbase.service.impl; + +import com.yunhai.platform.envconfig.EnvConfigSource; +import org.springframework.core.env.Environment; +import org.springframework.stereotype.Service; + +/** + * env-config 数据源实现:整站已停用 nacos 配置中心,改为从 Spring Environment 读取静态属性。 + * 键 = {@code yh.env-config.source.},三处可配(优先级由 Environment 决定): + * 1) 启动参数 --yh.env-config.source.front='{...}' + * 2) 环境变量 YH_ENV_CONFIG_SOURCE_FRONT(projman .env / Gitea Secrets 注入,宽松绑定) + * 3) application.yml 内 yh.env-config.source.front 键 + * 未配置返回 null,平台 EnvConfigService 会归一为 "{}" 返回(前端走同源推断兜底,接口保持 200)。 + */ +@Service +public class PropertyEnvConfigSource implements EnvConfigSource { + + private static final String KEY_PREFIX = "yh.env-config.source."; + + private final Environment environment; + + public PropertyEnvConfigSource(Environment environment) { + this.environment = environment; + } + + @Override + public String get(String target) { + return environment.getProperty(KEY_PREFIX + target); + } +} diff --git a/src/main/resources/bootstrap.yml b/src/main/resources/bootstrap.yml deleted file mode 100644 index c1fd007..0000000 --- a/src/main/resources/bootstrap.yml +++ /dev/null @@ -1,47 +0,0 @@ -spring: - application: - name: userbase - # 本地默认 local(不连 nacos);CI 注入 SPRING_PROFILES_ACTIVE=prod - profiles: - active: ${SPRING_PROFILES_ACTIVE:local} - cloud: - nacos: - config: - # ⭐ 本地默认关闭 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} - # 默认指向 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 在 USERBASE group(与下方 shared-configs 的 DEFAULT_GROUP 不同组,各自指定) - group: USERBASE - # 配置文件格式;最终主配置 dataId = ${spring.application.name}.${file-extension} = userbase.yaml - file-extension: yaml - encode: UTF-8 - # nacos 不可达时不强制退出,回退到本地 application.yml 兜底 - fail-fast: false - # 只读账号(仅读取配置权限);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: - # ① 1 号(最低优先级):public 命名空间(namespace="" 固定写空字符串)的 application-default.yaml - - data-id: application-default.yaml - group: DEFAULT_GROUP - 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