Não pode escolher mais do que 25 tópicos Os tópicos devem começar com uma letra ou um número, podem incluir traços ('-') e podem ter até 35 caracteres.
 
 
 
leiyun 255ea222c8 save há 1 dia
..
dockerfiles fix : 处理报错 há 3 semanas
nginx fix : 模拟器配置 há 1 semana
profiles fix : 修复问题 há 3 dias
test fix : 去除限制 há 1 semana
.env.example fix : 修复问题 há 3 dias
README.md 更新example há 1 semana
UAT-RUNBOOK.md save há 1 semana
apply-update.sh 更新脚本 há 1 semana
build-package.ps1 feat: 支持双环境COS部署 há 1 semana
build-package.sh feat: 支持双环境COS部署 há 1 semana
build-update.sh 更新脚本 há 1 semana
deploy-from-url.sh 修改脚本 há 1 semana
docker-compose.runtime.yml fix : 去除限制 há 1 semana
install.sh feat: 支持双环境COS部署 há 1 semana
kafka-switch.md feat : 模式切换 há 1 semana
package-kafka-cos.sh save há 1 dia
publish-cos.sh 修改脚本 há 1 semana
update.MD save há 1 semana

README.md

EMP 隔离部署说明

本目录用于在打包/测试服务器构建 Docker 镜像包,上传到腾讯云 COS,然后在甲方服务器通过包 URL 下载并部署。

默认环境为 emp-test,用于兼容原有流程;UAT 环境使用 DEPLOY_ENV=emp-uatemp-testemp-uat 都有独立环境变量模板,并共用一份运行用 compose 模板。

目录说明

build-package.sh              Linux / WSL 全量打包脚本
build-package.ps1             Windows PowerShell 全量打包脚本
build-update.sh               增量打包脚本
publish-cos.sh                上传 COS 并输出签名 URL
deploy-from-url.sh            甲方服务器按 URL 下载并部署
install.sh                    甲方服务器全量安装脚本
apply-update.sh               甲方服务器增量更新脚本
profiles/docker-compose.yml   emp-test / emp-uat 共用运行模板
profiles/emp-test/.env.example
profiles/emp-uat/.env.example
docker-compose.runtime.yml    旧默认运行模板,保留兼容

打包时 compose 选择顺序为:

profiles/<DEPLOY_ENV>/docker-compose.yml
-> profiles/docker-compose.yml
-> docker-compose.runtime.yml
-> test/docker-compose.yml

正常情况下,emp-testemp-uat 都使用 profiles/docker-compose.yml,差异只来自各自的 .env.example

COS 配置

打包服务器启用 COS_UPLOAD=1 前,需要设置:

export COS_SECRET_ID=change-me
export COS_SECRET_KEY=change-me
export COS_REGION=ap-chengdu
export COS_BUCKET=emp-example-bucket

可选配置:

export COS_SIGN_EXPIRE=604800
export COS_PREFIX=deploy/emp-uat/runtime/custom
export COS_CONFIG_PATH=/path/to/.cos.yaml

publish-cos.sh 使用腾讯云 coscli cp 上传包,并用 coscli signurl 生成临时下载 URL。打包服务器需要提前安装 coscli

UAT 全量打包并上传

cd /home/git/emp_test_deploy/isolated

DEPLOY_ENV=emp-uat \
COS_UPLOAD=1 \
EMP_ROOT=/home/git \
./build-package.sh

其中 /home/git/emp_test_deploy/isolated 是部署脚本目录,EMP_ROOT=/home/git 是业务代码根目录,下面直接包含 emp_adminemp_serveremp_ws

Windows PowerShell:

cd E:\emp\deploy\isolated
.\build-package.ps1 -DeployEnv emp-uat -CosUpload

输出示例:

Package: .../dist/emp-uat-runtime-20260611120000.tar.gz
COS Key: deploy/emp-uat/runtime/20260611120000/emp-uat-runtime-20260611120000.tar.gz
SHA256: ...
URL: https://...

甲方服务器全量部署

先将 deploy-from-url.sh 放到甲方服务器。之后执行:

cd /home/admin-x99/emp

DEPLOY_ENV=emp-uat \
DEPLOY_HOME=/home/admin-x99/emp/emp-uat \
PACKAGE_SHA256=<打包输出的SHA256> \
bash deploy-from-url.sh "<打包输出的URL>"

