diff --git a/.gitea/workflows/ci.yml b/.gitea/workflows/ci.yml index c2ec704..490c015 100644 --- a/.gitea/workflows/ci.yml +++ b/.gitea/workflows/ci.yml @@ -3,7 +3,7 @@ name: ci-bschclass-service # 后端标准化 CI:maven 构建 jar -> docker build -> 推 Nexus docker-hosted # 触发:push 到 master(本仓库默认分支,代码在根目录)/ 手动 Run workflow # 依赖仓库 Actions Secrets:NEXUS_USER / NEXUS_PASSWORD(ci-docker 账号,仅 docker-hosted 推送权) -# REDIS_PASSWORD / DB_PASSWORD / RABBITMQ_PASSWORD(中间件密码,运行时注入容器,不写死) +# 中间件密码(redis/mysql/rabbitmq)由 Nacos application-infra.yaml 注入,无需 Secret,也不注入容器 env on: push: branches: [master] @@ -103,7 +103,8 @@ jobs: # bootstrap.yml 默认 nacos.config.enabled=false(本地不连);CI 必须注入 NACOS_CONFIG_ENABLED=true 才会拉配置 # SPRING_PROFILES_ACTIVE=prod 激活生产 profile # namespace/凭据用顶层 SPRING_CLOUD_NACOS_* env(bootstrap 的 ${...} 占位符才能解析到) - # ⚠️ 后端无 context-path,caddy 已剥离 /bschclass 前缀,故容器内监听 8087、不加 context-path + # ⚠️ 后端有 context-path=/bschclass(application-prod.yml),caddy 用 handle(不剥离 /bschclass 前缀), + # 故 CAS 客户端拼出的 service URL 正确包含 /bschclass,登录回跳地址不会丢前缀。 docker run -d --name bschclass-service --restart unless-stopped --network infra-infra-net -p 8087:8087 \ --add-host sso.yunhaixingtong.com:192.168.10.160 \ -e SPRING_PROFILES_ACTIVE=prod \ @@ -112,15 +113,13 @@ jobs: -e SPRING_CLOUD_NACOS_CONFIG_NAMESPACE=6196f0de-a28d-4894-8f10-e2982b57c6bc \ -e SPRING_CLOUD_NACOS_USERNAME=yh-reader \ -e SPRING_CLOUD_NACOS_PASSWORD=123456 \ - -e REDIS_PASSWORD=${{ secrets.REDIS_PASSWORD }} \ - -e DB_PASSWORD=${{ secrets.DB_PASSWORD }} \ - -e RABBITMQ_PASSWORD=${{ secrets.RABBITMQ_PASSWORD }} \ "$IMG" - # 健康检查:Spring 起来后根路径返回 404(无映射控制器),000 表示未起来(无 context-path,故用 8087 根) + # 健康检查:context-path=/bschclass 后,context root 为 /bschclass/(无欢迎页返回 404); + # 000 表示应用未起来(端口不通),非 000 即视为已启动。探 /bschclass/ 而非 / 更准确。 OK=0 for i in $(seq 1 30); do sleep 5 - CODE=$(curl -s -o /dev/null -w '%{http_code}' http://localhost:8087/ 2>/dev/null || true) + CODE=$(curl -s -o /dev/null -w '%{http_code}' http://localhost:8087/bschclass/ 2>/dev/null || true) if [ "$CODE" != "000" ]; then OK=1; break; fi done if [ "$OK" = "0" ]; then @@ -134,9 +133,6 @@ jobs: -e SPRING_CLOUD_NACOS_CONFIG_NAMESPACE=6196f0de-a28d-4894-8f10-e2982b57c6bc \ -e SPRING_CLOUD_NACOS_USERNAME=yh-reader \ -e SPRING_CLOUD_NACOS_PASSWORD=123456 \ - -e REDIS_PASSWORD=${{ secrets.REDIS_PASSWORD }} \ - -e DB_PASSWORD=${{ secrets.DB_PASSWORD }} \ - -e RABBITMQ_PASSWORD=${{ secrets.RABBITMQ_PASSWORD }} \ bschclass-service:latest echo "rolled back"; exit 7 fi diff --git a/docker/Dockerfile b/docker/Dockerfile index 35fc5c8..855d0f2 100644 --- a/docker/Dockerfile +++ b/docker/Dockerfile @@ -11,7 +11,7 @@ RUN apt-get update \ WORKDIR /app COPY target/BschClass-0.1.jar /app/BschClass-0.1.jar # 镜像内 application-prod.yml 仅作「nacos 不可达时的兜底默认」; -# 正常启动由 run-app.sh 从 nacos 拉取线上配置(dataId=bschclassmanage-prod.yaml)后覆盖。 +# 正常启动由 run-app.sh 从 nacos 拉取线上配置(主 dataId=bschclassmanage.yaml,group=SCHCLASSMANAGE,prod 命名空间)后覆盖。 COPY docker/application-prod.yml /app/config/application-prod.yml COPY docker/run-app.sh /app/run-app.sh RUN chmod +x /app/run-app.sh && mkdir -p /data/upload diff --git a/docker/application-prod.yml b/docker/application-prod.yml index 414d5d3..d18b3e4 100644 --- a/docker/application-prod.yml +++ b/docker/application-prod.yml @@ -1,4 +1,4 @@ -# BschClass 生产配置(线上以 nacos 的 bschclassmanage-prod.yaml 为准,本文件是 nacos 不可达时的兜底) +# BschClass 生产配置(线上以 nacos 的 bschclassmanage.yaml 为准,本文件是 nacos 不可达时的兜底) server: port: 8087 # 无 context-path:经 caddy 暴露为 http://base.yunhaixingtong.com/bschclass,caddy 已剥离 /bschclass 前缀 @@ -15,12 +15,10 @@ spring: date-format: yyyy-MM-dd HH:mm:ss redis: - host: redis-server + host: redis port: 6379 database: 0 - # 生产由 nacos application-infra.yaml 注入;此处仅作 nacos 不可达时的兜底, - # 密码不写死,运行时由容器环境变量 REDIS_PASSWORD 注入(值来自 Gitea Secrets,不入镜像) - password: ${REDIS_PASSWORD} + # 密码由 nacos application-infra.yaml 注入(spring.redis.password),不在此写死、不依赖容器 env timeout: 2000ms data: redis: @@ -30,7 +28,7 @@ spring: # datasource: # url: jdbc:mysql://mysql8:3306/dbschoolclass?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true # username: root - # # 生产由 nacos application-infra.yaml 注入;兜底密码运行时由 DB_PASSWORD 环境变量注入(来自 Gitea Secrets) + # # 生产由 nacos application-infra.yaml 注入(含密码);此处仅作 nacos 不可达时的兜底参考 # password: ${DB_PASSWORD} # driver-class-name: com.mysql.cj.jdbc.Driver # min-idle: 30 @@ -63,8 +61,7 @@ spring: host: rabbitmq port: 5672 username: admin - # 生产由 nacos application-infra.yaml 注入;兜底密码运行时由 RABBITMQ_PASSWORD 环境变量注入(来自 Gitea Secrets) - password: ${RABBITMQ_PASSWORD} + # 密码由 nacos application-infra.yaml 注入(spring.rabbitmq.password),不在此写死、不依赖容器 env listener: direct: auto-startup: false diff --git a/pom.xml b/pom.xml index 4db4d65..7225de0 100644 --- a/pom.xml +++ b/pom.xml @@ -46,6 +46,19 @@ org.springframework.boot spring-boot-starter-data-jpa + + + + 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-web diff --git a/src/main/java/com/yunhai/bschclassmanage/controller/api/LogController.java b/src/main/java/com/yunhai/bschclassmanage/controller/api/LogController.java index 5e70647..e477699 100644 --- a/src/main/java/com/yunhai/bschclassmanage/controller/api/LogController.java +++ b/src/main/java/com/yunhai/bschclassmanage/controller/api/LogController.java @@ -16,7 +16,7 @@ import org.springframework.web.bind.annotation.*; public class LogController extends BaseController { @Autowired - private ILogService logService; // 使用接口 + private ILogService logService; // 使用接口c @GetMapping("systemSearch") public PageVO systemSearch(@RequestParam(required = false) String keyword, diff --git a/src/main/resources/application-prod.yml b/src/main/resources/application-prod.yml index 8186d19..8bb96c4 100644 --- a/src/main/resources/application-prod.yml +++ b/src/main/resources/application-prod.yml @@ -1,6 +1,10 @@ server: address: 0.0.0.0 port: 8087 + servlet: + # 对齐 UserBase:后端加 context-path,配合 Caddy 用 handle(不剥离 /bschclass 前缀), + # 使 CAS 客户端拼出的 service URL 正确包含 /bschclass(否则登录回跳会丢前缀)。 + context-path: /bschclass yh: sso: diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml index 2ce5258..1acc19b 100644 --- a/src/main/resources/application.yml +++ b/src/main/resources/application.yml @@ -77,8 +77,8 @@ yh: app-auth: enabled: true # 本应用自身身份(客户端签名用) - app-key: 100001 - app-secret: ec4e860206374c80938719fff8e14a86 + app-key: 100002 + app-secret: 2314a3b158b24a838b2b9b69fd3db118 open: enabled: true base-host: http://base.yunhaixingtong.com diff --git a/src/main/resources/bootstrap.yml b/src/main/resources/bootstrap.yml index fae360b..7a9059a 100644 --- a/src/main/resources/bootstrap.yml +++ b/src/main/resources/bootstrap.yml @@ -4,7 +4,7 @@ spring: # 本地默认 local(不连 nacos);CI 注入 SPRING_PROFILES_ACTIVE=prod profiles: active: ${SPRING_PROFILES_ACTIVE:local} - cloud:/ + cloud: nacos: config: # ⭐ 本地默认关闭 nacos(profile=local 时完全不连,无 403 噪音,纯走 application.yml)