MVP Deployer

轻量级 MVP 项目部署控制面,通过 RESTful API 实现”AI 写完代码 → zip 打包 → POST → 秒级上线 HTTPS”的全自动部署流水线。

概述

MVP Deployer 是由 quokka 设计并部署的极简项目部署系统,抛弃容器化编排复杂性,直接在宿主机上运行业务代码,用 PM2 管理进程、Caddy 动态反代,PostgreSQL 提供数据库。系统通过 RESTful API 接收打包好的 zip 代码包和部署配置,自动完成解压、依赖安装、进程启动和域名绑定。

双环境部署

内网版 (claw-bot)云端版 (Azure China)
主机192.168.31.141163.228.243.161
API 地址https://deploy.nexora.restry.cnhttps://deploy.mvp.restry.cn
泛域名*.nexora.restry.cn*.mvp.restry.cn
外网穿透FRP 经 fw-n2 (40.162.94.187)直接公网
Token/opt/mvp-deployer/.credentials348bd8...0670

技术架构

AI Agent → zip + deploy.json → POST /api/deploy
    ↓
MVP Deployer API (Express, 端口 9800)
    ├── 解压 zip → /opt/mvp-apps/<project>/
    ├── npm install / pip install (按类型)
    ├── PM2 启动进程 (端口自动分配 4000-4999)
    ├── 修改 Caddyfile + docker exec caddy caddy reload
    └── HTTPS 自动签发 (Let's Encrypt)

核心组件

文件作用
server.jsExpress API 主服务(deploy/undeploy/status/logs 4 个端点)
lib/pm2.jsPM2 进程管理封装(启动/重启/停止/日志)
lib/caddy.jsCaddy 配置管理(修改 Caddyfile + reload,上游地址用 172.18.0.1)
lib/deployer.js核心流水线(解压 → 安装依赖 → PM2 启动 → Caddy 绑域名)
public/index.htmlDashboard 暗色主题页面(实时刷新、状态卡片、日志查看器)
scripts/bootstrap.sh轻量适配脚本(只装 PM2 + 部署 deployer)

v1 → v2 关键改进

组件v1 原方案v2 适配后
Caddy 路由管理Admin API (localhost:2019)修改 Caddyfile + docker exec caddy caddy reload
PostgreSQL新建 Docker 容器复用已有容器,创建 mvpadmin 用户
Bootstrap 脚本全量安装轻量适配(只装 PM2 + 部署 deployer)
反代上游地址127.0.0.1172.18.0.1(Docker 网桥)
端口分配手动指定自动分配 4000-4999
基础域名mvp.example.comnexora.restry.cn / mvp.restry.cn

OpenClaw Skill 集成

已安装到 ~/.openclaw/skills/mvp-deployer/,AI Agent 可通过以下方式调用:

/mvp-deploy \
  --project "demo-api" \
  --type "node" \
  --port 3050 \
  --run "node index.js"

Skill 会自动将 Workspace 中的代码打包为 zip,通过预设 Token 调用 Deployer API 完成上线。

已知问题

  • hello-mvp.nexora.restry.cn 有 TLS 证书问题(unrecognized name),可能是 Caddy 配置或 FRP 穿透导致
  • PM2 的 ~/.npm-global/bin 在非交互式 SSH 的 PATH 中不可用,已通过 systemd 环境变量修复
  • Azure China VM 重启后 PM2 startup 可能不生效

相关主题