Files
xiaotutongxue/backend/xt-server/src/main/resources/application-test.yml
T
lovife 6945f194b5 chore(ci): CI/CD 三阶段 6 job + test/prod 环境 + 启动前的配置自检
.gitlab-ci.yml:契约与实体对账 / 后端编译 / 管理端类型检查与构建 / 学生端 H5 构建 /
接口断言(全套 E2E 打真库)/ 生产环境自检;密钥每次随机生成,顺带证明应用没有偷偷
依赖 dev 默认值。

ProdEnvCheck 是 EnvironmentPostProcessor,跑在任何 bean 之前,拦 6 类「配错了也能启动」;
判「没配」与「配了」要 try { getProperty } catch(F-86)——
getProperty 会解析占位符、失败就抛,只读 PropertySource 又读不到 env 的值。

删掉 Gi 模板残留的 GitHub Pages 工作流(远端是 GitLab、用 pnpm,且它发布的是没有 API 的静态页)。

验证:scripts/e2e-prodguard.py 9/9(三种误配形态都拒绝启动)。
2026-09-30 09:02:57 +08:00

88 lines
3.4 KiB
YAML
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# ═══════════════════════════════════════════════════════════
# 测试环境(test)
#
# 用途:CI 流水线里的 E2E(`scripts/e2e-*.py` 打真实接口)与联调环境。
#
# ⚠️⚠️ 这个文件**不含任何密钥**,全部由环境变量提供。
# 理由不是"洁癖":test 环境的库会被反复清空重建,
# 而**密钥不该跟着库一起被当成一次性的**。更实际的是 ——
# CI 上每次跑用**当次随机生成**的密钥(见 .gitlab-ci.yml),
# 这样才能证明"应用没有偷偷依赖某个 dev 默认值"。
#
# 必需的环境变量(缺任何一个都起不来,且报错会指名道姓):
# PG_HOST PG_PORT PG_DB PG_USER PG_PASSWORD
# REDIS_HOST REDIS_PORT REDIS_PASSWORD
# XT_JWT_SECRET XT_AES_KEY XT_HMAC_KEY XT_RSA_PRIVATE_KEY
# ═══════════════════════════════════════════════════════════
spring:
datasource:
# CI 里 PG 是 services 里的别名(默认 `postgres`),本地跑给 localhost 即可
url: jdbc:postgresql://${PG_HOST:localhost}:${PG_PORT:5432}/${PG_DB:filldb}?stringtype=unspecified
username: ${PG_USER:fill}
password: ${PG_PASSWORD}
data:
redis:
host: ${REDIS_HOST:localhost}
port: ${REDIS_PORT:6379}
password: ${REDIS_PASSWORD}
database: 0
flyway:
# test 允许 clean 后重建:每次流水线从一个空库开始,
# **这样才能验证"所有迁移从 V1 依次跑到最新"是通的** ——
# 而增量环境里永远验不到这件事(旧库已经是最新了)
clean-disabled: false
web:
resources:
# H5 产物在 CI 里是构建出来的;本地指向同一个相对路径
static-locations: ${H5_STATIC_DIR:file:../frontend-mp/dist/build/h5/},classpath:/static/
logging:
level:
root: info
cn.tianbaotong.fill: info
# CI 日志里带 SQL 会淹没断言输出,所以 test 不打开 SQL 日志
fill:
jwt:
secret: ${XT_JWT_SECRET}
crypto:
aes-key: ${XT_AES_KEY}
hmac-key: ${XT_HMAC_KEY}
rsa:
private-key: ${XT_RSA_PRIVATE_KEY}
storage:
# ⚠️ test 用 local 是**刻意的**:CI 里没有对象存储,而且
# "上传→取回→预览"这条链路用本地磁盘就能完整验证。
# 真实验证七牛要走 staging(那需要真凭据),见 docs/09-部署与运维.md
provider: ${XT_STORAGE_PROVIDER:local}
keep-raw: ${XT_STORAGE_KEEP_RAW:false}
self-check-on-startup: false
mini-program:
app-id: ${WX_MP_APP_ID:}
app-secret: ${WX_MP_APP_SECRET:}
env-version: develop
mp-h5:
app-id: ${WX_H5_APP_ID:}
app-secret: ${WX_H5_APP_SECRET:}
callback-url: ${WX_H5_CALLBACK:http://localhost:8080/api/v1/mp/h5/callback}
h5-base-url: ${WX_H5_BASE_URL:http://localhost:8080}
# ⚠️ test 允许打桩登录(E2E 里有 23 条断言靠它跑 H5 授权链路)。
# 它只在**非生产**可用:代码里另有一道"profile 不含 prod"的判断。
stub-enabled: ${WX_H5_STUB:true}
tenant-domain:
enabled: ${XT_TENANT_DOMAIN_ENABLED:false}
base: ${XT_TENANT_DOMAIN_BASE:localhost}
scheme: http
# test 也开 Swagger:联调的人要用它照着调
springdoc:
api-docs:
enabled: true
swagger-ui:
enabled: true