From a71f6a0ce1dd58257498caadf198011580afeaa4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=BC=96=E7=A0=81=E5=B7=A5=E7=A8=8B=E5=B8=88?= Date: Sun, 30 Aug 2026 21:55:33 +0800 Subject: [PATCH] =?UTF-8?q?fix(deploy):=20=E5=85=AC=E7=BD=91=20overlay=20?= =?UTF-8?q?=E7=94=A8=20!override=20=E8=A6=86=E7=9B=96=E5=86=85=E9=83=A8?= =?UTF-8?q?=E7=AB=AF=E5=8F=A3=E7=BB=91=E5=AE=9A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Compose 合并后内部端口只绑 127.0.0.1,避免与基础 0.0.0.0 叠加导致起不来。 顺带给 JPUSH_PUSH_INTENT 加引号,并拒绝空 SERVER_IP。 Co-authored-by: Cursor Co-authored-by: multica-agent --- .env.example | 3 ++- deploy/public/.env.public.example | 3 ++- deploy/public/docker-compose.public.yaml | 15 +++++++++------ docs/任务清单.md | 3 ++- docs/最新进度.md | 1 + scripts/deploy-public.sh | 10 ++++++++++ 6 files changed, 26 insertions(+), 9 deletions(-) diff --git a/.env.example b/.env.example index 2b50497..8027909 100644 --- a/.env.example +++ b/.env.example @@ -92,5 +92,6 @@ GRAFANA_URL="http://127.0.0.1:13000/" OPENIM_PUSH_ENABLE= JPUSH_APPKEY=95fc2352648a7d4568ac8d72 JPUSH_PUSH_URL=https://api.jpush.cn/v3/push -JPUSH_PUSH_INTENT=intent:#Intent;action=android.intent.action.MAIN;category=android.intent.category.LAUNCHER;component=cn.solsum.jinxunda/cn.solsum.jinxunda.MainActivity;end +# 必须加引号:值含分号。compose 读 .env 无妨;不要用 shell source/. 加载未加引号的副本。 +JPUSH_PUSH_INTENT="intent:#Intent;action=android.intent.action.MAIN;category=android.intent.category.LAUNCHER;component=cn.solsum.jinxunda/cn.solsum.jinxunda.MainActivity;end" diff --git a/deploy/public/.env.public.example b/deploy/public/.env.public.example index dd142a5..a83e4ad 100644 --- a/deploy/public/.env.public.example +++ b/deploy/public/.env.public.example @@ -9,7 +9,8 @@ MINIO_EXTERNAL_ADDRESS="https://jxd.jinniu.ink/files" OPENIM_PUSH_ENABLE=jpush JPUSH_APPKEY=95fc2352648a7d4568ac8d72 JPUSH_PUSH_URL=https://api.jpush.cn/v3/push -JPUSH_PUSH_INTENT=intent:#Intent;action=android.intent.action.MAIN;category=android.intent.category.LAUNCHER;component=cn.solsum.jinxunda/cn.solsum.jinxunda.MainActivity;end +# 必须加引号:值含分号。compose 读 .env 无妨;不要用 shell source/. 加载未加引号的副本。 +JPUSH_PUSH_INTENT="intent:#Intent;action=android.intent.action.MAIN;category=android.intent.category.LAUNCHER;component=cn.solsum.jinxunda/cn.solsum.jinxunda.MainActivity;end" # Master Secret 由 scripts/load-jpush-secret.sh 从 # /root/.config/jinxunda/jpush_master_secret 注入为环境变量 JPUSH_MASTER_SECRET。 diff --git a/deploy/public/docker-compose.public.yaml b/deploy/public/docker-compose.public.yaml index 80282bc..a7db0dd 100644 --- a/deploy/public/docker-compose.public.yaml +++ b/deploy/public/docker-compose.public.yaml @@ -1,13 +1,16 @@ # 公网测试 overlay。用法(在仓库根目录,由总工执行,本卡不跑): -# set -a && . ./.env && ./scripts/load-jpush-secret.sh && set +a +# ./scripts/load-jpush-secret.sh # docker compose -f docker-compose.yaml -f deploy/public/docker-compose.public.yaml up -d +# 不要用 shell source/. 加载 .env:JPUSH_PUSH_INTENT 含分号,未加引号时会被拆成命令。 +# compose 会自行读取仓库根目录 .env 做变量替换;Master Secret 只经 load-jpush-secret.sh 注入。 # # 原则:内部端口只绑 127.0.0.1;对外只开 80/443 + LiveKit 媒体 17881/tcp、17882/udp。 +# ports 使用 !override,避免与基础 compose 的 0.0.0.0 绑定叠加。 # 回滚:去掉本 overlay,改回 docker compose -f docker-compose.yaml up -d,数据目录 components/ 与 data/ 不动。 services: openim-server: - ports: + ports: !override - "127.0.0.1:${OPENIM_MSG_GATEWAY_PORT}:10001" - "127.0.0.1:${OPENIM_API_PORT}:10002" environment: @@ -18,18 +21,18 @@ services: - IMENV_OPENIM_PUSH_JPUSH_PUSHINTENT=${JPUSH_PUSH_INTENT} minio: - ports: + ports: !override - "127.0.0.1:${MINIO_PORT}:9000" - "127.0.0.1:${MINIO_CONSOLE_PORT}:9090" etcd: - ports: + ports: !override - "127.0.0.1:12379:2379" - "127.0.0.1:12380:2380" livekit: command: --config /etc/livekit.yaml --node-ip ${SERVER_IP} - ports: + ports: !override - "127.0.0.1:${LIVEKIT_PORT:-17880}:17880" - "${LIVEKIT_RTC_TCP_PORT:-17881}:17881" - "${LIVEKIT_RTC_UDP_PORT:-17882}:17882/udp" @@ -37,7 +40,7 @@ services: - ./config/livekit.public.yaml:/etc/livekit.yaml account-server: - ports: + ports: !override - "127.0.0.1:${ACCOUNT_PORT:-10010}:10010" edge: diff --git a/docs/任务清单.md b/docs/任务清单.md index 1db4e92..99b4c93 100644 --- a/docs/任务清单.md +++ b/docs/任务清单.md @@ -4,7 +4,7 @@ ## 正在做 -公网第一阶段:客户端极光/华为接入与 `jxd.jinniu.ink` 部署配置已提交专用分支,等待总工审核并部署测试环境。 +公网第一阶段返工:overlay 端口覆盖、`JPUSH_PUSH_INTENT` 引号与 `SERVER_IP` 校验已改完,等待总工复审后部署测试环境。 ## 已做完 @@ -17,6 +17,7 @@ - 手机端应用标识统一为 `cn.solsum.jinxunda`。 - 安卓极光 SDK 初始化、通知权限、alias 回传、点击处理,以及 OpenIM 离线推送所需的服务端配置入口(Master Secret 从服务器文件注入)。 - 公网反向代理 / HTTPS / WSS / 防火墙与回滚说明(配置进仓库,未实际部署)。 +- 公网 overlay 用 `!override` 覆盖内部端口绑定;部署脚本校验 `SERVER_IP` 非空。 ## 还没安排 diff --git a/docs/最新进度.md b/docs/最新进度.md index 9a251c5..af24a58 100644 --- a/docs/最新进度.md +++ b/docs/最新进度.md @@ -12,6 +12,7 @@ - 手机默认服务地址为 `jxd.jinniu.ink` 的 HTTPS/WSS;内网可用 `--dart-define=SERVER_HOST=... --dart-define=USE_TLS=false` 覆盖。 - 电脑端 `.env.example` 已改为同一套公网路径。 - 公网部署 overlay、Nginx、证书步骤、Master Secret 注入脚本和回滚脚本在 `deploy/public/` 与 `scripts/deploy-public.sh`;由总工部署,施工员不改测试机。 +- overlay 的内部端口用 Compose `!override` 覆盖基础 `0.0.0.0` 绑定,只留 `127.0.0.1`;LiveKit `17881/tcp`、`17882/udp` 仍对公网开放。部署脚本会拒绝空 `SERVER_IP`。 ## 已有验证记录 diff --git a/scripts/deploy-public.sh b/scripts/deploy-public.sh index d66f7ba..f796b3e 100755 --- a/scripts/deploy-public.sh +++ b/scripts/deploy-public.sh @@ -10,6 +10,16 @@ if [ ! -f .env ]; then exit 1 fi +# LiveKit --node-ip 依赖 SERVER_IP;空值时信令通、媒体宣告错误。 +# 不 source .env(JPUSH_PUSH_INTENT 含分号);只抽取这一项。 +if [ -z "${SERVER_IP:-}" ]; then + SERVER_IP="$(awk -F= '/^SERVER_IP=/{v=$2} END{print v}' .env | tr -d '[:space:]"')" +fi +if [ -z "${SERVER_IP}" ]; then + echo "SERVER_IP 为空,拒绝启动。请在 .env 填写本机公网 IP(LiveKit 媒体候选用)。" >&2 + exit 1 +fi + # 注入 Master Secret(失败则停,避免空密钥启动) # shellcheck disable=SC1091 source ./scripts/load-jpush-secret.sh