Files
memind/docs/plaza-local.md
T
john d3239ff292 fix: MindSpace remote sync, thumbnail fallback, and Plaza URL guards
Ensure page sync runs via pageSyncService in remote mode, fall back to
workspace HTML when storage assets are missing, and prevent production
Portal from linking to loopback Plaza URLs baked in at build time.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-07-05 07:57:04 +08:00

4.3 KiB
Raw Blame History

Plaza 本机为主

105 服务器已停用。Plaza 与 Memind H5 均在本机 Mac 运行;公网 plaza.tkmind.cnCloudflare Tunnel 回源到本机。

架构

浏览器 / 微信
    ↓
Cloudflareplaza.tkmind.cn
    ↓  Cloudflare Tunnel
本机 Mac
    ├─ :3001  Plaza Next.js/plaza、/_next
    │         └─ rewrites → :8081/api、/auth、/u
    └─ :8081  Memind Portalserver.mjs

Next.js 通过 PLAZA_API_PROXY 把 API 请求转发到 Portal,无需单独 nginx。

首次配置(一次性)

# 1. 本地 DNS(覆盖 Tailscale / Clash fake-ip
sudo pnpm setup:plaza-dns

# 2. 本地 HTTPS 证书(可选,供本机 https://plaza.tkmind.cn
sudo pnpm setup:plaza-local

# 3. 公网隧道(plaza.tkmind.cn → 本机 :3001
pnpm setup:plaza-tunnel

日常启动

# 本机正式模式(next build + start,供 Tunnel 回源,推荐公网)
pnpm start:plaza

# 开发模式(热更新,仅本地调试)
pnpm dev:plaza

# 另开终端:本机 HTTPS 入口(可选,纯本地 HTTPS 时用)
sudo pnpm dev:plaza-proxy

# 或全栈(MindSpace + Plaza + Ops
pnpm dev

访问方式

场景 地址
本机直连 http://127.0.0.1:3001/plaza
本机域名(需 proxy https://plaza.tkmind.cn/plaza
浏览器强制本地 pnpm open:plaza
公网(需 dev:plaza + 隧道) https://plaza.tkmind.cn/plaza

浏览器提示「连接不是私密连接」?

本机曾用 setup:plaza-dns 把域名指到 127.0.0.1,HTTPS 走自签证书。若已配置 Cloudflare Tunnel,应 去掉本地劫持,走公网证书(仍回源本机):

sudo pnpm setup:plaza-dns:remove

然后刷新 https://plaza.tkmind.cn/ 即可。

浏览器打不开?

Chrome / Cursor 内置浏览器默认走 Secure DNS,会绕过 /etc/hosts 连到 Cloudflare105 停服时显示 502)。

解决:

  1. pnpm open:plaza(推荐)
  2. 关闭浏览器「安全 DNS / Secure DNS」
  3. pnpm check:plaza 查看诊断

公网 Tunnel

隧道配置写在 ollama-tkmind 的 cloudflared config(默认 ~/Project/ollama/cloudflare/config.yml)。

pnpm setup:plaza-tunnel    # 写入 ingress + DNS 路由 + 重启 cloudflared

前提: pnpm start:plaza(或 pnpm dev:plaza)已在跑(:3001 可访问)。Mac 休眠或服务停掉时,外网会 502/503。

自定义:

CLOUDFLARE_TUNNEL_CONFIG=/path/to/config.yml \
CLOUDFLARE_TUNNEL_NAME=ollama-tkmind \
PLAZA_TUNNEL_PORT=3001 \
pnpm setup:plaza-tunnel

环境变量

.env.example 中 Plaza 相关注释。常用:

变量 默认 说明
PLAZA_PORT 3001 Plaza Next.js 端口
H5_PORT 8081 Portal / API 端口
PLAZA_LOCAL_HOST plaza.tkmind.cn 本地域名
PLAZA_PUBLIC_BASE https://plaza.tkmind.cn 公开 URL 前缀
VITE_PLAZA_BASE (见下) Portal 前端「逛 Plaza」链接;编译期写入 dist

Portal「逛 Plaza」链接(MindSpace / 发布成功页)

Plaza 是独立域名 plaza.tkmind.cn,与 Portal m.tkmind.cn 不同。前端通过 src/utils/publicUrl.tspublic-site-bases.mjs 解析:

环境 期望链接
本机 127.0.0.1 / localhost http://127.0.0.1:3001/plaza
生产 m.tkmind.cn https://plaza.tkmind.cn/plaza

为何生产曾出现 127 VITE_*vite build 时写入 bundle。若本机 .envVITE_PLAZA_BASE=http://127.0.0.1:3001,未覆盖就直接打生产包,会把 127 带进 m.tkmind.cn

彻底修复(三层):

  1. 运行时守卫:在 m.tkmind.cn 等公网 host 上,即使 bundle 内是 loopback,也强制用 https://plaza.tkmind.cn(见 public-site-bases.mjs)。
  2. 构建默认值scripts/build-portal-runtime.mjs 在未显式设置时注入 VITE_PLAZA_BASE=https://plaza.tkmind.cn
  3. 勿在生产构建用本地 .env:发 Portal runtime 前确认 npm run build / build-portal-runtime.mjs 未读取带 127 的 VITE_PLAZA_BASE

验证:

node --test public-site-bases.test.mjs

已弃用

  • pnpm deploy:105pnpm deploy:plaza-105 — 105 不再作为主服务
  • 105 上 nginx / goose-h5 / goose-plaza-web — 已停服,公网不再回源 105