Files
aiot-platform-cloud/env/release.env.example

70 lines
2.8 KiB
Plaintext
Raw Normal View History

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
# ============================================
# 预发布环境RELEASE环境变量模板
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
# ============================================
# 部署机使用方式:
# 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用 release 服务器本地部署的 1Panel-rocketmq-ZQQi 实例,内网地址)=====
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
# 1Panel 上 namesrv 容器对外端口(请按实际 1Panel 暴露端口校正,默认 9876
ROCKETMQ_NAMESRV_ADDR=172.17.16.7:9876
# 自部署 RocketMQ 通常无 ACL留空即可如启用了 ACL 再填
ROCKETMQ_ACCESS_KEY=
ROCKETMQ_SECRET_KEY=
# ===== 时序库 =====
# TODO: release 计划用腾讯云 CTSDBInfluxDB 兼容),但当前后端 application-prod.yaml 仍写死
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
# TDengine 的 jdbc:TAOS-RS 协议;切到 CTSDB 需要后端代码层改造(双引擎抽象在
# framework/tsdb/ 已有但 yaml 未启用切换。短期方案release 共享 prod 的 TDengine
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
# 实例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_release
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
# CTSDB 切换 follow-up暂留空
CTSDB_URL=
CTSDB_USERNAME=
CTSDB_PASSWORD=
CTSDB_DATABASE=
# ===== XXL-Job =====
# 共用 prod 的 adminhttp://172.17.16.7:19090但用 -release 后缀区分执行器组
# 否则 admin 调度任务会同时打到 prod 和 release同 appname 串台)
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
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=-release
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
# ===== 微信(建议 release 用沙箱号;先沿用 prod=====
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
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