脚本会将包下载到:

/home/admin-x99/emp/emp-uat/packages/<时间戳>/

然后把运行文件复制到:

/home/admin-x99/emp/emp-uat/runtime/

并执行 install.sh

如果目标目录下还没有 .envinstall.sh 会先从 .env.example 生成 .env 并停止。修改密码、PUBLIC_HOST、端口和第三方配置后,再执行:

cd /home/admin-x99/emp/emp-uat/runtime
DEPLOY_ENV=emp-uat bash install.sh

同一台服务器部署 test 和 uat

同一台甲方服务器可以同时部署两套环境。两套环境使用不同 DEPLOY_ENVDEPLOY_HOME、compose project 和宿主机端口。

profiles/docker-compose.yml 中网关、PDF、Nacos、Redis 默认只在 Docker 内网访问;前端 Nginx 容器会在 Docker 内网代理 /api//socket.io/

环境 部署目录 Compose 项目名 前端 WS MySQL 本地 Kafka 可选 TDengine UI
emp-test /home/admin-x99/emp/emp-test emp-test 4750 4751 4752 4753 4754
emp-uat /home/admin-x99/emp/emp-uat emp-uat 4755 4756 4757 4758 4759

47544759 映射到 TDengine 容器内的 6060 UI 端口。当前公共 compose 模板不对外暴露 Gateway、PDF、Nacos、Redis、TDengine REST/RPC;如需额外暴露,再向甲方申请新端口。

甲方服务器系统重装后,emp-testemp-uat 都按全量部署重新执行一次;不要只打增量包。

Kafka 当前配置:

  • emp-test 模拟器推送:ip-cld.cn:29362 / test-vehicle-real-data
  • emp-test 后端消费:ip-cld.cn:29362 / YuanJing-test-vehicle-mock-data
  • emp-uat 模拟器推送:ip-cld.cn:29362 / uat-vehicle-real-data
  • emp-uat 后端消费:ip-cld.cn:29362 / YuanJing-uat-vehicle-mock-data

内部 Kafka 镜像仍会打进离线包,但 profiles/docker-compose.yml 默认不启动 Kafka。需要本地联调内部 Kafka 时,再显式启用 compose profile:COMPOSE_PROFILES=local-kafka

部署 test:

DEPLOY_ENV=emp-test \
DEPLOY_HOME=/home/admin-x99/emp/emp-test \
PACKAGE_SHA256=<打包输出的SHA256> \
bash deploy-from-url.sh "<emp-test包URL>"

部署 uat:

DEPLOY_ENV=emp-uat \
DEPLOY_HOME=/home/admin-x99/emp/emp-uat \
PACKAGE_SHA256=<打包输出的SHA256> \
bash deploy-from-url.sh "<emp-uat包URL>"

Docker compose 会按项目名隔离容器、网络和数据卷,所以只要 PROJECT_NAME 不同,emp-testemp-uat 的数据卷不会互相覆盖。

TDengine 首次初始化

首次全量部署后,如果 MySQL 数据由外部迁移,只需要在 TDengine 中创建业务库和车辆数据超级表 s_vehicle_dataemp-testemp-uat 是两套独立容器和数据卷,必须分别执行一次。

下面以 emp-uat 为例,CREATE STABLE 使用 here-doc 方式执行,这是现场验证成功的方式,避免超长单行 SQL 粘贴被截断:

DEPLOY_ENV=emp-uat
cd /home/admin-x99/emp/$DEPLOY_ENV/runtime

dc() { docker compose --env-file .env -f docker-compose.yml -p "$DEPLOY_ENV" "$@"; }

dc exec -T tdengine taos -s "CREATE DATABASE IF NOT EXISTS emp;"

