构建统一完整镜像,不再构建 tencent-realtime-control 独立镜像:
set -e
REGISTRY="registry.cn-hangzhou.aliyuncs.com/stuuudy"
IMAGE="${REGISTRY}/ad-put-agent"
cd "${WORKSPACE}"
docker build \
-f Dockerfile.auto_put_ad_mini \
-t "${IMAGE}:latest" \
-t "${IMAGE}:${BUILD_TIMESTAMP}" \
.
docker push "${IMAGE}:latest"
docker push "${IMAGE}:${BUILD_TIMESTAMP}"
ssh -i /root/.ssh/piaoquan.pem root@8.222.142.37 \
"sh /home/sh/deploy.sh ${BUILD_TIMESTAMP}"
将仓库中的 docker-compose.yml 放到 /home/server/docker-compose.yml。
当前部署兼容 ECS 已安装的 Docker Compose 2.27.0。
两个服务共用现有的 /home/server/.env:
chmod 600 /home/server/.env
docker compose version
原有数据库、ODPS、腾讯、飞书、OSS 和 AI 环境变量全部保留。
首次部署增加:
RTC_START_HOUR=12
RTC_STOP_HOUR=21
RTC_POLL_SECONDS=600
RTC_HIGH_CPM=250
RTC_LOW_CPM=190
RTC_BID_UP_RATIO=1.05
RTC_MAX_PARTITION_LAG_HOURS=2
RTC_APPLY_ENABLED=0
RTC_COMMAND_ENABLED=1
RTC_COMMAND_CHAT_ID=oc_xxx
RTC_COMMAND_ALLOWED_OPEN_IDS=ou_xxx
RTC_COMMAND_CONFIRM_TTL_MINUTES=10
DAILY_CREATION_ENABLED=0
DAILY_CREATION_HOUR=10
DAILY_CREATION_MINUTE=30
DAILY_REVIEW_ENABLED=0
DAILY_REVIEW_INTERVAL_HOURS=2
DAILY_RUN_ON_STARTUP=0
DAILY_REVIEW_RUN_ON_STARTUP=0
DAILY_SYNC_DELIVERY_TEMPLATE=0
DAILY_ROI_ENABLED=0
DAILY_ROI_HOUR=11
DAILY_ROI_MINUTE=0
DAILY_ROI_RUN_ON_STARTUP=0
ROI_APPLY_ENABLED=0
ROI_APPROVAL_TTL_MINUTES=120
ROI_SCALE_RATIO=1.10
ROI_SCALE_COOLDOWN_DAYS=3
ROI_MAX_BASE_RATIO=2.00
ROI_FISSION_PARAMETER_VERSION=20260712_A0-A15_v1
ROI_FEISHU_CHAT_ID=oc_xxx
多个操作人使用英文逗号分隔 RTC_COMMAND_ALLOWED_OPEN_IDS。
代码默认 RTC_APPLY_ENABLED=0,日级创建、审核扫描、ROI 和模板同步也默认关闭;
缺少显式生产配置时不会创建广告或修改腾讯。
/home/sh/deploy.sh 使用:
#!/bin/bash
set -e
echo "Qingqu@2019" |
docker login \
--username=stuuudys \
registry.cn-hangzhou.aliyuncs.com \
--password-stdin
VERSION=${1:-latest}
cd /home/server
VERSION=${VERSION} docker compose --env-file /dev/null pull
VERSION=${VERSION} docker compose --env-file /dev/null down --remove-orphans
VERSION=${VERSION} docker compose --env-file /dev/null up -d
VERSION=${VERSION} docker compose --env-file /dev/null ps
继续沿用部署脚本中的 source /home/server/.env,Compose 同时通过标准
env_file 将同一个文件传给两个容器,环境变量文件和加载入口不变。
保持 RTC_APPLY_ENABLED=0 和两个 DAILY_*_ENABLED=0:
cd /home/server
docker compose --env-file /dev/null config --services
docker compose --env-file /dev/null up -d
docker compose --env-file /dev/null ps
docker compose --env-file /dev/null logs --tail=200 ad_control_service
docker compose --env-file /dev/null logs --tail=200 ad_daily_service
控制服务启动时自动执行实时状态表增量迁移。也可以显式验证:
docker compose --env-file /dev/null run --rm \
ad_control_service \
python /app/examples/tencent_realtime_control/init_db.py
执行无腾讯写入的 CPM dry-run:
docker compose --env-file /dev/null run --rm \
ad_control_service \
python /app/examples/tencent_realtime_control/run_once.py \
--at 2026-07-25T12:00:00 \
--cpm-override 220 \
--force-refresh
飞书验证:
查看暂停状态。cmd_xxx。auto_put_ad_mini/server.py 和旧实时容器不再运行。RTC_APPLY_ENABLED=1,保持日级创建和 ROI 服务关闭。docker compose up -d,观察一个完整实时周期。DAILY_REVIEW_ENABLED=1、DAILY_SYNC_DELIVERY_TEMPLATE=1。DAILY_CREATION_ENABLED=1。DAILY_RUN_ON_STARTUP=0,防止部署时额外触发完整创建。日级 ROI 单独分两阶段启用:
当前 north_star_roi_t15_v4 使用版本化传播裂变参数,报表版本为 roi_report_v4。小程序按人群包和转化目标、
公众号按合作方和公众号匹配传播裂变系数;企微口径未确认,当前按渠道/合作方统一使用临时参考系数 2.5 保留展示,但不进入阈值和调控。T0 收入是实际值,
只预测 T1-T15 增量。日级任务不会现场重算 cohort 参数。部署前应保持
ROI_FISSION_PARAMETER_VERSION=20260712_A0-A15_v1。参数必须先发布到 MySQL,
启动日志、数据库发布版本和 Excel 摘要中的参数版本、cohort 日期必须一致。
ROI 在线表只上传一次,并发送到 ROI_FEISHU_CHAT_ID 和
FEISHU_OPERATOR_CHAT_ID;两个变量相同时只发送一次。
生产环境应让 RTC_COMMAND_CHAT_ID 与 FEISHU_OPERATOR_CHAT_ID 指向同一个
投放审批群,确保审批群中的 确认/拒绝 命令由唯一 WebSocket 消费者处理。
审批表默认展示三日窗口的日均首层 UV、日均首层效率收入、日均 LTV 预测效率收入和 日均成本;预测 ROI 仍按三日预测收入总和除以三日成本总和计算。三日汇总和每日明细 保留为隐藏审计列,不参与日均展示。 小程序和公众号 Sheet 展示所有进入阈值样本池的实体,企微 Sheet 展示全部参考实体; 各 Sheet 默认按预测 ROI 倒序排列,动作列不参与排序。
DAILY_ROI_ENABLED=1、ROI_APPLY_ENABLED=0,观察 11:00 的 ODPS 计算、数据库快照、只读飞书表和整批审批提示。确认 roi_<run_id> 验证控制服务明确提示写操作关闭。ROI_APPLY_ENABLED=1。拒绝 roi_<run_id>。DAILY_ROI_ENABLED=0、ROI_APPLY_ENABLED=1,两个服务都会在启动阶段拒绝该配置。首次启用前可手工运行一个“不发飞书、不写腾讯”的计算批次。该命令会读取 ODPS、 初始化/写入 ROI 数据库快照并在挂载目录生成本地 Excel:
docker compose run --rm ad_daily_service \
python /app/examples/auto_put_ad_mini/run_daily_roi.py \
--end-date 20260725
确认数据库快照和本地报告后,再增加 --send-feishu 验证只读在线表和整批命令。
此时必须保持 ROI_APPLY_ENABLED=0;回复确认只应得到“写操作关闭”的提示。
离线复算新参数必须与日级任务分开执行。以下命令默认只生成 SQL,不访问 ODPS:
docker compose run --rm ad_daily_service \
python /app/examples/auto_put_ad_mini/refresh_roi_fission_multiplier.py \
--cohort-date 20260712 \
--sql-only
去掉 --sql-only 才会执行两条只读 cohort SQL 并生成草稿 CSV/Excel。草稿不会自动
进入生产;必须审计并在 roi_control/fission_multiplier.py 登记版本和文件 SHA256。
首次上线或切换版本前,显式发布到 MySQL:
docker compose run --rm ad_daily_service \
python /app/examples/auto_put_ad_mini/refresh_roi_fission_multiplier.py \
--publish-version 20260712_A0-A15_v1 \
--published-by production-deploy
脚本会初始化参数表、写入不可变版本并立即回读校验。相同版本相同内容重复执行会
安全跳过;相同版本内容不同会拒绝覆盖。发布成功后再设置
ROI_FISSION_PARAMETER_VERSION 并启用日级 ROI。
验收:
docker compose --env-file /dev/null ps
docker compose --env-file /dev/null logs --since=30m ad_control_service
docker compose --env-file /dev/null logs --since=30m ad_daily_service
应确认:
回滚时将 VERSION 改为上一个镜像版本并重新部署。数据库新增表和列可以保留,
旧代码不会读取这些字段,不需要执行破坏性回滚。