#!/usr/bin/env bash # # deploy.sh — OpenClaw 自媒体智能体 一键部署脚本 # 使用方法: bash deploy.sh # # 功能: # 1. 检测 OpenClaw 是否安装 # 2. 创建 4 个 Agent 工作区(101、文章大师、脚本大师、发布大师) # 3. 写入灵魂文件(SOUL.md) # 4. 复制发布脚本和 baoyu 技能 # 5. 更新 openclaw.json 配置 # 6. 重启 Gateway # 7. 引导用户配置平台凭证 # set -euo pipefail # ====== 颜色 ====== RED='\033[0;31m'; GREEN='\033[0;32m'; CYAN='\033[0;36m'; NC='\033[0m' info() { echo -e "${GREEN}[INFO]${NC} $*"; } warn() { echo -e "${YELLOW}[WARN]${NC} $*"; } error() { echo -e "${RED}[ERROR]${NC} $*" >&2; } highlight() { echo -e "${CYAN}$*${NC}"; } SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" TEMPLATE_DIR="$SCRIPT_DIR" OPENCLAW_HOME="${OPENCLAW_HOME:-/root/.openclaw}" # ====== 1. 检测 OpenClaw ====== info "=== 第1步:检测 OpenClaw ===" if command -v openclaw &>/dev/null; then info "OpenClaw 已安装: $(openclaw --version 2>/dev/null || echo '版本未知')" else error "OpenClaw 未安装!请先安装 OpenClaw。" highlight " 安装命令: curl -fsSL https://docs.openclaw.ai/install.sh | bash" exit 1 fi # ====== 2. 创建 Agent 工作区 ====== info "=== 第2步:创建 Agent 工作区 ===" AGENTS=("101" "文章大师" "脚本大师" "发布大师") for agent in "${AGENTS[@]}"; do WORKSPACE_DIR="$OPENCLAW_HOME/agents/$agent/workspace" mkdir -p "$WORKSPACE_DIR/scripts" mkdir -p "$WORKSPACE_DIR/imgs/ai-app" mkdir -p "$WORKSPACE_DIR/imgs/ai-chip" mkdir -p "$WORKSPACE_DIR/imgs/tech" mkdir -p "$WORKSPACE_DIR/imgs/default" mkdir -p "$WORKSPACE_DIR/post-to-wechat" info " 已创建: $WORKSPACE_DIR" done # ====== 3. 写入灵魂文件 ====== info "=== 第3步:写入灵魂文件 ===" cp "$TEMPLATE_DIR/agents/101/SOUL.md" "$OPENCLAW_HOME/agents/101/workspace/SOUL.md" cp "$TEMPLATE_DIR/agents/文章大师/SOUL.md" "$OPENCLAW_HOME/agents/文章大师/workspace/SOUL.md" cp "$TEMPLATE_DIR/agents/脚本大师/SOUL.md" "$OPENCLAW_HOME/agents/脚本大师/workspace/SOUL.md" cp "$TEMPLATE_DIR/agents/发布大师/SOUL.md" "$OPENCLAW_HOME/agents/发布大师/workspace/SOUL.md" info " 4个灵魂文件已写入 ✓" # ====== 4. 创建 Agent 配置 ====== info "=== 第4步:创建 Agent 配置 ===" mkdir -p "$OPENCLAW_HOME/agents/101/.openclaw" mkdir -p "$OPENCLAW_HOME/agents/文章大师/.openclaw" mkdir -p "$OPENCLAW_HOME/agents/脚本大师/.openclaw" mkdir -p "$OPENCLAW_HOME/agents/发布大师/.openclaw" # 101 agent.json cat > "$OPENCLAW_HOME/agents/101/.openclaw/agent.json" << EOF { "id": "101", "name": "101", "role": "团队协调者", "workspaceDir": "/root/.openclaw/agents/101/workspace", "model": "deepseek/deepseek-chat", "skillsDir": "/root/.openclaw/agents/101/workspace/skills", "timeoutSeconds": 300 } EOF # 文章大师 agent.json cat > "$OPENCLAW_HOME/agents/文章大师/.openclaw/agent.json" << EOF { "id": "wenzhang", "name": "文章大师", "role": "深度文章创作专家", "workspaceDir": "/root/.openclaw/agents/文章大师/workspace", "model": "deepseek/deepseek-chat", "timeoutSeconds": 300 } EOF # 脚本大师 agent.json cat > "$OPENCLAW_HOME/agents/脚本大师/.openclaw/agent.json" << EOF { "id": "jiaoben", "name": "脚本大师", "role": "短视频脚本创作专家", "workspaceDir": "/root/.openclaw/agents/脚本大师/workspace", "model": "deepseek/deepseek-chat", "timeoutSeconds": 300 } EOF # 发布大师 agent.json cat > "$OPENCLAW_HOME/agents/发布大师/.openclaw/agent.json" << EOF { "id": "fabu", "name": "发布大师", "role": "内容发布专家", "workspaceDir": "/root/.openclaw/agents/发布大师/workspace", "model": "deepseek/deepseek-chat", "timeoutSeconds": 300 } EOF info " 4个Agent配置已创建 ✓" # ====== 5. 复制发布脚本 ====== info "=== 第5步:复制发布脚本 ===" PUBLISH_SCRIPTS_DIR="$OPENCLAW_HOME/agents/发布大师/workspace/scripts" mkdir -p "$PUBLISH_SCRIPTS_DIR" cp "$TEMPLATE_DIR/agents/发布大师/scripts/md2html.py" "$PUBLISH_SCRIPTS_DIR/" cp "$TEMPLATE_DIR/agents/发布大师/scripts/publish-wordpress.py" "$PUBLISH_SCRIPTS_DIR/" chmod +x "$PUBLISH_SCRIPTS_DIR/md2html.py" "$PUBLISH_SCRIPTS_DIR/publish-wordpress.py" info " 发布脚本已复制 ✓" # ====== 6. 复制 baoyu 技能 ====== info "=== 第6步:复制 baoyu 技能 ===" SKILLS_DIR="$OPENCLAW_HOME/agents/101/workspace/skills" mkdir -p "$SKILLS_DIR/baoyu-post-to-wechat/scripts" cp -r "$TEMPLATE_DIR/skills/baoyu-post-to-wechat/SKILL.md" "$SKILLS_DIR/baoyu-post-to-wechat/" cp "$TEMPLATE_DIR/skills/baoyu-post-to-wechat/scripts/"*.ts "$SKILLS_DIR/baoyu-post-to-wechat/scripts/" 2>/dev/null # 复制 vendor 目录(如果存在) if [ -d "$TEMPLATE_DIR/skills/baoyu-post-to-wechat/scripts/vendor" ]; then cp -r "$TEMPLATE_DIR/skills/baoyu-post-to-wechat/scripts/vendor" "$SKILLS_DIR/baoyu-post-to-wechat/scripts/" fi # 复制 references if [ -d "$TEMPLATE_DIR/skills/baoyu-post-to-wechat/references" ]; then cp -r "$TEMPLATE_DIR/skills/baoyu-post-to-wechat/references" "$SKILLS_DIR/baoyu-post-to-wechat/" fi info " baoyu 技能已复制 ✓" # ====== 7. 更新 openclaw.json ====== info "=== 第7步:更新 OpenClaw 配置 ===" CONFIG_FILE="$OPENCLAW_HOME/openclaw.json" if [ ! -f "$CONFIG_FILE" ]; then warn "未找到 openclaw.json 配置文件,创建新配置..." echo '{"agents":{"defaults":{"model":{"primary":"deepseek/deepseek-chat"},"workspace":"/root/.openclaw/workspace","subagents":{"allowAgents":["wenzhang","fabu","jiaoben"]}},"list":{}},"models":{"deepseek/deepseek-chat":{"alias":"DeepSeek"}}}' > "$CONFIG_FILE" fi # 检查是否已有 101 配置 if grep -q '"101"' "$CONFIG_FILE" 2>/dev/null; then info " 配置中已有 101 Agent,跳过配置更新" info " 如需覆盖,请手动编辑 $CONFIG_FILE" else # 用 node 更新配置(更安全) node -e " const fs = require('fs'); let cfg; try { cfg = JSON.parse(fs.readFileSync('$CONFIG_FILE','utf-8')); } catch(e) { cfg = { agents: { defaults: {}, list: {} } }; } if (!cfg.agents) cfg.agents = {}; if (!cfg.agents.defaults) cfg.agents.defaults = {}; if (!cfg.agents.defaults.model) cfg.agents.defaults.model = { primary: 'deepseek/deepseek-chat' }; if (!cfg.agents.defaults.subagents) cfg.agents.defaults.subagents = {}; cfg.agents.defaults.subagents.allowAgents = ['wenzhang', 'fabu', 'jiaoben']; if (!cfg.agents.list) cfg.agents.list = {}; cfg.agents.list['101'] = { name: '101', role: '团队协调者', model: 'deepseek/deepseek-chat', workspaceDir: '/root/.openclaw/agents/101/workspace', skillsDir: '/root/.openclaw/agents/101/workspace/skills', subagents: { allowAgents: ['wenzhang', 'fabu', 'jiaoben'] } }; fs.writeFileSync('$CONFIG_FILE', JSON.stringify(cfg, null, 2) + '\n'); console.log(' 配置已更新 ✓'); " fi # ====== 8. 重启 Gateway ====== info "=== 第8步:重启 Gateway ===" if openclaw gateway status 2>/dev/null | grep -q "running"; then info "Gateway 正在运行,重启中..." nohup openclaw gateway restart &>/dev/null & sleep 3 else info "Gateway 未运行,启动中..." nohup openclaw gateway start &>/dev/null & sleep 3 fi info " Gateway 已重启 ✓" # ====== 完成 ====== echo "" highlight "═══════════════════════════════════════════" highlight " 部署成功!自媒体智能体团队已就绪 🎉" highlight "═══════════════════════════════════════════" echo "" info "下一步:配置平台凭证" echo "" highlight " 1. 配置公众号" highlight " 给 101 发消息:" highlight " 「配置公众号,AppID=你的AppID,Secret=你的AppSecret」" echo "" highlight " 2. 配置网站(可选)" highlight " 给 101 发消息:" highlight " 「配置网站 myblog.com,Z-Blog,账号admin,密码xxx,blogId=yyy」" echo "" highlight " 3. 开始使用" highlight " 给 101 发消息:" highlight " 「写一篇关于[主题]的文章,发到公众号和网站」" echo "" info " 灵魂文件路径:" info " 101: $OPENCLAW_HOME/agents/101/workspace/SOUL.md" info " 文章大师: $OPENCLAW_HOME/agents/文章大师/workspace/SOUL.md" info " 脚本大师: $OPENCLAW_HOME/agents/脚本大师/workspace/SOUL.md" info " 发布大师: $OPENCLAW_HOME/agents/发布大师/workspace/SOUL.md" echo ""