From 8d3b8bdc23e2e43cace2c0e4ac35eac9eaea1e17 Mon Sep 17 00:00:00 2001 From: vet Date: Mon, 20 Apr 2026 12:30:26 +0700 Subject: [PATCH] test --- 00-init-tools.sh | 29 +++++++++++++++++++++++++++++ README.md | 3 +++ nginx/openim-pc-proxy.conf | 38 ++++++++++++++++++++++++++++++++++++++ 3 files changed, 70 insertions(+) diff --git a/00-init-tools.sh b/00-init-tools.sh index 39ea8a0..3a4696a 100755 --- a/00-init-tools.sh +++ b/00-init-tools.sh @@ -259,6 +259,9 @@ _install_pc_nginx_proxy() { local conf_src="${script_dir}/nginx/openim-pc-proxy.conf" local conf_name="openim-pc-proxy.conf" local proxy_domain="${PC_PROXY_DOMAIN:-cms-jack.imharry.work}" + local repo_root + repo_root="$(cd "${script_dir}/.." && pwd)" + local sdk_static_dir="/var/www/openim-pc-sdk" if [[ -f "$ENV_FILE" ]]; then # shellcheck source=/dev/null @@ -271,6 +274,32 @@ _install_pc_nginx_proxy() { return 1 fi + info " 准备 OpenIM WASM SDK 静态资源: ${sdk_static_dir}" + mkdir -p "$sdk_static_dir" + local sdk_lib_dir="${repo_root}/pc/node_modules/@openim/wasm-client-sdk/lib" + local sdk_assets_dir="${repo_root}/pc/node_modules/@openim/wasm-client-sdk/assets" + local pc_public_dir="${repo_root}/pc/public" + local asset src + for asset in worker.js worker-legacy.js; do + src="${sdk_lib_dir}/${asset}" + if [[ -s "$src" ]]; then + install -m 0644 "$src" "${sdk_static_dir}/${asset}" + success " 已安装 SDK worker: ${sdk_static_dir}/${asset}" + else + warn " 缺少 SDK worker: $src(请先执行 ./deploy-test/06-install-frontend.sh pc)" + fi + done + for asset in openIM.wasm sql-wasm.wasm wasm_exec.js; do + src="${pc_public_dir}/${asset}" + [[ -s "$src" ]] || src="${sdk_assets_dir}/${asset}" + if [[ -s "$src" ]]; then + install -m 0644 "$src" "${sdk_static_dir}/${asset}" + success " 已安装 SDK 资源: ${sdk_static_dir}/${asset}" + else + warn " 缺少 SDK 资源: ${asset}(请先执行 ./deploy-test/06-install-frontend.sh pc && ./deploy-test/07-start-frontend.sh pc)" + fi + done + if ! _has nginx; then if _has apt-get; then apt-get update -y diff --git a/README.md b/README.md index 2b04d5f..cff92bf 100644 --- a/README.md +++ b/README.md @@ -314,6 +314,7 @@ TENCENT_SDK_SECRET_KEY=xxx | `/api/im/` | `127.0.0.1:10002` | | `/api/user/`、`/api/chat/` | `127.0.0.1:10008` | | `/msg_gateway` | `127.0.0.1:10001`(WebSocket) | +| `/openIM.wasm`、`/sql-wasm.wasm`、`/wasm_exec.js`、`/node_modules/@openim/wasm-client-sdk/lib/worker*.js` | `/var/www/openim-pc-sdk`(OpenIM WASM SDK 静态资源) | | `/` | `127.0.0.1:5173`(PC Vite dev server) | 1. 服务器上已执行 `05-start.sh` 等,保证 `10001/10002/10008` 在监听。 @@ -325,6 +326,8 @@ TENCENT_SDK_SECRET_KEY=xxx **域名访问**:本配置中 `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;` 即可)。 +**PC WASM SDK 资源**:`00-init-tools.sh nginx` 会把 `pc/node_modules/@openim/wasm-client-sdk/lib/worker.js`、`worker-legacy.js` 以及 `openIM.wasm`、`sql-wasm.wasm`、`wasm_exec.js` 复制到 `/var/www/openim-pc-sdk`,并由 Nginx 直接返回这些文件。这样可以绕开 PC Vite dev server 里用于规避 MIME 报错的 `worker.js` placeholder,避免浏览器端 OpenIM SDK 卡在 worker 初始化阶段,导致不发起 `/api/im` 和 `/msg_gateway` 请求。更新 `pc` 依赖或 SDK 后,请重新执行 `sudo ./deploy-test/00-init-tools.sh nginx` 同步静态资源。 + ### Docker 基础设施 | 服务 | 端口 | diff --git a/nginx/openim-pc-proxy.conf b/nginx/openim-pc-proxy.conf index e8b75fa..29a1f0d 100644 --- a/nginx/openim-pc-proxy.conf +++ b/nginx/openim-pc-proxy.conf @@ -110,6 +110,44 @@ server { return 200 "ok\n"; } + # OpenIM WASM SDK 关键资源。 + # Vite dev server 中有 worker.js placeholder 中间件,会导致 SDK worker 启动失败; + # 这里直接由 Nginx 从稳定目录提供真实文件,绕过 Vite。 + location = /openIM.wasm { + alias /var/www/openim-pc-sdk/openIM.wasm; + default_type application/wasm; + add_header Cross-Origin-Opener-Policy "same-origin" always; + add_header Cross-Origin-Embedder-Policy "credentialless" always; + } + + location = /sql-wasm.wasm { + alias /var/www/openim-pc-sdk/sql-wasm.wasm; + default_type application/wasm; + add_header Cross-Origin-Opener-Policy "same-origin" always; + add_header Cross-Origin-Embedder-Policy "credentialless" always; + } + + location = /wasm_exec.js { + alias /var/www/openim-pc-sdk/wasm_exec.js; + default_type application/javascript; + add_header Cross-Origin-Opener-Policy "same-origin" always; + add_header Cross-Origin-Embedder-Policy "credentialless" always; + } + + location = /node_modules/@openim/wasm-client-sdk/lib/worker.js { + alias /var/www/openim-pc-sdk/worker.js; + default_type application/javascript; + add_header Cross-Origin-Opener-Policy "same-origin" always; + add_header Cross-Origin-Embedder-Policy "credentialless" always; + } + + location = /node_modules/@openim/wasm-client-sdk/lib/worker-legacy.js { + alias /var/www/openim-pc-sdk/worker-legacy.js; + default_type application/javascript; + add_header Cross-Origin-Opener-Policy "same-origin" always; + add_header Cross-Origin-Embedder-Policy "credentialless" always; + } + # PC Vite dev server. location / { proxy_pass http://127.0.0.1:5173;