乐于分享
好东西不私藏

OpenClaw安装后必做的10项关键配置:安全、性能与功能优化

OpenClaw安装后必做的10项关键配置:安全、性能与功能优化

⚙️ OpenClaw安装后必做的10项关键配置:安全、性能与功能优化

配置概述:为什么这些配置至关重要

OpenClaw作为一款强大的AI助手平台,其默认安装配置主要面向开发和测试环境。然而,在生产环境中使用OpenClaw时,必须进行一系列关键配置来确保系统的安全性、性能和功能性。这些配置不仅仅是可选项,而是保障系统稳定运行的必要步骤。

配置的重要性体现在以下三个方面

安全性保障

  • 防止未授权访问和数据泄露

  • 保护用户隐私和敏感信息

  • 确保系统符合企业安全合规要求

  • 建立完善的审计和监控机制

性能优化

  • 最大化硬件资源利用率

  • 优化响应时间和吞吐量

  • 减少内存占用和CPU消耗

  • 提供稳定的高并发处理能力

功能完善

  • 启用核心功能模块

  • 集成必要的第三方服务

  • 配置个性化的工作流

  • 优化用户体验和交互效率

配置优先级分类

紧急配置(安装后立即执行)

  • 安全认证配置

  • 数据存储路径设置

  • 基础网络配置

  • 日志级别设置

重要配置(24小时内完成)

  • 内存和性能调优

  • 外部服务集成

  • 用户权限管理

  • 备份策略配置

优化配置(一周内完成)

  • 高级安全策略

  • 监控告警设置

  • 自定义工作流配置

  • 性能基准测试

第1项配置:安全认证与访问控制

安全认证是OpenClaw配置的首要任务,它决定了谁可以访问系统以及可以执行哪些操作。

API密钥配置

生成和配置API密钥

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
# 生成安全的API密钥openssl rand -base64 32# 输出示例: xxxxxx# 在配置文件中设置API密钥echo"OPENCLAW_API_KEY=xxxxxxxxxx" >> ~/.openclaw/.env

API密钥安全最佳实践

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
api_key_security:storage:method:"environment_variables"never_store_in: ["config_files""source_code""version_control"]rotation:frequency:"90_days"grace_period:"7_days"notification:"email_7_days_before_expiry"validation:length:"minimum_32_characters"complexity:"alphanumeric_with_special_chars"uniqueness:"per_installation"

OAuth 2.0集成

配置OAuth 2.0提供商

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
# config/oauth.yamloauth_providers:feishu:enabled:trueclient_id:"your_feishu_client_id"client_secret:"${FEISHU_CLIENT_SECRET}"redirect_uri:"https://your-domain.com/oauth/feishu/callback"scopes: ["contact:employee:readonly""im:message"]github:enabled:trueclient_id:"your_github_client_id"client_secret:"${GITHUB_CLIENT_SECRET}"redirect_uri:"https://your-domain.com/oauth/github/callback"scopes: ["user:email""repo"]google:enabled:falseclient_id:"your_google_client_id"client_secret:"${GOOGLE_CLIENT_SECRET}"redirect_uri:"https://your-domain.com/oauth/google/callback"scopes: ["openid""email""profile"]

OAuth安全配置

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
// OAuth安全中间件classOAuthSecurityMiddleware {constructor() {this.tokenExpiry = 3600// 1小时this.refreshTokenExpiry = 604800// 7天this.maxFailedAttempts = 5;this.lockoutDuration = 300// 5分钟  }asyncvalidateToken(token) {// 验证token格式if (!this.isValidTokenFormat(token)) {thrownewError('Invalid token format');    }// 验证token签名if (!awaitthis.verifyTokenSignature(token)) {thrownewError('Invalid token signature');    }// 验证token过期时间if (this.isTokenExpired(token)) {thrownewError('Token expired');    }// 验证token撤销状态if (awaitthis.isTokenRevoked(token)) {thrownewError('Token revoked');    }returntrue;  }asynchandleFailedAuthentication(attemptId) {const failedAttempts = awaitthis.getFailedAttempts(attemptId);if (failedAttempts >= this.maxFailedAttempts) {awaitthis.lockAccount(attemptId, this.lockoutDuration);awaitthis.sendSecurityAlert(`Account ${attemptId} locked due to excessive failed login attempts`);    }  }}

基于角色的访问控制(RBAC)

RBAC配置文件

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
# config/rbac.yamlroles:admin:description:"系统管理员"permissions:-"system:*"-"users:*"-"config:*"-"logs:*"developer:description:"开发者"permissions:-"agents:create"-"agents:read"-"agents:update"-"skills:install"-"skills:uninstall"-"workflows:execute"user:description:"普通用户"permissions:-"agents:read"-"workflows:execute"-"memory:read"-"memory:write"guest:description:"访客"permissions:-"agents:read"-"public:access"role_assignments:ou_80874a11502244c163c486f0842a8ac6:-"admin"developer_team:-"developer"all_users:-"user"

RBAC实现代码

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
// RBAC权限检查器classRBACPermissionChecker {constructor(rbacConfig) {this.roles = rbacConfig.roles;this.roleAssignments = rbacConfig.roleAssignments;  }asynchasPermission(userId, permission) {// 获取用户角色const userRoles = awaitthis.getUserRoles(userId);// 检查每个角色的权限for (const role of userRoles) {const rolePermissions = this.roles[role]?.permissions || [];// 检查精确匹配if (rolePermissions.includes(permission)) {returntrue;      }// 检查通配符匹配for (const rolePermission of rolePermissions) {if (rolePermission.endsWith(':*')) {const resource = rolePermission.replace(':*''');const requestedResource = permission.split(':')[0];if (resource === requestedResource) {returntrue;          }        }      }    }returnfalse;  }asyncgetUserRoles(userId) {const roles = [];// 检查直接分配的角色if (this.roleAssignments[userId]) {      roles.push(...this.roleAssignments[userId]);    }// 检查组分配的角色const userGroups = awaitthis.getUserGroups(userId);for (const group of userGroups) {if (this.roleAssignments[group]) {        roles.push(...this.roleAssignments[group]);      }    }return [...newSet(roles)]; // 去重  }}

第2项配置:数据存储与持久化

正确的数据存储配置确保了OpenClaw的数据安全性和可靠性。

工作目录配置

