深色模式
一键部署
把本地项目或源码一键发布到服务器:构建 → 打包 / 打镜像 → 上传 → 原子发布 → 健康检查 → 失败自动回滚。部署方式不写死在代码里,而是数据驱动的「配方(recipe)」,加一种部署方式只要加个配方文件,零改代码。
进入
主界面左侧导航 → 部署。
页面分三块:部署组(多端编排)、部署目标(一个个发布实例)、配方库(部署方式模板)。
三层模型
配方 Recipe —— 部署方式模板(构建/发布/健康检查各阶段填什么命令),三级来源,加文件即扩展
↓ 引用 + 变量注入
目标 Target —— 一个发布实例 = [配方 + 服务器 + 变量 + 发布策略]
↓ 交给
执行引擎 —— 不变的骨架:preflight→构建→打包→上传→原子发布→健康检查→回滚- 「一个项目多种部署方式」 = 同一项目下多个目标,各引不同配方
- 「每种项目不一样」 = 不同配方
- 「易扩展」 = 加配方文件即可,AI 也能读
配方库
内置 6 个配方覆盖主流场景,配方可在用户级 / 项目级扩展或覆盖:
| 配方 | 覆盖 | 重启方式 |
|---|---|---|
static-nginx | 前端静态站 | nginx -s reload |
node-pm2 | Node 后端 | pm2 reload |
systemd-binary | Java jar / Go / 二进制 | systemctl restart |
docker-compose | Docker Compose | docker compose up -d |
1panel-app | 1Panel 托管应用 | 面板 / 约定 |
custom-script | 兜底万能:各阶段纯自定义命令 | 自定义 |
点配方卡片可查看原文。配方是 Markdown + frontmatter(与技能同构),正文里用 bash {#stage:release on:target} 这种代码块标记每个阶段在哪跑什么。
配方里不许有凭据
配方 / 目标里禁止任何凭据字段,server 永远只用别名(同技能安全扫描)。deployRoot 过敏感路径黑名单,防止 cleanup 旧版本变成 rm -rf /。
新建部署目标
新建目标 打开编辑器:选配方 → 选服务器 → 按配方变量填表单 → 选构建方式。
构建方式(buildSource)
| 值 | 含义 |
|---|---|
| artifact | 用本地已构建好的产物(dist / CI 产物),本地打 tar.gz 上传——默认,最安全 |
| image | 本地 docker build 出镜像,docker save 传到远端 docker load |
| server | 上传源码 / git pull,在服务器上构建(Tauri-Rust 等需目标平台编译走这) |
| none | 无需构建(拉远程镜像 / 纯配置发布) |
artifact / image 模式可填本机工作目录和构建命令(如 pnpm install / pnpm build:prod),并支持「内容未变跳过构建」开关。
发布策略:软链原子切换
artifact 模式用 symlink 原子发布,回滚 = 软链指回上一版:
{{deployRoot}}/
├── releases/20260611-1430/ ← 本次解压目标
├── releases/20260610-0900/ ← 上一版(保留 keepReleases 份)
├── current -> releases/20260611-1430 ← ln -sfn 原子切换
└── shared/ (.env / logs / uploads 不随版本走)- keepReleases:保留几份旧版本(默认 5,超出自动清理)
- shared:跨版本共享的文件 / 目录(
.env、logs、uploads),软链进每个 release - 自动回滚:健康检查失败时自动软链回上一版 + 重启
Compose 机密自动生成
image / none 后端模式可开「compose 机密」:
- compose 模板里写
__DB_PASSWORD__/__JWT_SECRET_KEY__这种占位 - 列出要自动生成的机密名
- 部署时 Reeve 后端生成强随机值替换占位,写进服务器 compose,明文你和 AI 都看不到
共享 MySQL 自动建库建账号
部署后端时常要一个数据库。编辑器里可选数据库托管模式:
| 模式 | 行为 |
|---|---|
| 不托管 | 自己管 |
| 新建库 + 账号 | 选一个有建库权限的 MySQL 管理员凭据,Reeve 首次部署时自动建库 + 建应用账号(强随机密码入凭据库) |
| 用已有库 | 选一个已有的应用凭据 |
还能挂多个初始化 SQL 文件,首次部署时导入。
域名与 HTTPS
任意模式都能填域名(可选 HTTPS)。非空时部署后跑配方的 domain 阶段,自动配反代 + 签发证书,与网站与证书打通。
执行部署
目标卡片上:
- 部署:开跑。执行进度走全局任务系统,可最小化到右下角 dock,跨切页存活
- 预览(dry-run):只渲染各阶段会执行的命令,不真跑——先看清楚再决定
- 执行抽屉里每个阶段是编号步骤(待执行 → 进行中 → 成功 / 失败),带实时滚动日志
Docker 镜像版本化 + 历史 + 回退
image 模式支持版本化部署(新功能):
- 每次部署给镜像打唯一不可变 tag(时间戳
20260611-1430预填可改,或手填1.2.3),不再覆盖latest - 服务器 compose 的 image 行每次部署 / 回退被精准补丁成目标版本,再
compose up -d --force-recreate - 本地 SQLite 记部署历史台账(版本 / 大小 / 服务器 / 状态 / 是否当前生效)
- 旧镜像默认保留 5 个(可配),当前生效的永不删
版本化目标的卡片多一个 历史 按钮,打开历史抽屉:
- 看历次部署的版本列表
- 一键回退:选旧版本,Reeve 先
docker image inspect对账,镜像还在就改 tag +compose up切过去;镜像已被清理则明确提示不可回退、引导重新构建
回退只走人用 UI
部署历史 AI 只能只读查询(list_deploy_history 工具);回退动作只能在 Reeve 界面点,AI 不能触发。
部署组(多端一键发)
monorepo 项目常要「有时只发后端、有时全发、有时不要移动端」。部署组把多个目标绑成一组:
- 组里每个端一个复选框,勾选要发的端 → 一键串行部署
- 端顺序 = 组内顺序(编辑器里可上下移动)
- 失败即停 开关:任一端失败是否停后续端
- 整组也能 dry-run 预览(按端分组展示每端每步命令)
- 执行抽屉每端一个折叠面板,独立时间线
这次只发后端、下次全发互不影响——运行时勾选不改存盘默认。
安全模型:人用通道
部署是用户主动触发的动作,不是 AI。所以走人用通道:
- 跳过:AI 全局布防、每服务器 AI 档位、sudo 强制审批、授权过期闸(这些是约束 AI 的,不该挡用户本人)
- 保留:致命危险命令黑名单(防 deployRoot 配错变
rm -rf /)+ 全程审计 + 输出脱敏(密码不外泄)
凭据明文前端与 AI 都拿不到(沿用全局安全红线)。AI 经 MCP 触发部署属于未来能力,届时走完整 AI 策略 + 默认审批。