fix(deploy): 公网 overlay 用 !override 覆盖内部端口绑定

Compose 合并后内部端口只绑 127.0.0.1,避免与基础 0.0.0.0 叠加导致起不来。
顺带给 JPUSH_PUSH_INTENT 加引号,并拒绝空 SERVER_IP。

Co-authored-by: Cursor <cursoragent@cursor.com>
Co-authored-by: multica-agent <github@multica.ai>
This commit is contained in:
编码工程师
2026-08-30 21:55:33 +08:00
co-authored by Cursor multica-agent
parent f1fe4a3928
commit a71f6a0ce1
6 changed files with 26 additions and 9 deletions
+2 -1
View File
@@ -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"
+2 -1
View File
@@ -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。
+9 -6
View File
@@ -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/. 加载 .envJPUSH_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:
+2 -1
View File
@@ -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` 非空。
## 还没安排
+1
View File
@@ -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`
## 已有验证记录
+10
View File
@@ -10,6 +10,16 @@ if [ ! -f .env ]; then
exit 1
fi
# LiveKit --node-ip 依赖 SERVER_IP;空值时信令通、媒体宣告错误。
# 不 source .envJPUSH_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