Files
memind_adm/docs/DEPLOY.md
2026-06-20 16:52:13 +08:00

138 lines
4.4 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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 排除规则 |