#!/bin/sh
|
# cx-web 启动时把部署环境的地址写进前端运行时配置 _app.config.js(nginx 官方镜像按文件名顺序
|
# 执行 /docker-entrypoint.d/*.sh,本脚本排在 20-envsubst 之后、nginx 启动之前)。
|
#
|
# 为什么:OnlyOffice 地址原先是前端编译期写死(VITE_GLOB_ONLYOFFICE_URL),每台构建机都得有
|
# gitignored 的 .env.production.local,漏了就发出空地址(2026-09-23 实踩)。改为运行时注入后,
|
# 同一份前端产物可用于任何环境,换地址只改服务器 .env 的 ONLYOFFICE_DS_PUBLIC_URL。
|
# 前端读取侧:loadDocsApi.ts 的 getDocumentServerUrl() 优先读 window._JNPF_ADMIN_PRO_APP_CONF_。
|
#
|
# 未设该变量 = 不改 _app.config.js(保持构建期的值),与改造前行为一致。
|
set -eu
|
|
CONF=/usr/share/nginx/html/_app.config.js
|
KEY=VITE_GLOB_ONLYOFFICE_URL
|
VALUE="${ONLYOFFICE_DS_PUBLIC_URL:-}"
|
|
[ -n "$VALUE" ] || { echo "40-runtime-app-config: ONLYOFFICE_DS_PUBLIC_URL 未设置,保留构建期配置"; exit 0; }
|
[ -f "$CONF" ] || { echo "40-runtime-app-config: 缺 $CONF,跳过"; exit 0; }
|
|
if ! grep -q "\"$KEY\":\"" "$CONF"; then
|
# 前端过旧(_app.config.js 里没有该键):不硬塞,提示后照常启动
|
echo "40-runtime-app-config: ⚠️ $CONF 中没有 $KEY,前端版本过旧,未注入"
|
exit 0
|
fi
|
|
# sed 替换串里转义 | & \ 三个特殊字符
|
ESCAPED=$(printf '%s' "$VALUE" | sed 's/[|&\\]/\\&/g')
|
sed -i "s|\"$KEY\":\"[^\"]*\"|\"$KEY\":\"$ESCAPED\"|" "$CONF"
|
grep -qF "\"$KEY\":\"$VALUE\"" "$CONF" || { echo "40-runtime-app-config: ❌ 写入校验失败" >&2; exit 1; }
|
echo "40-runtime-app-config: $KEY=$VALUE"
|