工作目录结构

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
~/OpenClaw/workspace/├── MEMORY.md # 长期记忆文件├── AGENTS.md # Agent配置文件├── USER.md # 用户画像文件├── SOUL.md # AI人格文件├── memory/ # 日常记忆目录│   ├── 2026-03-11.md        # 日期命名的日志文件│   └── ...├── skills/ # 技能目录│   ├── find-skills/│   ├── everything-openclaw/│   └── ...├── data/ # 数据存储目录│   ├── vector_index.faiss    # 向量索引文件│   ├── vector_metadata.json  # 向量元数据│  └──cache/ # 缓存目录└── config/ # 配置目录    ├── config.yaml           # 主配置文件    ├── oauth.yaml            # OAuth配置   └──rbac.yaml # RBAC配置

工作目录配置

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
# config/config.yamlworkspace:directory:"~/OpenClaw/workspace"create_if_missing:truepermissions:"0700"# 仅所有者可读写执行data_storage:type:"local"path:"./data"backup_enabled:truebackup_path:"./backups"retention_days:30memory:long_term_file:"MEMORY.md"daily_directory:"memory"auto_create_daily:truecompression_enabled:false

数据库集成

PostgreSQL配置

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
# config/database.yamldatabase:type:"postgresql"host:"localhost"port:5432name:"openclaw"username:"openclaw_user"password:"${DB_PASSWORD}"ssl_enabled:trueconnection_pool:min_size:5max_size:20idle_timeout:300# 5分钟max_lifetime:3600# 1小时migrations:enabled:truepath:"./migrations"auto_apply:true

