This commit is contained in:
vet
2026-04-20 10:45:06 +07:00
parent d26596addf
commit 868a22e940
8 changed files with 55 additions and 27 deletions

View File

@@ -7,7 +7,7 @@
# 2. 配置 GOPROXY自动测速选最快节点
# 3. 安装 Node.js / npm前端依赖
# 4. 安装 Docker基础设施容器
# 5. 安装 Nginx 并写入 PC/OpenIM 反代(域名 HTTP :80
# 5. 安装 Nginx 并写入 PC/OpenIM 反代(本机 HTTP :80;外部 HTTPS 由 LB/CDN 终止
# 6. 写入 /etc/profile.d/deploy-env.sh永久生效
#
# 用法:
@@ -244,7 +244,7 @@ _install_docker() {
}
# ──────────────────────────────────────────────────────────────────────────────
# 5. Nginx — PC / OpenIM 统一入口HTTP :80
# 5. Nginx — PC / OpenIM 统一入口(本机 HTTP :80
# ──────────────────────────────────────────────────────────────────────────────
_install_pc_nginx_proxy() {
step "安装 Nginx 并配置 OpenIM/PC 反代"
@@ -310,10 +310,10 @@ _install_pc_nginx_proxy() {
systemctl restart nginx
success " Nginx 反代已启用(配置: $conf_src"
info " 请放行 TCP 80curl -sS -H 'Host: ${proxy_domain}' http://127.0.0.1/nginx-health 应返回 ok"
info " HTTP :80 会代理 PC dev server + API + WebSocket"
info " 建议 .env.deploy-test 设置 PC_BACKEND_ORIGIN=http://${proxy_domain}"
info " 浏览器打开 http://${proxy_domain}/"
info " 本机 Nginx 仅监听 TCP 80curl -sS -H 'Host: ${proxy_domain}' http://127.0.0.1/nginx-health 应返回 ok"
info " 外部推荐入口 https://${proxy_domain} 应由 LB/CDN/其它网关终止 HTTPS 后转发到本机 :80"
info " 建议 .env.deploy-test 设置 PC_BACKEND_ORIGIN=https://${proxy_domain}"
info " 浏览器打开 https://${proxy_domain}/"
}
# all 时非 root 则跳过(不中断 Go/Node/Docker

View File

@@ -106,11 +106,11 @@ TENCENT_SDK_SECRET_KEY=cceba44084aaa04f8c48a1858ffd5385875c3a5ec006d34278d9d3714
# ── PC 客户端Vite dev对接的后端公网地址可选───────────────────────────
# 通过域名访问 Nginx 反代sudo ./deploy-test/00-init-tools.sh nginx
# 填写 HTTP 根地址无末尾斜杠Nginx 会将 / 代理到 pc :5173并代理 API/WS。
# 填写 HTTPS 根地址无末尾斜杠Nginx 会将 / 代理到 pc :5173并代理 API/WS。
# ./deploy-test/07-start-frontend.sh 启动 pc 时会 export VITE_*,覆盖 pc/.env无需改 pc 目录
# 若某路径与网关不一致可单独覆盖PC_VITE_API_URL / PC_VITE_WS_URL / PC_VITE_CHAT_URL / PC_VITE_USER_URL
PC_PROXY_DOMAIN=cms-jack.imharry.work
PC_BACKEND_ORIGIN=http://cms-jack.imharry.work
PC_BACKEND_ORIGIN=https://cms-jack.imharry.work
EOF
success ".env.deploy-test 已写入: $ENV_FILE"

View File

@@ -30,8 +30,7 @@ if [[ -f "$ENV_FILE" ]]; then
set +a
fi
DEPLOY_TEST_IP="${DEPLOY_TEST_IP:-127.0.0.1}"
PC_PROXY_DOMAIN="${PC_PROXY_DOMAIN:-cms-jack.imharry.work}"
PC_BACKEND_ORIGIN="${PC_BACKEND_ORIGIN:-http://${PC_PROXY_DOMAIN}}"
normalize_pc_proxy_env
init_script_log # ← 脚本执行日志
@@ -104,6 +103,11 @@ _start_fe() {
# 已在运行
if [[ -f "$pidfile" ]] && kill -0 "$(cat "$pidfile")" 2>/dev/null; then
warn "$name 已在运行 (PID=$(cat "$pidfile")),跳过"
if [[ "$name" == "pc" ]]; then
warn " Vite 环境变量只在启动时读取;若仍请求旧地址,请执行: ./deploy-test/stop-frontend.sh pc && ./deploy-test/07-start-frontend.sh pc"
pc_export_vite_backend_env
pc_print_vite_backend_env
fi
return 0
fi
@@ -200,7 +204,7 @@ if [[ "$TARGET" == "all" ]]; then
echo ""
echo -e "${BOLD}访问地址:${NC}"
echo " PC: ${PC_BACKEND_ORIGIN%/}/ (Nginx HTTP :80 → pc :5173默认 yarn dev:web)"
echo " PC: ${PC_BACKEND_ORIGIN%/}/ (外部 HTTPS → 本机 Nginx :80 → pc :5173默认 yarn dev:web)"
echo " PC 直连调试: http://${DEPLOY_TEST_IP}:5173 (绕过 NginxElectron 用 PC_ELECTRON=1 或 pc 目录内 yarn dev)"
echo " H5: http://${DEPLOY_TEST_IP}:3003"
echo " CMS: http://${DEPLOY_TEST_IP}:8001"

View File

@@ -283,9 +283,9 @@ TENCENT_SDK_SECRET_KEY=xxx
> - `ws` → meetingmsg 弹幕 WebSocket `:8000`
> - `liveApi` → livestream 直播间 API `:8888`
### Nginx 反代(域名 HTTP 入口,供 PC / 浏览器访问后端)
### Nginx 反代(域名 HTTPS 入口,供 PC / 浏览器访问后端)
在**测试服务器**上部署 Nginx通过域名 `cms-jack.imharry.work` HTTP `:80` 统一反代 PC Vite dev server、OpenIM API、chat-api 与 MsgGateway WebSocket;不启用 HTTPS
在**测试服务器**上部署 Nginx本机 Nginx 仅监听 HTTP `:80`统一反代 PC Vite dev server、OpenIM API、chat-api 与 MsgGateway WebSocket。外部访问仍使用 `https://cms-jack.imharry.work`HTTPS 由外层 LB/CDN/其它网关终止后转发到本机 `:80`
| 路径前缀 | 后端 |
|----------|------|
@@ -297,11 +297,11 @@ TENCENT_SDK_SECRET_KEY=xxx
1. 服务器上已执行 `05-start.sh` 等,保证 `10001/10002/10008` 在监听。
2. 域名 `cms-jack.imharry.work` 已解析到测试服务器公网 IP。
3. 仓库根目录执行:`sudo ./deploy-test/00-init-tools.sh nginx`(会安装 `nginx`,并写入配置 `deploy-test/nginx/openim-pc-proxy.conf`;亦已包含在 `00-init-tools.sh` 无参的 **all** 流程末尾,需 root
4. 安全组放行 **TCP 80**
5. `.env.deploy-test` 中设置 **`PC_BACKEND_ORIGIN=http://cms-jack.imharry.work`**(无末尾 `/`);再 `./deploy-test/07-start-frontend.sh pc` 启动 PC 时即注入 `VITE_*`
6. 浏览器打开 **`http://cms-jack.imharry.work/`**。
4. 测试服务器本机/安全组放行 **TCP 80**;外层 LB/CDN/网关对公网提供 HTTPS `443` 并转发到本机 `80`
5. `.env.deploy-test` 中设置 **`PC_BACKEND_ORIGIN=https://cms-jack.imharry.work`**(无末尾 `/`);再 `./deploy-test/07-start-frontend.sh pc` 启动 PC 时即注入 `VITE_*`
6. 浏览器打开 **`https://cms-jack.imharry.work/`**。
**域名访问**:本配置中 `openim-pc-proxy` 使用 `server_name cms-jack.imharry.work`监听 `80``GET /` 直接代理 PC Vite。`00-init-tools.sh nginx` 会禁用 `sites-enabled/default`,并尝试去掉 `sites-available/default` 里的 `default_server`,避免默认站点抢占 `:80`。若机上还有其它站点也写了 `default_server``nginx -t` 会报错,需在该站点配置中删除 `default_server`(保留 `listen 80;` 即可)。
**域名访问**:本配置中 `openim-pc-proxy` 使用 `server_name cms-jack.imharry.work`监听本机 `80`推荐外部 `GET /` `https://cms-jack.imharry.work/`,由外层 HTTPS 入口转发到本机 `80`代理 PC Vite。`00-init-tools.sh nginx` 会禁用 `sites-enabled/default`,并尝试去掉 `sites-available/default` 里的 `default_server`,避免默认站点抢占 `:80`。若机上还有其它站点也写了 `default_server``nginx -t` 会报错,需在该站点配置中删除 `default_server`(保留 `listen 80;` 即可)。
### Docker 基础设施

View File

@@ -226,9 +226,32 @@ print_svc_status() {
# ── 所有后端服务名列表 ──────────────────────────────────────────────────────────
ALL_SVCS=(openim-server chat-rpc admin-rpc chat-api admin-api meetingmsg livecloud livestream build-server)
# ── PC 反代入口环境归一化 ───────────────────────────────────────────────────────
normalize_pc_proxy_env() {
PC_PROXY_DOMAIN="${PC_PROXY_DOMAIN:-cms-jack.imharry.work}"
local default_origin="https://${PC_PROXY_DOMAIN}"
local origin="${PC_BACKEND_ORIGIN:-}"
origin="${origin%/}"
if [[ -z "$origin" ]]; then
PC_BACKEND_ORIGIN="$default_origin"
elif [[ -n "${DEPLOY_TEST_IP:-}" ]] && [[ "$origin" =~ ^https?://${DEPLOY_TEST_IP}(:[0-9]+)?$ ]]; then
warn " 检测到旧 PC_BACKEND_ORIGIN=${origin},已切换为 ${default_origin}"
PC_BACKEND_ORIGIN="$default_origin"
elif [[ "$origin" == "http://${PC_PROXY_DOMAIN}" ]]; then
warn " 检测到 HTTP PC_BACKEND_ORIGIN=${origin},已切换为 ${default_origin}"
PC_BACKEND_ORIGIN="$default_origin"
else
PC_BACKEND_ORIGIN="$origin"
fi
export PC_PROXY_DOMAIN PC_BACKEND_ORIGIN
}
# ── PC 前端 Vite 环境(不写 pc 目录,由 07-start-frontend 在子 shell 内 export────────
# 依赖 .env.deploy-test / .env.deploy-local 中的 PC_BACKEND_ORIGIN及可选 PC_VITE_*
pc_export_vite_backend_env() {
normalize_pc_proxy_env
local o="${PC_BACKEND_ORIGIN:-}"
o="${o%/}"
[[ -z "$o" ]] && return 0
@@ -262,7 +285,7 @@ pc_print_vite_backend_env() {
info " VITE_ADMIN_URL=${VITE_ADMIN_URL:-${PC_VITE_ADMIN_URL:-<empty>}}"
if [[ "$PC_BACKEND_ORIGIN" == http://* ]] && [[ "$PC_BACKEND_ORIGIN" != http://127.0.0.1* ]] && [[ "$PC_BACKEND_ORIGIN" != http://localhost* ]]; then
info " PC 使用 HTTP 公网入口: ${PC_BACKEND_ORIGIN}"
warn " PC_BACKEND_ORIGIN 当前是 HTTP: ${PC_BACKEND_ORIGIN};推荐使用 https://${VITE_BASE_DOMAIN}"
fi
}
@@ -283,7 +306,7 @@ pc_check_nginx_gateway() {
success " Nginx 网关可达: ${o}/nginx-health"
else
warn " Nginx 网关不可达: ${o}/nginx-health"
warn " PC WebSocket 默认连 ${VITE_WS_URL:-ws://<host>/msg_gateway};请确认已执行 sudo ./deploy-test/00-init-tools.sh nginx并放行 TCP 80"
warn " PC WebSocket 默认连 ${VITE_WS_URL:-wss://<host>/msg_gateway};请确认已执行 sudo ./deploy-test/00-init-tools.sh nginx本机 Nginx 放行 TCP 80外层 HTTPS 入口放行 TCP 443"
fi
pc_probe_msg_gateway "$o"

View File

@@ -10,7 +10,8 @@
# 返回 Access-Control-Allow-Origin: *。若在此再用 add_header 追加 $http_origin浏览器会收到
# 「*, http://IP:5173」两个值并报错。故本配置不在 Nginx 层添加 CORS预检 OPTIONS 也交给上游处理。
#
# 访问入口http://cms-jack.imharry.work/
# 推荐外部访问入口https://cms-jack.imharry.work/
# 本 Nginx 仅监听 HTTP :80HTTPS 由外层 LB/CDN/网关终止后转发到本机 :80。
map $http_upgrade $connection_upgrade {
default upgrade;

View File

@@ -212,7 +212,7 @@ cat <<'EOF'
userID = userID || await window.__deployTestReadLocalForage("IM_USERID");
token = token || await window.__deployTestReadLocalForage("IM_TOKEN");
const operationID = `deploy-test-${Date.now()}`;
const gatewayOrigin = window.location.protocol === "https:" ? window.location.origin : "http://54.116.29.247";
const gatewayOrigin = window.location.origin || "https://cms-jack.imharry.work";
const config = {
platformID: 5,
apiAddr: apiAddr || `${gatewayOrigin}/api/im`,
@@ -297,8 +297,8 @@ await window.__deployTestResetBrowserStorage()
await window.__deployTestManualInitDB()
清理后按这个顺序重测:
1. 关闭其它 http://cms-jack.imharry.work/ / http://54.116.29.247:5173 标签页
2. 打开 http://cms-jack.imharry.work/ 并刷新页面
1. 关闭其它 https://cms-jack.imharry.work/ / http://54.116.29.247:5173 标签页
2. 打开 https://cms-jack.imharry.work/ 并刷新页面
3. 重新粘贴本脚本输出的整段 JS刷新会清掉已安装的 probe
4. 再登录
5. 观察 counts 是否从 0 变 1以及 /var/log/nginx/openim-pc-proxy-access.log 是否出现 /msg_gateway
@@ -307,5 +307,5 @@ await window.__deployTestManualInitDB()
await window.__deployTestAuthState()
HTTP 域名入口下 isSecureContext / crossOriginIsolated 通常为 false重点观察 SDK 方法是否存在、login 是否返回成功,以及 /msg_gateway 是否建立连接。
HTTPS 域名入口下 isSecureContext / crossOriginIsolated 应为 trueSharedArrayBuffer 应为 "function";同时观察 SDK 方法是否存在、login 是否返回成功,以及 /msg_gateway 是否建立连接。
EOF

View File

@@ -15,8 +15,8 @@ if [[ -f "$ENV_FILE" ]]; then
source "$ENV_FILE"
set +a
fi
PC_PROXY_DOMAIN="${PC_PROXY_DOMAIN:-cms-jack.imharry.work}"
PC_BACKEND_ORIGIN="${PC_BACKEND_ORIGIN:-http://${PC_PROXY_DOMAIN}}"
DEPLOY_TEST_IP="${DEPLOY_TEST_IP:-127.0.0.1}"
normalize_pc_proxy_env
header "服务运行状态"
@@ -76,7 +76,7 @@ if command -v curl &>/dev/null && [[ -n "${PC_BACKEND_ORIGIN:-}" ]]; then
echo " PC Chat API: ${PC_VITE_CHAT_URL:-${PC_BACKEND_ORIGIN}/api/chat}"
echo " PC Admin API: ${PC_VITE_ADMIN_URL:-${PC_BACKEND_ORIGIN}/api/admin}"
echo " PC WebSocket: ${PC_VITE_WS_URL:-$default_ws_url}"
echo " PC 页面入口: ${PC_BACKEND_ORIGIN}/ (Nginx HTTP :80 → pc :5173)"
echo " PC 页面入口: ${PC_BACKEND_ORIGIN}/ (外部 HTTPS → 本机 Nginx :80 → pc :5173)"
echo " Nginx 日志: /var/log/nginx/openim-pc-proxy-access.log"
pc_probe_msg_gateway "$PC_BACKEND_ORIGIN"
else