Files
aiot-platform-cloud/env/staging.env.example
lzh 602217274c
Some checks failed
Java CI with Maven / build (11) (push) Has been cancelled
Java CI with Maven / build (17) (push) Has been cancelled
Java CI with Maven / build (8) (push) Has been cancelled
build(ci): docker-compose 多环境参数化 + staging 中间件配置隔离
问题:docker-compose.core.yml 把 MySQL/Redis/Nacos/RocketMQ/TDengine 等连接信息
全写死成 prod 值,无论 master→PROD 还是 release/next→STAGING 都用同一份,
staging 容器会直接连 prod 数据库写脏数据。

改动:
- docker-compose.core.yml 全参数化(${VAR:-prod_default}),用 YAML anchor
  抽公共 env,未注入 .env 时行为与历史一致(不破坏 prod 当前部署)
- 新增 env/prod.env.example、env/staging.env.example 模板(占位密码进 git)
  和 env/.gitignore(真实 .env 不进 git,由部署机手工维护)
- Jenkinsfile:所有 docker compose 命令加 --env-file .env,并在 Pre-deploy
  Check 阶段验证部署机 .env 文件存在性,缺失直接 fail(防止连错中间件)
- 5 个核心服务 application.yaml 的 xxl-job appname 加 SUFFIX 变量:
    appname: ${spring.application.name}${XXL_JOB_EXECUTOR_APPNAME_SUFFIX:}
  staging 设为 -staging,prod 留空。否则 staging 与 prod 注册到同一个执行器
  组,admin 调度任务会随机打到任一边
- iot-server application-prod.yaml TDengine database 参数化:
    /aiot_platform → /${TDENGINE_DATABASE:aiot_platform}
  staging 用独立 database aiot_platform_staging,避免共享 prod 时序数据

staging 中间件方案:
- MySQL 同实例(172.17.16.8)独立库 aiot-platform-release
- Nacos 同实例独立 namespace e635b215-913e-4bc8-8867-2fbf7d5134aa
- Redis 同 prod 实例(短期,靠 application 层 key 前缀隔离)
- RocketMQ 改用 staging 服务器本地实例 172.17.16.7:9876(内网)
- TDengine 同 prod 实例独立 database(CTSDB 切换为 follow-up)
- XXL-Job admin 共用,executor IP=.7、appname 加 -staging 后缀
2026-04-28 16:37:27 +08:00

70 lines
2.8 KiB
Plaintext
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.

# ============================================
# 预发布环境STAGING环境变量模板
# ============================================
# 部署机使用方式:
# 1) 拷贝到 172.17.16.7 的 /opt/aiot-platform-cloud/.env
# 2) 把 <PASSWORD>、<KEY> 等占位符填成真实值(千万别 commit
# 3) Jenkins/手工部署docker compose --env-file .env -f docker-compose.core.yml up -d
# ============================================
# ===== Spring =====
SPRING_PROFILES_ACTIVE=prod
# ===== Nacos独立 namespace与 prod 隔离)=====
NACOS_USERNAME=nacos
NACOS_PASSWORD=<NACOS_PASSWORD>
NACOS_ADDR=172.17.16.7:8848
NACOS_DISCOVERY_NAMESPACE=e635b215-913e-4bc8-8867-2fbf7d5134aa
NACOS_CONFIG_NAMESPACE=e635b215-913e-4bc8-8867-2fbf7d5134aa
# ===== MySQL同实例独立库=====
# 库名从 aiot-platform-test 改为 aiot-platform-release
MYSQL_URL=jdbc:mysql://172.17.16.8:3306/aiot-platform-release?useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true&nullCatalogMeansCurrent=true&rewriteBatchedStatements=true
MYSQL_USERNAME=root
MYSQL_PASSWORD=<MYSQL_PASSWORD>
# ===== Redis同 prod 实例,注意 key 前缀靠应用层隔离)=====
REDIS_HOST=172.17.16.13
REDIS_PORT=6379
REDIS_PASSWORD=<REDIS_PASSWORD>
# ===== RocketMQ用 staging 服务器本地部署的 1Panel-rocketmq-ZQQi 实例,内网地址)=====
# 1Panel 上 namesrv 容器对外端口(请按实际 1Panel 暴露端口校正,默认 9876
ROCKETMQ_NAMESRV_ADDR=172.17.16.7:9876
# 自部署 RocketMQ 通常无 ACL留空即可如启用了 ACL 再填
ROCKETMQ_ACCESS_KEY=
ROCKETMQ_SECRET_KEY=
# ===== 时序库 =====
# TODO: staging 计划用腾讯云 CTSDBInfluxDB 兼容),但当前后端 application-prod.yaml 仍写死
# TDengine 的 jdbc:TAOS-RS 协议;切到 CTSDB 需要后端代码层改造(双引擎抽象在
# framework/tsdb/ 已有但 yaml 未启用切换。短期方案staging 共享 prod 的 TDengine
# 实例172.17.16.7:6041通过独立 database 名隔离。
TSDB_TYPE=tdengine
TDENGINE_HOST=172.17.16.7
TDENGINE_PORT=6041
TDENGINE_USERNAME=root
TDENGINE_PASSWORD=<TDENGINE_PASSWORD>
TDENGINE_DATABASE=aiot_platform_staging
# CTSDB 切换 follow-up暂留空
CTSDB_URL=
CTSDB_USERNAME=
CTSDB_PASSWORD=
CTSDB_DATABASE=
# ===== XXL-Job =====
# 共用 prod 的 adminhttp://172.17.16.7:19090但用 -staging 后缀区分执行器组
# 否则 admin 调度任务会同时打到 prod 和 staging同 appname 串台)
XXL_JOB_ADMIN_ADDRESSES=http://172.17.16.7:19090/xxl-job-admin
XXL_JOB_EXECUTOR_IP=172.17.16.7
XXL_JOB_EXECUTOR_APPNAME_SUFFIX=-staging
# ===== 微信(建议 staging 用沙箱号;先沿用 prod=====
WX_MP_APP_ID=wx5b23ba7a5589ecbb
WX_MP_SECRET=<WX_MP_SECRET>
WX_MINIAPP_APPID=wxc4598c446f8a9cb3
WX_MINIAPP_SECRET=<WX_MINIAPP_SECRET>
# ===== 镜像 =====
REGISTRY_HOST=172.17.16.7:5000