数据库初始化脚本

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
-- migrations/001_initial_schema.sqlCREATETABLE agents (    id UUID PRIMARY KEY DEFAULT gen_random_uuid(),    name VARCHAR(255NOTNULL,    type VARCHAR(50NOTNULL,    config JSONB,    status VARCHAR(20DEFAULT'active',    created_at TIMESTAMPDEFAULT NOW(),    updated_at TIMESTAMPDEFAULT NOW());CREATETABLE workflows (    id UUID PRIMARY KEY DEFAULT gen_random_uuid(),    name VARCHAR(255NOTNULL,    definition JSONB NOTNULL,    status VARCHAR(20DEFAULT'active',    created_at TIMESTAMPDEFAULT NOW(),    updated_at TIMESTAMPDEFAULT NOW());CREATETABLE memory_entries (    id UUID PRIMARY KEY DEFAULT gen_random_uuid(),    type VARCHAR(50NOTNULL,    content TEXT NOTNULL,    metadata JSONB,    created_at TIMESTAMPDEFAULT NOW(),    user_id VARCHAR(255));CREATE INDEX idx_agents_name ON agents(name);CREATE INDEX idx_workflows_name ON workflows(name);CREATE INDEX idx_memory_entries_type ON memory_entries(type);CREATE INDEX idx_memory_entries_user ON memory_entries(user_id);CREATE INDEX idx_memory_entries_created ON memory_entries(created_at);

数据备份策略

备份配置

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
# config/backup.yamlbackup:enabled:trueschedule:"0 2 * * *"# 每天凌晨2点retention:daily:7weekly:4monthly:12compression:"gzip"encryption:enabled:truekey_file:"~/.openclaw/backup.key"destinations:-type:"local"path:"./backups"-type:"s3"bucket:"openclaw-backups"region:"us-west-2"access_key:"${AWS_ACCESS_KEY}"secret_key:"${AWS_SECRET_KEY}"

备份脚本实现

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
#!/bin/bash# scripts/backup.shset -eBACKUP_DIR="./backups/$(date +%Y%m%d_%H%M%S)"mkdir -p "$BACKUP_DIR"# 备份工作目录tar -czf "$BACKUP_DIR/workspace.tar.gz" -C ~/OpenClaw/workspace .# 备份数据库pg_dump -h localhost -U openclaw_user openclaw > "$BACKUP_DIR/database.sql"gzip "$BACKUP_DIR/database.sql"# 加密备份if [ -f ~/.openclaw/backup.key ]; then    gpg --batch --yes --cipher-algo AES256 --compress-algo 1 --symmetric \        --passphrase-file ~/.openclaw/backup.key \"$BACKUP_DIR/workspace.tar.gz"    gpg --batch --yes --cipher-algo AES256 --compress-algo 1 --symmetric \        --passphrase-file ~/.openclaw/backup.key \"$BACKUP_DIR/database.sql.gz"rm"$BACKUP_DIR/workspace.tar.gz""$BACKUP_DIR/database.sql.gz"fi# 清理旧备份find ./backups -name "*.tar.gz.gpg" -mtime +7 -deletefind ./backups -name "*.sql.gz.gpg" -mtime +7 -deleteecho"Backup completed: $BACKUP_DIR"

第3项配置:网络与通信安全

网络安全配置确保OpenClaw能够安全地与外部系统通信。

HTTPS配置

SSL证书配置

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
# config/ssl.yamlssl:enabled:truecertificate:"/etc/ssl/certs/openclaw.crt"private_key:"/etc/ssl/private/openclaw.key"ca_bundle:"/etc/ssl/certs/ca-bundle.crt"protocols:-"TLSv1.2"-"TLSv1.3"ciphers:-"ECDHE-RSA-AES256-GCM-SHA384"-"ECDHE-RSA-AES128-GCM-SHA256"-"ECDHE-RSA-AES256-SHA384"-"ECDHE-RSA-AES128-SHA256"

Let's Encrypt自动续期

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
# scripts/renew-ssl.sh#!/bin/bash# 使用Certbot获取和续期证书certbot certonly --webroot -w /var/www/html \    -d your-openclaw-domain.com \    --non-interactive \    --agree-tos \    --email admin@your-domain.com# 重启OpenClaw服务以加载新证书systemctl reload openclaw# 发送通知echo"SSL certificate renewed successfully" | mail -s "SSL Renewal" admin@your-domain.com

防火墙配置

UFW防火墙规则

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
# 只允许必要的端口ufw default deny incomingufw default allow outgoing# OpenClaw主服务端口ufw allow 8080/tcp# HTTPS端口ufw allow 443/tcp# SSH端口(仅限管理)ufw allow from 192.168.1.0/24 to any port 22# 启用防火墙ufw enable

应用层防火墙配置

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
# config/firewall.yamlapplication_firewall:enabled:truerate_limiting:requests_per_minute:100burst_size:20ip_whitelist: ["192.168.1.0/24""10.0.0.0/8"]content_filtering:blocked_user_agents: ["malicious-bot""scanner"]allowed_content_types: ["application/json""text/plain""text/markdown"]ip_reputation:enabled:trueblock_known_malicious:truereputation_service:"abuseipdb"api_key:"${ABUSEIPDB_API_KEY}"

代理和负载均衡

Nginx反向代理配置

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
# /etc/nginx/sites-available/openclawupstream openclaw_backend {server127.0.0.1:8080;keepalive32;}server {listen443 ssl http2;server_name your-openclaw-domain.com;# SSL配置ssl_certificate /etc/ssl/certs/openclaw.crt;ssl_certificate_key /etc/ssl/private/openclaw.key;ssl_protocols TLSv1.2 TLSv1.3;ssl_ciphers ECDHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES128-GCM-SHA256;# 安全头add_header X-Frame-Options DENY;add_header X-Content-Type-Options nosniff;add_header X-XSS-Protection "1; mode=block";add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;# 代理配置location / {proxy_pass http://openclaw_backend;proxy_http_version1.1;proxy_set_header Upgrade $http_upgrade;proxy_set_header Connection "upgrade";proxy_set_header Host $host;proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;proxy_set_header X-Forwarded-Proto $scheme;# 超时设置proxy_connect_timeout30s;proxy_send_timeout30s;proxy_read_timeout30s;    }# 健康检查端点location /health {proxy_pass http://openclaw_backend/health;access_logoff;    }}

第4项配置:内存与性能调优

性能调优配置确保OpenClaw能够高效利用系统资源。

内存管理配置

JVM内存配置(如果使用Java组件)

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
# scripts/set-java-memory.sh#!/bin/bash# 根据系统内存自动配置JVM参数TOTAL_MEMORY=$(free -m | awk 'NR==2{printf "%.0f", $2}')HEAP_SIZE=$((TOTAL_MEMORY * 70 / 100))  # 使用70%的系统内存export JAVA_OPTS="-Xms${HEAP_SIZE}m -Xmx${HEAP_SIZE}m \   -XX:+UseG1GC \   -XX:MaxGCPauseMillis=200 \   -XX:G1HeapRegionSize=16m \   -XX:G1ReservePercent=15 \                  -XX:InitiatingHeapOccupancyPercent=35"

Node.js内存配置

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
# config/memory.yamlnodejs:max_old_space_size:4096# 4GBheap_limit:"80%"# 使用80%的可用内存garbage_collection:interval:30000# 30秒force_on_low_memory:true

并发与线程配置

工作线程配置

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
# config/concurrency.yamlconcurrency:worker_threads:8max_concurrent_tasks:100task_queue_size:1000thread_pool_size:16agent_concurrency:default:5researcher:10writer:3reviewer:2publisher:5learning:1workflow_concurrency:default:3complex:1simple:10

异步任务队列配置

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
// 异步任务队列实现classAsyncTaskQueue {constructor(config) {this.maxConcurrentTasks = config.max_concurrent_tasks || 100;this.queueSize = config.task_queue_size || 1000;this.workerThreads = config.worker_threads || 8;this.queue = [];this.activeTasks = 0;this.workers = [];this.initializeWorkers();  }initializeWorkers() {for (let i = 0; i < this.workerThreads; i++) {const worker = newWorkerThread(this.processTask.bind(this));this.workers.push(worker);    }  }asyncenqueue(task) {if (this.queue.length >= this.queueSize) {thrownewError('Task queue is full');    }returnnewPromise((resolve, reject) => {this.queue.push({ task, resolve, reject });this.processQueue();    });  }asyncprocessQueue() {while (this.activeTasks < this.maxConcurrentTasks && this.queue.length > 0) {const { task, resolve, reject } = this.queue.shift();this.activeTasks++;try {const result = awaitthis.executeTask(task);resolve(result);      } catch (error) {reject(error);      } finally {this.activeTasks--;      }    }  }asyncexecuteTask(task) {// 分配给空闲的工作线程const availableWorker = this.workers.find(worker => !worker.busy);if (availableWorker) {returnawait availableWorker.execute(task);    } else {// 所有工作线程都忙,等待第一个完成const firstWorker = this.workers[0];returnawait firstWorker.execute(task);    }  }}

缓存策略配置

多层缓存配置

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
# config/cache.yamlcache:layers:l1_memory:type:"memory"size:"100MB"ttl:300# 5分钟eviction_policy:"LRU"l2_disk:type:"disk"path:"./data/cache"size:"1GB"ttl:3600# 1小时compression:truel3_database:type:"redis"host:"localhost"port:6379db:0ttl:86400# 24小时strategies:embedding_cache:layer:"l1_memory"key_pattern:"embedding:{hash}"search_result_cache:layer:"l2_disk"key_pattern:"search:{query_hash}"agent_response_cache:layer:"l3_database"key_pattern:"agent:{agent_id}:{task_hash}"

缓存实现代码

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80
  • 81
  • 82
  • 83
  • 84
  • 85
  • 86
  • 87
  • 88
// 多层缓存实现classMultiLayerCache {constructor(config) {this.layers = {};// 初始化L1内存缓存if (config.layers.l1_memory) {this.layers.l1 = newMemoryCache(config.layers.l1_memory);    }// 初始化L2磁盘缓存if (config.layers.l2_disk) {this.layers.l2 = newDiskCache(config.layers.l2_disk);    }// 初始化L3数据库缓存if (config.layers.l3_database) {this.layers.l3 = newRedisCache(config.layers.l3_database);    }  }asyncget(key, strategy = 'default') {// 尝试从L1缓存获取if (this.layers.l1) {const value = awaitthis.layers.l1.get(key);if (value !== null) {return value;      }    }// 尝试从L2缓存获取if (this.layers.l2) {const value = awaitthis.layers.l2.get(key);if (value !== null) {// 回填到L1缓存if (this.layers.l1) {awaitthis.layers.l1.set(key, value);        }return value;      }    }// 尝试从L3缓存获取if (this.layers.l3) {const value = awaitthis.layers.l3.get(key);if (value !== null) {// 回填到L2和L1缓存if (this.layers.l2) {awaitthis.layers.l2.set(key, value);        }if (this.layers.l1) {awaitthis.layers.l1.set(key, value);        }return value;      }    }returnnull;  }asyncset(key, value, strategy = 'default') {const config = this.getStrategyConfig(strategy);const layer = this.layers[config.layer];if (layer) {await layer.set(key, value, config.ttl);    }// 如果是L3缓存,也设置到L2和L1if (config.layer === 'l3' && this.layers.l2) {awaitthis.layers.l2.set(key, value, config.ttl / 2);if (this.layers.l1) {awaitthis.layers.l1.set(key, value, config.ttl / 4);      }    }  }getStrategyConfig(strategy) {const strategies = {'default': { layer'l1'ttl300 },'embedding': { layer'l1'ttl3600 },'search_result': { layer'l2'ttl1800 },'agent_response': { layer'l3'ttl86400 }    };return strategies[strategy] || strategies.default;  }}

第5项配置:日志与监控

完善的日志和监控配置是系统运维的基础。

日志级别与格式配置

日志配置

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
# config/logging.yamllogging:level:"info"format:"json"output:-"file:./logs/openclaw.log"-"stdout"rotation:size:"100MB"backups:10compress:truelevels:agent:"debug"workflow:"info"memory:"warn"security:"error"performance:"info"structured_logging:enabled:truefields:-"timestamp"-"level"-"service"-"request_id"-"user_id"-"agent_id"-"workflow_id"-"message"-"duration_ms"-"memory_usage_mb"

日志实现代码

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
// 结构化日志实现classStructuredLogger {constructor(config) {this.level = config.level || 'info';this.format = config.format || 'json';this.outputs = config.output || ['stdout'];this.structured = config.structured_logging?.enabled || false;this.levelMap = {'debug'0,'info'1,'warn'2,'error'3,'fatal'4    };  }log(level, message, context = {}) {if (this.levelMap[level] < this.levelMap[this.level]) {return;    }const logEntry = {timestampnewDate().toISOString(),level: level,message: message,      ...context    };if (this.structured) {// 添加结构化字段      logEntry.service = context.service || 'openclaw';      logEntry.request_id = context.request_id || generateRequestId();      logEntry.user_id = context.user_id || 'unknown';      logEntry.duration_ms = context.duration_ms || 0;      logEntry.memory_usage_mb = process.memoryUsage().rss / 1024 / 1024;    }const formattedLog = this.formatLog(logEntry);this.writeLog(formattedLog);  }formatLog(entry) {if (this.format === 'json') {returnJSON.stringify(entry);    } else {return`${entry.timestamp} [${entry.level}${entry.message}`;    }  }writeLog(formattedLog) {for (const output ofthis.outputs) {if (output.startsWith('file:')) {const filePath = output.substring(5);        fs.appendFileSync(filePath, formattedLog + '\n');      } elseif (output === 'stdout') {console.log(formattedLog);      }    }  }}

性能监控配置

Prometheus监控配置

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
# config/monitoring.yamlmonitoring:prometheus:enabled:trueendpoint:"/metrics"port:9090scrape_interval:15smetrics:-name:"openclaw_agent_count"type:"gauge"help:"Number of active agents"-name:"openclaw_workflow_duration_seconds"type:"histogram"help:"Workflow execution duration"buckets: [15103060300]-name:"openclaw_memory_usage_bytes"type:"gauge"help:"Memory usage in bytes"-name:"openclaw_request_rate"type:"counter"help:"Total number of requests"-name:"openclaw_error_count"type:"counter"help:"Total number of errors"labels: ["error_type""service"]

Grafana仪表板配置

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
{"dashboard":{"title":"OpenClaw Performance Dashboard","panels":[{"title":"Active Agents","type":"stat","targets":[{"expr":"openclaw_agent_count","legendFormat":"Active Agents"}]},{"title":"Workflow Duration","type":"graph","targets":[{"expr":"rate(openclaw_workflow_duration_seconds_sum[5m]) / rate(openclaw_workflow_duration_seconds_count[5m])","legendFormat":"Average Duration"}]},{"title":"Memory Usage","type":"graph","targets":[{"expr":"openclaw_memory_usage_bytes","legendFormat":"Memory Usage (bytes)"}]},{"title":"Request Rate","type":"graph","targets":[{"expr":"rate(openclaw_request_rate[5m])","legendFormat":"Requests per second"}]},{"title":"Error Rate","type":"graph","targets":[{"expr":"rate(openclaw_error_count[5m])","legendFormat":"{{error_type}} - {{service}}"}]}]}}

健康检查配置

健康检查端点

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80
  • 81
  • 82
  • 83
  • 84
  • 85
  • 86
  • 87
  • 88
// 健康检查实现classHealthChecker {constructor() {this.checks = {databasethis.checkDatabase,cachethis.checkCache,storagethis.checkStorage,external_servicesthis.checkExternalServices    };  }asynccheckHealth() {const results = {};let overallStatus = 'healthy';for (const [name, check] ofObject.entries(this.checks)) {try {const result = await check.call(this);        results[name] = { status'healthy', ...result };      } catch (error) {        results[name] = { status'unhealthy'error: error.message };        overallStatus = 'unhealthy';      }    }return {status: overallStatus,timestampnewDate().toISOString(),checks: results    };  }asynccheckDatabase() {const startTime = Date.now();await database.query('SELECT 1');const responseTime = Date.now() - startTime;return { response_time_ms: responseTime };  }asynccheckCache() {const startTime = Date.now();await cache.set('health_check''ok'10);const value = await cache.get('health_check');const responseTime = Date.now() - startTime;if (value !== 'ok') {thrownewError('Cache integrity check failed');    }return { response_time_ms: responseTime };  }asynccheckStorage() {const testFile = './data/health_check.txt';const startTime = Date.now();await fs.writeFile(testFile, 'health check');const content = await fs.readFile(testFile, 'utf8');await fs.unlink(testFile);const responseTime = Date.now() - startTime;if (content !== 'health check') {thrownewError('Storage integrity check failed');    }return { response_time_ms: responseTime };  }asynccheckExternalServices() {const services = ['feishu''github''claude'];const results = {};for (const service of services) {try {const startTime = Date.now();await externalService[service].ping();const responseTime = Date.now() - startTime;        results[service] = { status'healthy'response_time_ms: responseTime };      } catch (error) {        results[service] = { status'unhealthy'error: error.message };      }    }return results;  }}

第6项配置:外部服务集成

外部服务集成扩展了OpenClaw的功能边界。

Claude API集成

Claude API配置

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
# config/claude.yamlclaude:enabled:trueapi_key:"${CLAUDE_API_KEY}"model:"claude-3-opus-20240229"max_tokens:4096temperature:0.7top_p:0.9timeout:30000# 30秒rate_limiting:requests_per_minute:50tokens_per_minute:100000caching:enabled:truettl:3600# 1小时

Claude API客户端实现

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
// Claude API客户端classClaudeClient {constructor(config) {this.apiKey = config.api_key;this.model = config.model;this.maxTokens = config.max_tokens;this.temperature = config.temperature;this.timeout = config.timeout;this.rateLimiter = newRateLimiter(config.rate_limiting);this.cache = newCache(config.caching);  }asyncgenerate(prompt, options = {}) {// 检查缓存const cacheKey = this.generateCacheKey(prompt, options);const cachedResult = awaitthis.cache.get(cacheKey);if (cachedResult) {return cachedResult;    }// 检查速率限制awaitthis.rateLimiter.waitForToken();// 构建请求const requestBody = {model: options.model || this.model,max_tokens: options.max_tokens || this.maxTokens,temperature: options.temperature || this.temperature,messages: [{ role'user'content: prompt }]    };// 发送请求const response = awaitfetch('https://api.anthropic.com/v1/messages', {method'POST',headers: {'x-api-key'this.apiKey,'anthropic-version''2023-06-01','content-type''application/json'      },bodyJSON.stringify(requestBody),timeoutthis.timeout    });if (!response.ok) {thrownewError(`Claude API error: ${response.status}${response.statusText}`);    }const result = await response.json();const text = result.content[0].text;// 缓存结果awaitthis.cache.set(cacheKey, text, options.ttl || 3600);return text;  }generateCacheKey(prompt, options) {const keyData = {prompt: prompt,model: options.model || this.model,temperature: options.temperature || this.temperature,max_tokens: options.max_tokens || this.maxTokens    };return crypto.createHash('md5').update(JSON.stringify(keyData)).digest('hex');  }}

Feishu集成

Feishu机器人配置

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
# config/feishu.yamlfeishu:enabled:trueapp_id:"your_feishu_app_id"app_secret:"${FEISHU_APP_SECRET}"verification_token:"${FEISHU_VERIFICATION_TOKEN}"encrypt_key:"${FEISHU_ENCRYPT_KEY}"bot:name:"青鸾"avatar:"https://your-domain.com/avatar.png"description:"OpenClaw AI助手"webhooks:-name:"daily_report"url:"https://your-domain.com/webhook/daily-report"events: ["message.receive"]-name:"system_alert"url:"https://your-domain.com/webhook/system-alert"events: ["system.error""system.warning"]

Feishu消息发送实现

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
// Feishu消息发送器classFeishuMessageSender {constructor(config) {this.appId = config.app_id;this.appSecret = config.app_secret;this.verificationToken = config.verification_token;this.encryptKey = config.encrypt_key;  }asyncgetTenantAccessToken() {const response = awaitfetch('https://open.feishu.cn/open-apis/auth/v3/tenant_access_token/internal', {method'POST',headers: { 'Content-Type''application/json' },bodyJSON.stringify({app_idthis.appId,app_secretthis.appSecret      })    });const result = await response.json();return result.tenant_access_token;  }asyncsendMessage(chatId, content, msgType = 'text') {const accessToken = awaitthis.getTenantAccessToken();const message = {receive_id: chatId,contenttypeof content === 'string' ? content : JSON.stringify(content),msg_type: msgType    };const response = awaitfetch('https://open.feishu.cn/open-apis/im/v1/messages?receive_id_type=chat_id', {method'POST',headers: {'Authorization'`Bearer ${accessToken}`,'Content-Type''application/json'      },bodyJSON.stringify(message)    });if (!response.ok) {thrownewError(`Feishu API error: ${response.status}${response.statusText}`);    }returnawait response.json();  }asyncsendRichTextMessage(chatId, richTextContent) {returnawaitthis.sendMessage(chatId, richTextContent, 'post');  }}

GitHub集成

GitHub Webhook配置

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
# config/github.yamlgithub:enabled:trueapp_id:123456private_key:"${GITHUB_PRIVATE_KEY}"webhook_secret:"${GITHUB_WEBHOOK_SECRET}"repositories:-"owner/repo1"-"owner/repo2"events:-"push"-"pull_request"-"issues"-"issue_comment"

GitHub事件处理器

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
// GitHub事件处理器classGitHubEventHandler {constructor(config) {this.appId = config.app_id;this.privateKey = config.private_key;this.webhookSecret = config.webhook_secret;this.repositories = config.repositories;  }asyncverifyWebhookSignature(payload, signature, timestamp) {const expectedSignature = crypto      .createHmac('sha256'this.webhookSecret)      .update(`${timestamp}:${payload}`)      .digest('hex');return crypto.timingSafeEqual(Buffer.from(signature, 'hex'),Buffer.from(expectedSignature, 'hex')    );  }asynchandleEvent(eventType, payload) {switch (eventType) {case'push':returnawaitthis.handlePushEvent(payload);case'pull_request':returnawaitthis.handlePullRequestEvent(payload);case'issues':returnawaitthis.handleIssuesEvent(payload);case'issue_comment':returnawaitthis.handleIssueCommentEvent(payload);default:console.warn(`Unhandled GitHub event: ${eventType}`);returnnull;    }  }asynchandlePushEvent(payload) {const { repository, commits } = payload;// 检查是否是配置的仓库if (!this.repositories.includes(`${repository.owner.name}/${repository.name}`)) {returnnull;    }// 处理推送事件const commitMessages = commits.map(commit => commit.message).join('\n');const branch = payload.ref.replace('refs/heads/''');// 发送通知await feishu.sendMessage(      process.env.FEISHU_CHAT_ID,`🚀 **${repository.name}** 新推送到分支 **${branch}**\n\n${commitMessages}`    );return { handledtruerepository: repository.namebranch: branch };  }}

第7项配置:用户界面与体验优化

用户界面配置提升了OpenClaw的易用性。

Web界面配置

Web界面定制

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
# config/web.yamlweb:enabled:trueport:8080host:"0.0.0.0"base_url:"https://your-openclaw-domain.com"theme:primary_color:"#2563EB"secondary_color:"#10B981"background_color:"#F9FAFB"text_color:"#1F2937"features:dark_mode:truenotifications:truekeyboard_shortcuts:truevoice_commands:falsepages:dashboard:enabled:truewidgets: ["agents""workflows""memory""performance"]agents:enabled:trueshow_status:trueshow_performance:trueworkflows:enabled:trueshow_history:trueshow_templates:truememory:enabled:trueshow_search:trueshow_timeline:true

命令行界面配置

CLI命令配置

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
# config/cli.yamlcli:enabled:truecommands:-name:"claude"description:"快速启动Claude Code"alias:"c"-name:"claude-bg"description:"后台运行任务"alias:"cb"-name:"plan"description:"创建实现计划"alias:"p"-name:"code-review"description:"代码审查"alias:"cr"-name:"cubox-sync"description:"同步Cubox文章"alias:"cs"completion:enabled:trueshell: ["bash""zsh""fish"]history:enabled:truefile:"~/.openclaw/history"size:1000

语音交互配置

语音识别配置

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
# config/voice.yamlvoice:enabled:falseprovider:"elevenlabs"model:"nova"language:"zh-CN"sample_rate:24000voice_id:"21m00Tcm4TlvDq8ikWAM"wake_word:enabled:truewords: ["青鸾""OpenClaw"]sensitivity:0.8transcription:enabled:truelanguage:"zh-CN"punctuate:truesmart_format:true

第8项配置:安全审计与合规

安全审计配置确保系统符合合规要求。

审计日志配置

审计日志配置

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
# config/audit.yamlaudit:enabled:truelevel:"detailed"retention_days:365events:-"user.login"-"user.logout"-"user.permission_change"-"agent.create"-"agent.delete"-"agent.modify"-"workflow.execute"-"memory.access"-"memory.modify"-"config.change"-"system.shutdown"-"system.startup"sensitive_fields:-"password"-"api_key"-"private_key"-"token"redaction:enabled:truemethod:"mask"mask_character:"*"

合规性配置

GDPR合规配置

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
# config/compliance.yamlcompliance:gdpr:enabled:truedata_retention_days:30right_to_erasure:truedata_portability:trueconsent_management:trueccpa:enabled:falsedo_not_sell:truedata_deletion:truehipaa:enabled:falsephi_protection:trueaudit_logging:truepci_dss:enabled:falsecard_data_protection:truenetwork_security:true

第9项配置:备份与灾难恢复

备份配置确保数据安全。

自动备份配置

备份策略配置

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
# config/backup.yamlbackup:enabled:trueschedule:"0 2 * * *"# 每天凌晨2点retention:daily:7weekly:4monthly:12compression:"gzip"encryption:enabled:truealgorithm:"AES-256"key_rotation_days:90

灾难恢复配置

灾难恢复计划

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
# config/disaster_recovery.yamldisaster_recovery:enabled:truerpo:"1h"# 恢复点目标:1小时rto:"4h"# 恢复时间目标:4小时standby_site:enabled:truelocation:"us-west-2"sync_interval:"5m"failover:automatic:truemanual_override:truenotification_channels: ["email""sms""feishu"]

第10项配置:自定义工作流与技能

自定义配置扩展了OpenClaw的功能。

工作流模板配置

工作流模板

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
# config/workflow_templates.yamlworkflow_templates:-name:"ai_newsletter"description:"AI自动化资讯日报"stages:-name:"collect_news"agent:"researcher"parameters:sources: ["rss""api""web"]time_range:"last_24_hours"-name:"generate_content"agent:"writer"parameters:style:"wechat"length:"800-1200"-name:"review_content"agent:"reviewer"parameters:fact_check:truecompliance_check:true-name:"publish_content"agent:"publisher"parameters:channels: ["wechat""email""feishu"]schedule:"08:00"-name:"code_review"description:"自动化代码审查"stages:-name:"analyze_code"agent:"researcher"parameters:analysis_depth:"comprehensive"-name:"generate_review"agent:"writer"parameters:review_style:"professional"-name:"validate_findings"agent:"reviewer"parameters:validation_level:"high"

技能管理配置

技能配置

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
# config/skills.yamlskills:directory:"./skills"auto_update:trueupdate_interval:"24h"enabled:-"find-skills"-"everything-openclaw"-"claude-code-controller"-"cubox"-"skill-creator"-"memory-setup"-"openclaw-mem"-"proactive-agent"-"system-status-reporter"disabled:-"experimental-skill"permissions:find-skills: ["read_files""write_files"]claude-code-controller: ["execute_code""read_files"]cubox: ["network_access""read_files"]

配置验证与测试

配置验证脚本

配置验证实现

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
// 配置验证器classConfigValidator {constructor() {this.validators = {securitythis.validateSecurityConfig,performancethis.validatePerformanceConfig,integrationthis.validateIntegrationConfig,compliancethis.validateComplianceConfig    };  }asyncvalidateAll(config) {const results = {};let isValid = true;for (const [category, validator] ofObject.entries(this.validators)) {try {const result = await validator.call(this, config);        results[category] = { validtrue, ...result };      } catch (error) {        results[category] = { validfalseerror: error.message };        isValid = false;      }    }return { valid: isValid, results: results };  }asyncvalidateSecurityConfig(config) {const issues = [];// 检查API密钥if (!config.api_key || config.api_key.length < 32) {      issues.push('API key is missing or too short');    }// 检查HTTPS配置if (!config.ssl?.enabled) {      issues.push('HTTPS is not enabled');    }// 检查密码复杂度if (config.admin_password && this.calculatePasswordStrength(config.admin_password) < 3) {      issues.push('Admin password is too weak');    }if (issues.length > 0) {thrownewError(`Security validation failed: ${issues.join(', ')}`);    }return { issues: issues };  }calculatePasswordStrength(password) {let strength = 0;if (password.length >= 8) strength++;if (/[a-z]/.test(password)) strength++;if (/[A-Z]/.test(password)) strength++;if (/[0-9]/.test(password)) strength++;if (/[^a-zA-Z0-9]/.test(password)) strength++;return strength;  }}

配置测试套件

配置测试实现

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
// 配置测试套件describe('OpenClaw Configuration Tests'() => {let config;before(async () => {    config = awaitloadConfig();  });describe('Security Configuration'() => {test('should have valid API key'() => {expect(config.api_key).toBeDefined();expect(config.api_key.length).toBeGreaterThanOrEqual(32);    });test('should have HTTPS enabled'() => {expect(config.ssl.enabled).toBe(true);    });test('should have strong admin password'() => {const strength = calculatePasswordStrength(config.admin_password);expect(strength).toBeGreaterThanOrEqual(4);    });  });describe('Performance Configuration'() => {test('should have reasonable memory limits'() => {expect(config.memory.max_old_space_size).toBeLessThan(8192); // 8GB    });test('should have appropriate concurrency settings'() => {expect(config.concurrency.max_concurrent_tasks).toBeGreaterThan(0);expect(config.concurrency.max_concurrent_tasks).toBeLessThan(1000);    });  });describe('Integration Configuration'() => {test('should have valid external service credentials'async () => {awaitexpect(testClaudeConnection(config.claude)).resolves.toBeTruthy();awaitexpect(testFeishuConnection(config.feishu)).resolves.toBeTruthy();    });  });});

结语:持续优化的配置管理

OpenClaw的配置不是一次性的任务,而是一个持续优化的过程。随着业务需求的变化和技术的发展,配置也需要不断调整和改进。

配置管理最佳实践

  1. 版本控制:将配置文件纳入Git版本控制

  2. 环境分离:为开发、测试、生产环境维护不同的配置

  3. 自动化验证:在部署前自动验证配置的有效性

  4. 文档化:为每个配置项提供详细的文档说明

  5. 监控告警:监控配置相关的关键指标并设置告警

通过遵循这10项关键配置,您可以确保OpenClaw系统在安全性、性能和功能性方面都达到生产环境的要求。记住,配置的目的是为了支持业务,而不是增加复杂性。始终保持配置的简洁性和可维护性。

基本 文件 流程 错误 SQL 调试
  1. 请求信息 : 2026-04-01 15:36:41 HTTP/1.1 GET : https://www.yeyulingfeng.com/a/477196.html
  2. 运行时间 : 0.130596s [ 吞吐率:7.66req/s ] 内存消耗:5,258.91kb 文件加载:145
  3. 缓存信息 : 0 reads,0 writes
  4. 会话信息 : SESSION_ID=7d0e12400d6bff51186a65d2b7e9b46c
  1. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/public/index.php ( 0.79 KB )
  2. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/autoload.php ( 0.17 KB )
  3. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/composer/autoload_real.php ( 2.49 KB )
  4. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/composer/platform_check.php ( 0.90 KB )
  5. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/composer/ClassLoader.php ( 14.03 KB )
  6. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/composer/autoload_static.php ( 6.05 KB )
  7. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-helper/src/helper.php ( 8.34 KB )
  8. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-validate/src/helper.php ( 2.19 KB )
  9. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/ralouphie/getallheaders/src/getallheaders.php ( 1.60 KB )
  10. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/helper.php ( 1.47 KB )
  11. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/stubs/load_stubs.php ( 0.16 KB )
  12. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Exception.php ( 1.69 KB )
  13. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-container/src/Facade.php ( 2.71 KB )
  14. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/symfony/deprecation-contracts/function.php ( 0.99 KB )
  15. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/symfony/polyfill-mbstring/bootstrap.php ( 8.26 KB )
  16. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/symfony/polyfill-mbstring/bootstrap80.php ( 9.78 KB )
  17. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/symfony/var-dumper/Resources/functions/dump.php ( 1.49 KB )
  18. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-dumper/src/helper.php ( 0.18 KB )
  19. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/symfony/var-dumper/VarDumper.php ( 4.30 KB )
  20. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/guzzlehttp/guzzle/src/functions_include.php ( 0.16 KB )
  21. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/guzzlehttp/guzzle/src/functions.php ( 5.54 KB )
  22. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/App.php ( 15.30 KB )
  23. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-container/src/Container.php ( 15.76 KB )
  24. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/psr/container/src/ContainerInterface.php ( 1.02 KB )
  25. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/app/provider.php ( 0.19 KB )
  26. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Http.php ( 6.04 KB )
  27. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-helper/src/helper/Str.php ( 7.29 KB )
  28. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Env.php ( 4.68 KB )
  29. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/app/common.php ( 0.03 KB )
  30. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/helper.php ( 18.78 KB )
  31. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Config.php ( 5.54 KB )
  32. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/config/alipay.php ( 3.59 KB )
  33. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/facade/Env.php ( 1.67 KB )
  34. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/config/app.php ( 0.95 KB )
  35. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/config/cache.php ( 0.78 KB )
  36. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/config/console.php ( 0.23 KB )
  37. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/config/cookie.php ( 0.56 KB )
  38. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/config/database.php ( 2.48 KB )
  39. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/config/filesystem.php ( 0.61 KB )
  40. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/config/lang.php ( 0.91 KB )
  41. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/config/log.php ( 1.35 KB )
  42. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/config/middleware.php ( 0.19 KB )
  43. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/config/route.php ( 1.89 KB )
  44. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/config/session.php ( 0.57 KB )
  45. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/config/trace.php ( 0.34 KB )
  46. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/config/view.php ( 0.82 KB )
  47. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/app/event.php ( 0.25 KB )
  48. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Event.php ( 7.67 KB )
  49. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/app/service.php ( 0.13 KB )
  50. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/app/AppService.php ( 0.26 KB )
  51. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Service.php ( 1.64 KB )
  52. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Lang.php ( 7.35 KB )
  53. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/lang/zh-cn.php ( 13.70 KB )
  54. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/initializer/Error.php ( 3.31 KB )
  55. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/initializer/RegisterService.php ( 1.33 KB )
  56. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/services.php ( 0.14 KB )
  57. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/service/PaginatorService.php ( 1.52 KB )
  58. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/service/ValidateService.php ( 0.99 KB )
  59. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/service/ModelService.php ( 2.04 KB )
  60. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-trace/src/Service.php ( 0.77 KB )
  61. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Middleware.php ( 6.72 KB )
  62. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/initializer/BootService.php ( 0.77 KB )
  63. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/Paginator.php ( 11.86 KB )
  64. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-validate/src/Validate.php ( 63.20 KB )
  65. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/Model.php ( 23.55 KB )
  66. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/model/concern/Attribute.php ( 21.05 KB )
  67. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/model/concern/AutoWriteData.php ( 4.21 KB )
  68. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/model/concern/Conversion.php ( 6.44 KB )
  69. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/model/concern/DbConnect.php ( 5.16 KB )
  70. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/model/concern/ModelEvent.php ( 2.33 KB )
  71. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/model/concern/RelationShip.php ( 28.29 KB )
  72. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-helper/src/contract/Arrayable.php ( 0.09 KB )
  73. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-helper/src/contract/Jsonable.php ( 0.13 KB )
  74. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/model/contract/Modelable.php ( 0.09 KB )
  75. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Db.php ( 2.88 KB )
  76. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/DbManager.php ( 8.52 KB )
  77. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Log.php ( 6.28 KB )
  78. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Manager.php ( 3.92 KB )
  79. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/psr/log/src/LoggerTrait.php ( 2.69 KB )
  80. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/psr/log/src/LoggerInterface.php ( 2.71 KB )
  81. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Cache.php ( 4.92 KB )
  82. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/psr/simple-cache/src/CacheInterface.php ( 4.71 KB )
  83. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-helper/src/helper/Arr.php ( 16.63 KB )
  84. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/cache/driver/File.php ( 7.84 KB )
  85. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/cache/Driver.php ( 9.03 KB )
  86. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/contract/CacheHandlerInterface.php ( 1.99 KB )
  87. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/app/Request.php ( 0.09 KB )
  88. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Request.php ( 55.78 KB )
  89. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/app/middleware.php ( 0.25 KB )
  90. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Pipeline.php ( 2.61 KB )
  91. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-trace/src/TraceDebug.php ( 3.40 KB )
  92. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/middleware/SessionInit.php ( 1.94 KB )
  93. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Session.php ( 1.80 KB )
  94. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/session/driver/File.php ( 6.27 KB )
  95. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/contract/SessionHandlerInterface.php ( 0.87 KB )
  96. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/session/Store.php ( 7.12 KB )
  97. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Route.php ( 23.73 KB )
  98. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/route/RuleName.php ( 5.75 KB )
  99. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/route/Domain.php ( 2.53 KB )
  100. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/route/RuleGroup.php ( 22.43 KB )
  101. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/route/Rule.php ( 26.95 KB )
  102. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/route/RuleItem.php ( 9.78 KB )
  103. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/route/app.php ( 3.94 KB )
  104. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/facade/Route.php ( 4.70 KB )
  105. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/route/dispatch/Controller.php ( 4.74 KB )
  106. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/route/Dispatch.php ( 10.44 KB )
  107. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/app/controller/Index.php ( 9.87 KB )
  108. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/app/BaseController.php ( 2.05 KB )
  109. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/facade/Db.php ( 0.93 KB )
  110. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/connector/Mysql.php ( 5.44 KB )
  111. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/PDOConnection.php ( 52.47 KB )
  112. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/Connection.php ( 8.39 KB )
  113. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/ConnectionInterface.php ( 4.57 KB )
  114. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/builder/Mysql.php ( 16.58 KB )
  115. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/Builder.php ( 24.06 KB )
  116. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/BaseBuilder.php ( 27.50 KB )
  117. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/Query.php ( 15.71 KB )
  118. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/BaseQuery.php ( 45.13 KB )
  119. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/concern/TimeFieldQuery.php ( 7.43 KB )
  120. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/concern/AggregateQuery.php ( 3.26 KB )
  121. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/concern/ModelRelationQuery.php ( 20.07 KB )
  122. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/concern/ParamsBind.php ( 3.66 KB )
  123. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/concern/ResultOperation.php ( 7.01 KB )
  124. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/concern/WhereQuery.php ( 19.37 KB )
  125. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/concern/JoinAndViewQuery.php ( 7.11 KB )
  126. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/concern/TableFieldInfo.php ( 2.63 KB )
  127. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/concern/Transaction.php ( 2.77 KB )
  128. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/log/driver/File.php ( 5.96 KB )
  129. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/contract/LogHandlerInterface.php ( 0.86 KB )
  130. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/log/Channel.php ( 3.89 KB )
  131. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/event/LogRecord.php ( 1.02 KB )
  132. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-helper/src/Collection.php ( 16.47 KB )
  133. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/facade/View.php ( 1.70 KB )
  134. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/View.php ( 4.39 KB )
  135. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/app/controller/Es.php ( 3.30 KB )
  136. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Response.php ( 8.81 KB )
  137. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/response/View.php ( 3.29 KB )
  138. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Cookie.php ( 6.06 KB )
  139. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-view/src/Think.php ( 8.38 KB )
  140. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/contract/TemplateHandlerInterface.php ( 1.60 KB )
  141. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-template/src/Template.php ( 46.61 KB )
  142. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-template/src/template/driver/File.php ( 2.41 KB )
  143. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-template/src/template/contract/DriverInterface.php ( 0.86 KB )
  144. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/runtime/temp/c935550e3e8a3a4c27dd94e439343fdf.php ( 31.80 KB )
  145. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-trace/src/Html.php ( 4.42 KB )
  1. CONNECT:[ UseTime:0.000666s ] mysql:host=127.0.0.1;port=3306;dbname=wenku;charset=utf8mb4
  2. SHOW FULL COLUMNS FROM `fenlei` [ RunTime:0.000703s ]
  3. SELECT * FROM `fenlei` WHERE `fid` = 0 [ RunTime:0.000356s ]
  4. SELECT * FROM `fenlei` WHERE `fid` = 63 [ RunTime:0.000248s ]
  5. SHOW FULL COLUMNS FROM `set` [ RunTime:0.000468s ]
  6. SELECT * FROM `set` [ RunTime:0.000217s ]
  7. SHOW FULL COLUMNS FROM `article` [ RunTime:0.000505s ]
  8. SELECT * FROM `article` WHERE `id` = 477196 LIMIT 1 [ RunTime:0.000800s ]
  9. UPDATE `article` SET `lasttime` = 1775029001 WHERE `id` = 477196 [ RunTime:0.021378s ]
  10. SELECT * FROM `fenlei` WHERE `id` = 64 LIMIT 1 [ RunTime:0.006354s ]
  11. SELECT * FROM `article` WHERE `id` < 477196 ORDER BY `id` DESC LIMIT 1 [ RunTime:0.000669s ]
  12. SELECT * FROM `article` WHERE `id` > 477196 ORDER BY `id` ASC LIMIT 1 [ RunTime:0.000403s ]
  13. SELECT * FROM `article` WHERE `id` < 477196 ORDER BY `id` DESC LIMIT 10 [ RunTime:0.001483s ]
  14. SELECT * FROM `article` WHERE `id` < 477196 ORDER BY `id` DESC LIMIT 10,10 [ RunTime:0.000790s ]
  15. SELECT * FROM `article` WHERE `id` < 477196 ORDER BY `id` DESC LIMIT 20,10 [ RunTime:0.002536s ]
0.132380s