# memind_adm 部署与重启 管理后台前端(React + Vite)部署到局域网 100 服务器(Tailscale `100.99.38.66`)。 ## 环境概览 | 项 | 默认值 | |---|---| | 部署目标 | `john@100.99.38.66:/Users/john/Project/memind_adm` | | 服务端口 | `5174` | | 运行方式 | `vite preview`(静态资源 + API 反代) | | 后端 API | 本仓库 `server/`(`ADM_API_PORT` 默认 `8085`,与 Memind portal 解耦) | | 日志 | `/Users/john/Project/memind_adm/adm-preview.log` | ## 前置条件 1. 本机可 SSH 到 100 服务器(Tailscale 已连接): ```bash ssh john@100.99.38.66 ``` 2. 本机已安装 Node.js,项目依赖已安装(`npm install`)。 3. 100 服务器上 **memind_adm Admin API** 在 `8085` 运行(`remote_restart.sh` 会自动启动),MySQL 与 Memind 共用。 ## gadm 独立登录 `https://gadm.tkmind.cn` 应部署 **本仓库 memind_adm**,勿再反代到 `Memind/ops` Vite dev(旧版未登录会跳 `localhost:5173`)。 | 项 | 说明 | |---|---| | 登录 | 本页 `/auth/login`,账号来自共用 MySQL | | 会话 | 设置 `H5_PUBLIC_BASE_URL=https://gadm.tkmind.cn`,**不要**设 `H5_COOKIE_DOMAIN=.tkmind.cn` | | 路径 | `https://gadm.tkmind.cn/` 直达超管后台;Plaza 运营在 `/ops`;`/ops/admin` 已废弃 | | API | `ADM_DEV_BACKEND=http://127.0.0.1:8085`(preview 反代目标) | | 初始化 admin | 首次部署后运行 `npm run admin:init`,密码只写入数据库,不放 `.env` | nginx 示例见 `scripts/gadm-nginx.conf.example`(`/ops/` → preview,`/auth` `/admin-api` `/api` → Admin API `8085`)。 ## 更新部署(推荐) 在本机项目根目录执行: ```bash ./scripts/rsync_to_server.sh ``` 脚本会依次: 1. 本地 `npm run build` 生成 `dist/` 2. `rsync` 同步源码到远端(排除 `node_modules`、`.git`、`.env` 等) 3. 单独同步 `dist/` 4. 若远端尚无 `.env`,写入默认配置(**不覆盖已有 `.env`**) 5. 调用 `scripts/remote_restart.sh` 重启服务 ### 常用参数 ```bash # 跳过本地构建(沿用当前 dist/) ./scripts/rsync_to_server.sh --skip-build # 只同步文件,不重启 ./scripts/rsync_to_server.sh --no-restart # 环境变量覆盖 DEPLOY_HOST=john@100.99.38.66 \ REMOTE_DIR=/Users/john/Project/memind_adm \ ADM_PORT=5174 \ ./scripts/rsync_to_server.sh ``` ## 仅重启服务 代码已在远端、无需重新同步时: ```bash ssh john@100.99.38.66 'ADM_ROOT=/Users/john/Project/memind_adm ADM_PORT=5174 bash -s' \ < scripts/remote_restart.sh ``` 或在 100 服务器上直接执行: ```bash cd /Users/john/Project/memind_adm ADM_PORT=5174 ./scripts/remote_restart.sh ``` 重启逻辑:结束占用 `5174` 的进程 → `nohup npm run preview` → 检查首页是否返回 200。 ## 验证 本机通过 SSH 检查: ```bash ssh john@100.99.38.66 'curl -sI http://127.0.0.1:5174/ | head -1' # 期望: HTTP/1.1 200 OK ``` 查看远端日志: ```bash ssh john@100.99.38.66 'tail -f /Users/john/Project/memind_adm/adm-preview.log' ``` ## 远端配置 编辑远端 `.env`(首次部署后路径:`/Users/john/Project/memind_adm/.env`): ```env # preview 反代目标(/auth、/admin-api、/api)— 指向本仓库 Admin API ADM_API_PORT=8085 ADM_DEV_BACKEND=http://127.0.0.1:8085 H5_PUBLIC_BASE_URL=https://gadm.tkmind.cn VITE_BASE_PATH=/ops # 「返回对话」跳转主 H5(可选) VITE_MAIN_APP_URL=https://h5.tkmind.cn ``` 修改 `.env` 后需重启服务生效。 ## 故障排查 | 现象 | 处理 | |---|---| | `无法 SSH 到 john@100.99.38.66` | 确认 Tailscale 在线;必要时 `ssh-copy-id john@100.99.38.66` | | 首页 200 但登录失败 | 检查 100 上 `8085` Admin API 是否运行(`curl http://127.0.0.1:8085/health`) | | 打开后跳 localhost:5173 | nginx 仍指向 Memind/ops dev;改反代到 memind_adm `:5174`,并重新部署 | | `dist 不存在` | 先在本机 `npm run build`,或完整执行 `./scripts/rsync_to_server.sh` | | 启动失败 | 查看 `adm-preview.log`;确认远端 Node 在 PATH 中(需 Homebrew `node@22` 等) | | 端口被占用 | `remote_restart.sh` 会自动 kill 旧进程;仍异常时可手动 `lsof -iTCP:5174 -sTCP:LISTEN` | ## 相关脚本 | 脚本 | 说明 | |---|---| | `scripts/rsync_to_server.sh` | 构建 + rsync + 重启(一键部署) | | `scripts/remote_restart.sh` | 仅在远端重启 `vite preview` | | `scripts/.rsync-exclude-lan` | rsync 排除规则 |