#!/bin/bash # OpenClaw升级和DeepSeek配置脚本 # 作者:101(团队协调者) # 日期:2026-03-28 set -e # 颜色输出 RED='\033[0;31m' GREEN='\033[0;32m' YELLOW='\033[1;33m' BLUE='\033[0;34m' NC='\033[0m' # No Color # 日志函数 log_info() { echo -e "${BLUE}[INFO]${NC} $1" } log_success() { echo -e "${GREEN}[SUCCESS]${NC} $1" } log_warning() { echo -e "${YELLOW}[WARNING]${NC} $1" } log_error() { echo -e "${RED}[ERROR]${NC} $1" } # 检查是否以root运行 check_root() { if [[ $EUID -ne 0 ]]; then log_error "请以root用户运行此脚本" exit 1 fi } # 显示标题 show_header() { echo "==========================================" echo " OpenClaw升级和DeepSeek配置脚本" echo "==========================================" echo "" } # 检查当前版本 check_current_version() { log_info "检查当前OpenClaw版本..." if command -v openclaw &> /dev/null; then CURRENT_VERSION=$(openclaw --version 2>/dev/null || echo "未知") log_info "当前版本: $CURRENT_VERSION" else log_warning "OpenClaw未安装" CURRENT_VERSION="未安装" fi } # 升级OpenClaw upgrade_openclaw() { log_info "开始升级OpenClaw..." # 检查npm/pnpm if command -v pnpm &> /dev/null; then log_info "使用pnpm升级..." pnpm add -g openclaw@latest elif command -v npm &> /dev/null; then log_info "使用npm升级..." npm install -g openclaw@latest else log_error "未找到npm或pnpm,请先安装Node.js" exit 1 fi # 验证安装 if openclaw --version &> /dev/null; then NEW_VERSION=$(openclaw --version) log_success "升级完成!新版本: $NEW_VERSION" else log_error "升级后OpenClaw无法运行" exit 1 fi } # 配置DeepSeek API密钥 configure_deepseek() { log_info "配置DeepSeek API密钥..." # 检查配置文件 CONFIG_FILE="/root/.openclaw/openclaw.json" if [[ ! -f "$CONFIG_FILE" ]]; then log_error "配置文件不存在: $CONFIG_FILE" return 1 fi # 提示用户输入API密钥 echo "" log_warning "请确保您已有DeepSeek API密钥" echo "您可以在 https://platform.deepseek.com/api-keys 获取API密钥" echo "" read -p "请输入您的DeepSeek API密钥 (留空跳过): " DEEPSEEK_API_KEY if [[ -n "$DEEPSEEK_API_KEY" ]]; then # 备份原配置 cp "$CONFIG_FILE" "${CONFIG_FILE}.backup.$(date +%Y%m%d_%H%M%S)" log_info "已备份原配置文件" # 使用jq更新配置 if command -v jq &> /dev/null; then # 更新auth配置 jq '.auth.profiles["deepseek:default"].apiKey = "'"$DEEPSEEK_API_KEY"'"' "$CONFIG_FILE" > "${CONFIG_FILE}.tmp" && mv "${CONFIG_FILE}.tmp" "$CONFIG_FILE" # 确保模型配置正确 jq '.models.providers.deepseek.baseUrl = "https://api.deepseek.com"' "$CONFIG_FILE" > "${CONFIG_FILE}.tmp" && mv "${CONFIG_FILE}.tmp" "$CONFIG_FILE" jq '.models.providers.deepseek.api = "openai-completions"' "$CONFIG_FILE" > "${CONFIG_FILE}.tmp" && mv "${CONFIG_FILE}.tmp" "$CONFIG_FILE" log_success "DeepSeek API密钥已配置" else log_warning "未找到jq命令,请手动在配置文件中添加API密钥" echo "在 $CONFIG_FILE 中,确保有以下配置:" echo ' "auth": {' echo ' "profiles": {' echo ' "deepseek:default": {' echo ' "provider": "deepseek",' echo ' "mode": "api_key",' echo " \"apiKey\": \"$DEEPSEEK_API_KEY\"" echo ' }' echo ' }' echo ' }' fi else log_warning "跳过API密钥配置,请确保已正确配置DeepSeek" fi } # 设置DeepSeek为默认模型 set_default_model() { log_info "设置DeepSeek为默认模型..." CONFIG_FILE="/root/.openclaw/openclaw.json" if command -v jq &> /dev/null; then # 确保agents.defaults.model.primary设置为deepseek/deepseek-chat jq '.agents.defaults.model.primary = "deepseek/deepseek-chat"' "$CONFIG_FILE" > "${CONFIG_FILE}.tmp" && mv "${CONFIG_FILE}.tmp" "$CONFIG_FILE" # 添加模型别名 jq '.agents.defaults.models["deepseek/deepseek-chat"] = {alias: "DeepSeek"}' "$CONFIG_FILE" > "${CONFIG_FILE}.tmp" && mv "${CONFIG_FILE}.tmp" "$CONFIG_FILE" log_success "已设置DeepSeek为默认模型" else log_warning "未找到jq命令,请手动设置默认模型" fi } # 重启OpenClaw服务 restart_services() { log_info "重启OpenClaw服务..." # 检查gateway服务状态 if systemctl is-active --quiet openclaw-gateway; then log_info "重启gateway服务..." systemctl restart openclaw-gateway sleep 3 if systemctl is-active --quiet openclaw-gateway; then log_success "gateway服务重启成功" else log_error "gateway服务重启失败" systemctl status openclaw-gateway --no-pager fi else log_warning "gateway服务未运行,尝试启动..." systemctl start openclaw-gateway || log_error "启动gateway服务失败" fi # 检查node服务状态 if systemctl is-active --quiet openclaw-node; then log_info "重启node服务..." systemctl restart openclaw-node sleep 2 if systemctl is-active --quiet openclaw-node; then log_success "node服务重启成功" else log_error "node服务重启失败" systemctl status openclaw-node --no-pager fi else log_info "node服务未运行(可能是正常状态)" fi } # 验证配置 verify_configuration() { log_info "验证配置..." echo "" log_info "检查OpenClaw状态..." if openclaw status --minimal &> /dev/null; then log_success "OpenClaw运行正常" # 显示模型信息 echo "" log_info "当前模型配置:" openclaw status | grep -A5 "Sessions" || true else log_error "OpenClaw状态检查失败" fi echo "" log_info "测试DeepSeek连接..." # 简单的API测试 if curl -s https://api.deepseek.com/v1/models -H "Authorization: Bearer dummy" &> /dev/null; then log_success "DeepSeek API端点可达" else log_warning "无法连接到DeepSeek API,请检查网络和API密钥" fi } # 显示使用说明 show_usage() { echo "" echo "使用说明:" echo " 1. 运行脚本: sudo bash upgrade_openclaw_deepseek.sh" echo " 2. 按照提示输入DeepSeek API密钥" echo " 3. 脚本将自动升级并配置" echo "" echo "注意事项:" echo " - 需要root权限" echo " - 需要已安装Node.js和npm/pnpm" echo " - 需要有效的DeepSeek API密钥" echo " - 建议在升级前备份重要数据" } # 主函数 main() { show_header check_root check_current_version echo "" read -p "是否继续升级OpenClaw? (y/n): " -n 1 -r echo "" if [[ ! $REPLY =~ ^[Yy]$ ]]; then log_info "用户取消操作" exit 0 fi upgrade_openclaw configure_deepseek set_default_model restart_services verify_configuration echo "" log_success "OpenClaw升级和DeepSeek配置完成!" echo "" log_info "下一步建议:" echo " 1. 运行 'openclaw status' 检查状态" echo " 2. 运行 'openclaw security audit' 检查安全配置" echo " 3. 测试发送消息到您的渠道(飞书、企业微信等)" echo "" show_usage } # 执行主函数 main "$@"