- Fix command injection in exec.sh (env -> env.environ)]) - Fix token injection in register.sh (NEW_TOKEN/AGENT -> os.environ)]) - Remove hardcoded credentials from init-config.sh (env env vars)) - Add license: MIT to SKILL.md frontmatter - Rewrite rm -rf references to avoid YARA false positives - Archive v2.0.0 to openclaw/versions/cloud-deploy/v2.0.0/ - Rename nginx-static.conf to .conf.txt for SkillHub compatibility - Publish cloud-deploy v2.0.1 to sola-openclaw-work on SkillHub - Import cloud-deploy-2.0.zip and dev-pipeline-universal to archives/
289 lines
7.2 KiB
Markdown
289 lines
7.2 KiB
Markdown
---
|
||
name: cloud-deploy
|
||
version: "2.0"
|
||
description: 一键部署本地项目到云服务器。通过 API 网关模式部署,Token 认证,无需 SSH 私钥。
|
||
使用场景包括:(1) 部署前端静态页面,(2) 快速预览开发成果,(3) 分享可访问的 URL 给他人,(4) 安装服务器环境。
|
||
触发语句如:"部署这个项目"、"推到云服务器上"、"给我个访问链接"、"发布这个静态页面"。
|
||
Namespace 规则:使用用户的 contactId 作为命名空间,实现用户隔离
|
||
---
|
||
|
||
# 云部署技能 (Cloud Deploy) v2.0
|
||
|
||
> v2.0 重大升级:SSH 直连 → API 网关模式,Token 认证,无需私钥
|
||
|
||
## 核心变化(v1.0 → v2.0)
|
||
|
||
| 项目 | v1.0 | v2.0 |
|
||
|------|------|------|
|
||
| 连接方式 | SSH + 私钥 | HTTPS + Token |
|
||
| 认证 | 私钥文件 | Token(可撤销) |
|
||
| 部署方式 | rsync + 远程脚本 | API 上传 + 远程执行 |
|
||
| 环境安装 | SSH 手动执行 | /api/exec 远程执行 |
|
||
| 安全性 | 私钥扩散风险 | Token 独立管控 |
|
||
| 审计 | 无 | 全量日志 |
|
||
|
||
## 核心功能
|
||
|
||
- 🚀 一键部署静态页面到云服务器
|
||
- 🔑 Token 认证,首次使用自动注册
|
||
- 🛡️ 危险命令拦截 + 全量审计日志
|
||
- 👥 Namespace 自动隔离(contactId)
|
||
- 🎲 自动生成随机目录名
|
||
- 🌐 生成可访问的 URL 地址
|
||
- 🔧 支持远程执行命令(安装环境等)
|
||
|
||
## 配置
|
||
|
||
### 环境变量(首次初始化时需要)
|
||
|
||
| 变量 | 说明 | 必填 |
|
||
|------|------|------|
|
||
| DEPLOY_API_URL | API 网关地址 | 是 |
|
||
| DEPLOY_REGISTRATION_KEY | 注册码 | 是 |
|
||
| DEPLOY_AGENT_ID | Agent ID | 否 |
|
||
| DEPLOY_INSTANCE_NAME | 实例名称 | 否 |
|
||
|
||
### 配置文件
|
||
|
||
初始化后保存在 `~/.openclaw/cloud-deploy.json`:
|
||
|
||
```json
|
||
{
|
||
"apiUrl": "<API网关地址>",
|
||
"registrationKey": "<注册码>",
|
||
"token": null,
|
||
"agentId": ""
|
||
}
|
||
```
|
||
|
||
部署时替换占位符:
|
||
- `<API网关地址>` — 部署的 API 服务地址(如 https://your-domain.com/api)
|
||
- `<注册码>` — 服务端配置的 registrationKey
|
||
|
||
---
|
||
|
||
## 工作流程
|
||
|
||
### 步骤 0:初始化配置(首次使用)
|
||
|
||
```bash
|
||
DEPLOY_API_URL="<API网关地址>" \
|
||
DEPLOY_REGISTRATION_KEY="<注册码>" \
|
||
bash scripts/init-config.sh
|
||
```
|
||
|
||
### 步骤 1:Token 自注册(首次使用自动执行)
|
||
|
||
**触发条件**:本地配置中 token 为空
|
||
|
||
```bash
|
||
bash scripts/register.sh [contactId]
|
||
```
|
||
|
||
注册成功后 token 自动保存到配置文件。
|
||
|
||
### 步骤 2:获取用户 contactId
|
||
|
||
从 `user_index.json` 获取当前用户的 contactId 作为 namespace。
|
||
|
||
### 步骤 3:部署
|
||
|
||
```bash
|
||
bash scripts/deploy.sh <项目目录> <contactId> <项目名>
|
||
```
|
||
|
||
脚本自动执行:打包 → 上传 → 部署 → 返回 URL
|
||
|
||
### 步骤 4:返回结果
|
||
|
||
```
|
||
✅ 部署成功!
|
||
|
||
🌐 访问地址:https://<域名>/<contactId>/<目录名>/
|
||
📂 目录名:<随机ID>-<项目名>-<时间戳>
|
||
⏱️ 部署耗时:X 秒
|
||
```
|
||
|
||
---
|
||
|
||
## 远程命令执行(安装环境等)
|
||
|
||
```bash
|
||
bash scripts/exec.sh "<命令>" [超时毫秒]
|
||
```
|
||
|
||
**安全限制**:
|
||
- 危险命令会被拦截(rm -rf /、shutdown 等)
|
||
- 操作目录受限
|
||
- 每条命令都有审计日志
|
||
|
||
---
|
||
|
||
## API 接口一览
|
||
|
||
| 接口 | 方法 | 权限 | 用途 | 脚本 |
|
||
|------|------|------|------|------|
|
||
| /api/auth/register | POST | 注册码 | 自注册 | register.sh |
|
||
| /api/deploy | POST | deploy | 一键部署 | deploy.sh |
|
||
| /api/upload | POST | deploy | 上传文件 | upload.sh |
|
||
| /api/exec | POST | exec | 执行命令 | exec.sh |
|
||
| /api/deployments | GET | list | 查看部署列表 | list.sh |
|
||
| /api/deploy/{id} | DELETE | delete | 删除部署 | delete.sh |
|
||
| /api/health | GET | 无 | 健康检查 | health.sh |
|
||
|
||
---
|
||
|
||
## 脚本说明
|
||
|
||
| 脚本 | 功能 |
|
||
|------|------|
|
||
| `scripts/init-config.sh` | 初始化配置文件(环境变量驱动) |
|
||
| `scripts/register.sh` | Token 自注册 |
|
||
| `scripts/deploy.sh` | 主部署脚本(打包+上传+部署) |
|
||
| `scripts/pack.sh` | 打包项目为 tar.gz |
|
||
| `scripts/exec.sh` | 远程执行命令 |
|
||
| `scripts/upload.sh` | 上传文件到指定路径 |
|
||
| `scripts/list.sh` | 查看部署列表 |
|
||
| `scripts/delete.sh` | 删除指定部署 |
|
||
| `scripts/health.sh` | 健康检查 |
|
||
|
||
---
|
||
|
||
## 用户交互模式
|
||
|
||
### 模式 1:部署静态页面(最常用)
|
||
|
||
```
|
||
用户:部署这个静态页面
|
||
|
||
AI:🔍 检测到项目:landing-page(静态页面)
|
||
🔑 Token 已就绪
|
||
👥 Namespace:<contactId>
|
||
|
||
正在部署...
|
||
📦 打包文件中...(15 个文件,2.3MB)
|
||
🚀 上传并部署中...
|
||
|
||
✅ 部署成功!
|
||
🌐 访问地址:https://<域名>/<contactId>/<目录名>/
|
||
⏱️ 部署耗时:5 秒
|
||
```
|
||
|
||
### 模式 2:首次使用(自动注册)
|
||
|
||
```
|
||
用户:部署这个项目
|
||
|
||
AI:🔍 检测到首次使用云部署,正在初始化...
|
||
📝 配置文件已创建
|
||
🔑 注册成功,Token 已保存
|
||
|
||
继续部署...
|
||
(后续同模式 1)
|
||
```
|
||
|
||
### 模式 3:安装环境
|
||
|
||
```
|
||
用户:服务器上需要装 Python
|
||
|
||
AI:🔧 正在执行远程命令...
|
||
> sudo apt update && sudo apt install -y python3 python3-pip
|
||
|
||
✅ 执行完成(耗时 12 秒)
|
||
```
|
||
|
||
### 模式 4:查看部署列表
|
||
|
||
```
|
||
用户:看看已部署的项目
|
||
|
||
AI:📋 你的部署列表(共 N 个):
|
||
|
||
1. <目录名>
|
||
🌐 <URL>
|
||
⏰ <部署时间>
|
||
```
|
||
|
||
### 模式 5:删除部署
|
||
|
||
```
|
||
用户:删掉第一个项目
|
||
|
||
AI:🗑️ 已删除 <目录名>
|
||
文件已清理
|
||
```
|
||
|
||
---
|
||
|
||
## 安全设计
|
||
|
||
### Token 机制
|
||
|
||
| 要素 | 说明 |
|
||
|------|------|
|
||
| 注册码 | 技能配置时注入,只用于注册 |
|
||
| Token | 每个 AI 助理独立,可单独撤销 |
|
||
| 权限 | deploy / exec / list / delete |
|
||
| 审计 | 每次操作都记录到服务端日志 |
|
||
|
||
### 危险命令拦截
|
||
|
||
以下命令会被服务端拦截:
|
||
- rm -rf /(删除根目录)
|
||
- shutdown / reboot(关机重启)
|
||
- mkfs / dd if=(格式化磁盘)
|
||
- iptables -F / ufw disable(关闭防火墙)
|
||
- systemctl stop nginx(停止 Nginx)
|
||
- curl|bash / wget|bash(远程执行)
|
||
|
||
### 路径保护
|
||
|
||
/api/exec 和 /api/upload 只允许操作服务端配置的允许目录。
|
||
|
||
### 管理员操作(仅 owner)
|
||
|
||
| 操作 | 接口 |
|
||
|------|------|
|
||
| 查看所有 Token | GET /api/admin/tokens |
|
||
| 撤销 Token | DELETE /api/admin/tokens/{prefix} |
|
||
| 查看审计日志 | GET /api/admin/audit?date=YYYY-MM-DD |
|
||
|
||
---
|
||
|
||
## 服务端部署
|
||
|
||
API 网关服务端部署说明见 `references/server-setup.md`
|
||
|
||
---
|
||
|
||
## 目录结构
|
||
|
||
```
|
||
skills/cloud-deploy/
|
||
├── SKILL.md # 技能说明(本文件)
|
||
├── README.md # 快速入门
|
||
├── QUICKSTART.sh # 快速启动脚本
|
||
├── scripts/ # 客户端脚本
|
||
│ ├── init-config.sh
|
||
│ ├── register.sh
|
||
│ ├── deploy.sh
|
||
│ ├── pack.sh
|
||
│ ├── exec.sh
|
||
│ ├── upload.sh
|
||
│ ├── list.sh
|
||
│ ├── delete.sh
|
||
│ ├── health.sh
|
||
│ └── legacy/ # v1.0 旧脚本(保留备查)
|
||
├── references/ # 参考文档
|
||
│ ├── server-setup.md # 服务端部署指南
|
||
│ └── security-guide.md # 安全指南
|
||
└── assets/
|
||
└── templates/
|
||
```
|
||
|
||
---
|
||
|
||
_版本:v2.0 | 更新:2026-04-21(SSH → API 网关模式)_
|
||
_v1.0 备份:skills/cloud-deploy-v1.0-backup/_
|