Files
aiot-platform-cloud/env/prod.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

62 lines
2.0 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.

# ============================================
# 生产环境PROD环境变量模板
# ============================================
# 部署机使用方式:
# 1) 拷贝到 /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 =====
NACOS_USERNAME=nacos
NACOS_PASSWORD=<NACOS_PASSWORD>
NACOS_ADDR=172.17.16.7:8848
NACOS_DISCOVERY_NAMESPACE=8efd6d96-de7f-4664-b28e-c2788ffa1395
NACOS_CONFIG_NAMESPACE=8efd6d96-de7f-4664-b28e-c2788ffa1395
# ===== MySQL =====
MYSQL_URL=jdbc:mysql://172.17.16.8:3306/aiot-platform-test?useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true&nullCatalogMeansCurrent=true&rewriteBatchedStatements=true
MYSQL_USERNAME=root
MYSQL_PASSWORD=<MYSQL_PASSWORD>
# ===== Redis =====
REDIS_HOST=172.17.16.13
REDIS_PORT=6379
REDIS_PASSWORD=<REDIS_PASSWORD>
# ===== RocketMQ腾讯云外网 endpoint=====
ROCKETMQ_NAMESRV_ADDR=rmq-4wd73bxpv.rocketmq.sh.qcloud.tencenttdmq.com:8080
ROCKETMQ_ACCESS_KEY=<ROCKETMQ_ACCESS_KEY>
ROCKETMQ_SECRET_KEY=<ROCKETMQ_SECRET_KEY>
# ===== 时序库prod 用 TDengine=====
TSDB_TYPE=tdengine
TDENGINE_HOST=172.17.16.7
TDENGINE_PORT=6041
TDENGINE_USERNAME=root
TDENGINE_PASSWORD=<TDENGINE_PASSWORD>
# CTSDB 不用,留空
CTSDB_URL=
CTSDB_USERNAME=
CTSDB_PASSWORD=
CTSDB_DATABASE=
# ===== XXL-Job =====
XXL_JOB_ADMIN_ADDRESSES=http://172.17.16.7:19090/xxl-job-admin
XXL_JOB_EXECUTOR_IP=172.17.16.14
# prod 不加后缀(保持现有 admin 上的执行器组名不变)
XXL_JOB_EXECUTOR_APPNAME_SUFFIX=
# ===== 微信(生产 AppId/Secret=====
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
# IMAGE_TAG 由 CI 在 docker compose 命令前 export无需在 .env 里固定