ai-chatbot/docs/pascal-production-deployment.md

112 lines
3.9 KiB
Markdown
Raw 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.

# Pascal Editor 可复用生产部署
本项目把 Pascal Editor 作为独立 Bun/Next.js 服务运行,并通过主站 Nginx
同域挂载。部署脚本会复用主站登录态、系统设置中显式标记的“多模态模型”和主站
Git 仓库里的 `pascal-editor-ai-agent` 独立分支。
## 默认结构
| 项目 | 默认值 |
| --- | --- |
| 主站目录 | 当前仓库目录 |
| 主站 PM2 服务 | `ai-chatbot` |
| 主站内部地址 | `http://127.0.0.1:3125` |
| Pascal 源码 | `/opt/pascal-editor` |
| Pascal 数据 | `/var/lib/pascal-editor` |
| Pascal PM2 服务 | `pascal-editor` |
| Pascal 监听 | `127.0.0.1:3002` |
| 同域路径 | `/pascal-service` |
| Pascal Git 分支 | `pascal-editor-ai-agent` |
Pascal 端口不对公网开放。Nginx 会先通过主站
`/api/internal/pascal/access` 校验登录 Cookie,再把可信用户 ID 注入 Pascal。
场景的创建、列表、读取、保存、删除、事件流和 AI Agent 都检查同一个
`ownerId`。
## 首次部署
在目标服务器先部署好主站并确认主站 Git remote 能读取
`pascal-editor-ai-agent` 分支,然后执行:
```bash
cd /var/www/ai-chatbot
git pull --ff-only origin main
sudo env \
PASCAL_PUBLIC_ORIGIN=https://example.com \
NGINX_SITE_CONFIG=/etc/nginx/sites-enabled/example.com.conf \
pnpm pascal:deploy
```
脚本会按顺序:
1. 生成或复用 `PASCAL_PROXY_SECRET`,写入主站 `.env.local`。
2. 构建并重启主站。
3. 安装固定版本 Bun(默认 `1.3.0`)。
4. 克隆或快进 Pascal 独立分支。
5. 写入仅 root 可读的 Pascal 生产环境文件。
6. 安装依赖、构建 Pascal,并注册 PM2 服务。
7. 渲染 Nginx 片段、执行 `nginx -t`,成功后热重载。
8. 检查主站、Pascal、Agent 状态和主站模型网关。
主站环境文件和 Nginx 配置会备份到 `/var/backups/pascal-deploy`。Nginx
校验失败时,脚本会立即恢复执行前的配置。
## 日常更新
主站和 Pascal 分支有新提交后,重复执行同一个命令即可。脚本只允许 Git
快进更新;如果 `/opt/pascal-editor` 有本地修改,会停止部署,不会覆盖现场
文件。
只做无模型费用的健康检查:
```bash
sudo env \
PASCAL_PUBLIC_ORIGIN=https://example.com \
pnpm pascal:check
```
执行一次真实自然语言建模、验证节点已落库并自动删除临时场景:
```bash
sudo env PASCAL_SMOKE_CONFIRM=1 pnpm pascal:smoke
```
真实冒烟会调用当前系统设置中显式标记的“多模态模型”,因此默认不会在一键部署时
执行。需要每次部署自动执行时设置 `RUN_AGENT_SMOKE_TEST=true`。
## 常用覆盖项
| 环境变量 | 用途 |
| --- | --- |
| `MAIN_APP_DIR` | 主站源码目录 |
| `MAIN_ENV_FILE` | 主站环境文件 |
| `MAIN_PM2_NAME` | 主站 PM2 服务名 |
| `MAIN_INTERNAL_URL` | Pascal 调用主站网关的地址 |
| `MAIN_NGINX_UPSTREAM` | Nginx 主站 upstream,例如 `127.0.0.1:3125` |
| `BUILD_MAIN_APP=false` | 跳过主站安装、构建和重启 |
| `PASCAL_INSTALL_DIR` | Pascal 源码目录 |
| `PASCAL_DATA_DIR` | SQLite 数据目录 |
| `PASCAL_GIT_REPO` | Pascal 分支所在 Git 仓库;默认使用主站 origin |
| `PASCAL_GIT_REF` | Pascal 分支或标签 |
| `PASCAL_PORT` | Pascal 本地监听端口 |
| `PASCAL_BASE_PATH` | 同域挂载路径 |
| `PASCAL_PUBLIC_ORIGIN` | 公网主站 Origin,不带末尾斜杠 |
| `NGINX_SITE_CONFIG` | 需要加入 Pascal include 的 HTTPS server 配置 |
| `INSTALL_NGINX=false` | 仅部署服务,不修改 Nginx |
| `PASCAL_BUN_VERSION` | 固定 Bun 版本 |
| `PASCAL_BACKUP_DIR` | 环境与 Nginx 配置备份目录 |
## 运行维护
```bash
pm2 status
pm2 logs pascal-editor --lines 100
curl http://127.0.0.1:3002/pascal-service/api/health
nginx -t
```
升级时不要把主站源码复制到 Pascal 目录,也不要把本地测试数据库上传到
服务器。主站始终更新 `main`,Pascal 始终更新独立分支,用户场景只保存在
`PASCAL_DATA_DIR`。