dc exec -T tdengine taos -d emp <<'SQL'
CREATE STABLE s_vehicle_data (
    ts TIMESTAMP,
    endurance_mile FLOAT,
    vehicle_status INT,
    charge_status INT,
    operation_mode INT,
    speed INT,
    total_mile INT,
    vol INT,
    cur INT,
    soc INT,
    dc_status INT,
    gear INT,
    insulation INT,
    pedal_mile INT,
    break_status INT,
    valid BOOL,
    longitude INT,
    latitude INT,
    charge_energy_num INT,
    charge_energy_no INT,
    charge_vol INT,
    charge_cur INT,
    bat_num INT,
    bat_start INT,
    cur_num INT,
    bats NCHAR(4096),
    charge_energy_temp_num INT,
    charge_energy_temp_no INT,
    temp_num INT,
    temps NCHAR(2048),
    version INT,
    avg_cur_num INT,
    avg_cur INT,
    model_code NCHAR(64),
    byte_num INT,
    soh INT,
    ah_num FLOAT,
    energy_num FLOAT,
    sn NCHAR(64),
    can_protocol_detail NCHAR(256),
    adc_status INT,
    can_vol FLOAT,
    adc_vol FLOAT,
    adc_vol_sample INT,
    battery_code NCHAR(64),
    data_time_text NCHAR(32)
) TAGS (
    vin_no NCHAR(32)
);

SHOW STABLES;
DESCRIBE s_vehicle_data;
SQL

成功标志:

Create OK
SHOW STABLES 输出包含 s_vehicle_data
DESCRIBE s_vehicle_data 输出 47 行字段

taosdocker compose exec -T 的非交互终端里可能输出 Fail to reset the terminal propertiesFail to set terminal properties,只要 Create OKSHOW STABLESDESCRIBE 正常,可以忽略。

建完超级表后重启数据服务:

dc restart emp-data

初始化 emp-test 时只需要把环境改成:

DEPLOY_ENV=emp-test
cd /home/admin-x99/emp/$DEPLOY_ENV/runtime
dc() { docker compose --env-file .env -f docker-compose.yml -p "$DEPLOY_ENV" "$@"; }

单车报告同步配置

模拟器页面的"同步”(POST /api/simulator/backend/report/sync)链路为:

浏览器模拟器页面
-> emp-ws  /api/simulator/backend/report/sync
-> emp-gateway -> emp-monitor  /monitor/batteryEvaluation/sync
-> 中控 /sync/report(隔离环境由自带 emp-ws 模拟器兼容接口充当)

隔离环境没有真实中控,单车报告的"中控"角色由 emp-ws 容器自身提供,因此 .env 必须满足:

  • SYNC_REPORT_SYNC_ENABLED=true:关闭时 emp-monitor 直接跳过同步,返回 successCount=0,页面提示"同步未产生成功数据,已保留”。
  • SYNC_REPORT_BASE_URL=http://emp-ws:3000:单车报告同步地址。为空时会回退到 SYNC_BASE_URL(占位 https://example.com),导致请求不到数据。emp-ws 是 compose 内网服务名,3000 为容器内端口。

上述两项已在 .env.example 模板中给出可用默认值。改动 .env 后重启业务服务:

cd /home/admin-x99/emp/emp-test/runtime
dc() { docker compose --env-file .env -f docker-compose.yml -p emp-test "$@"; }
dc up -d emp-monitor
dc logs -f emp-monitor   # 应出现 [单车报告] 请求中控接口 url=http://emp-ws:3000/sync/report

如果 emp-monitor 走 Nacos 配置中心下发配置,需在 Nacos 控制台对应 dataId 同步修改这两项,.env 改动可能不生效。

甲方服务器常用命令

cd /home/admin-x99/emp/emp-uat/runtime

docker compose --env-file .env -f docker-compose.yml -p emp-uat ps
docker compose --env-file .env -f docker-compose.yml -p emp-uat logs -f emp-gateway
docker compose --env-file .env -f docker-compose.yml -p emp-uat down

查看 test 时把目录和项目名改为 emp-test

cd /home/admin-x99/emp/emp-test/runtime
docker compose --env-file .env -f docker-compose.yml -p emp-test ps

手工兜底部署

如果 COS 不可用,仍然可以通过其他方式把 dist/ 下的包传到甲方服务器。全量包手工部署示例:

mkdir -p /home/admin-x99/emp/emp-uat/runtime
tar -xzf emp-uat-runtime-*.tar.gz -C /home/admin-x99/emp/emp-uat/runtime --strip-components=1
cd /home/admin-x99/emp/emp-uat/runtime
DEPLOY_ENV=emp-uat bash install.sh