CoPaw 配置管理详解

CoPaw 配置管理详解

CoPaw 的配置系统灵活而强大,支持多种配置方式和环境管理。本文将详细介绍 CoPaw 的配置结构、命令和使用方法。

配置系统概述

配置文件位置

~/.copaw/
├── config.json          # 主配置文件
├── config.prod.json     # 生产环境配置
├── config.dev.json      # 开发环境配置
├── config.test.json     # 测试环境配置
└── env                  # 环境变量文件

配置优先级

1. 环境变量 (ENV)  ──────────────────┐
2. 命令行参数     ─────────────────┤
3. 环境配置文件   ────────────────┤
4. 主配置文件     ──────────────┤
5. 默认配置       ────────────┘

优先级规则:后面加载的配置会覆盖前面的配置。

配置文件结构

主配置文件示例

{
  "version": "1.0.0",
  "environment": "prod",

  "channels": {
    "console": {
      "enabled": true,
      "history_size": 1000
    },
    "slack": {
      "enabled": false
    },
    "telegram": {
      "enabled": true,
      "bot_token": "xxx"
    }
  },

  "memory": {
    "enabled": true,
    "storage_path": ".copaw/memory",
    "daily_notes": {
      "enabled": true
    }
  },

  "cron": {
    "enabled": true,
    "timezone": "Asia/Shanghai"
  },

  "mcp": {
    "enabled": true,
    "tools": []
  },

  "models": {
    "default": "gpt-4",
    "fallback": "gpt-3.5-turbo"
  },

  "logging": {
    "level": "info",
    "file": ".copaw/logs/copaw.log"
  },

  "security": {
    "enable_auth": false,
    "allowed_users": []
  }
}

环境配置示例

开发环境 (config.dev.json):

{
  "environment": "dev",
  "logging": {
    "level": "debug"
  },
  "channels": {
    "console": {
      "color_output": true
    }
  },
  "memory": {
    "storage_path": ".copaw/memory/dev"
  }
}

生产环境 (config.prod.json):

{
  "environment": "prod",
  "logging": {
    "level": "warn"
  },
  "security": {
    "enable_auth": true
  }
}

配置命令

查看配置

# 查看所有配置
/config

# 查看特定配置项
/config get channels.console.enabled

# 查看嵌套配置
/config get channels

# 查看当前环境
/config get environment

设置配置

# 设置配置项
/config set channels.console.enabled true

# 设置嵌套配置
/config set channels.telegram.bot_token 123456:ABC

# 设置数组元素
/config set channels.slack.channels.[0].name general

# 设置多个配置项
/config set \
  channels.console.enabled true \
  memory.enabled true \
  cron.enabled true

删除配置

# 删除配置项
/config delete channels.slack

# 删除数组元素
/config delete channels.slack.channels.[0]

# 重置为默认值
/config reset channels.console

保存和加载

# 保存配置
/config save

# 保存到指定文件
/config save --output config.custom.json

# 加载配置
/config load config.custom.json

# 重新加载配置
/config reload

环境管理

切换环境

# 切换到开发环境
/config env dev

# 切换到生产环境
/config env prod

# 切换到测试环境
/config env test

# 查看当前环境
/config env show

环境配置文件

配置文件加载顺序:

  1. config.json - 基础配置
  2. config.{env}.json - 环境特定配置(覆盖)
  3. 环境变量
  4. 命令行参数

环境变量

使用 .env 文件:

# .env
COPOW_ENV=prod
COPOW_CHANNELS_SLACK_ENABLED=true
COPOW_CHANNELS_SLACK_BOT_TOKEN=xoxb-xxx
COPOW_MEMORY_ENABLED=true

通过命令设置环境变量:

# 设置环境变量
/config env set COPOW_ENV=prod

# 删除环境变量
/config env unset COPOW_ENV

# 查看所有环境变量
/config env list

配置模板

使用模板创建配置

# 使用默认模板创建配置
/config init

# 使用特定模板
/config init --template dev

# 列出可用模板
/config template list

自定义模板

创建 config.template.json

{
  "version": "1.0.0",
  "environment": "{{ENVIRONMENT}}",
  "channels": {
    "console": {
      "enabled": true
    },
    "telegram": {
      "enabled": false
    }
  },
  "memory": {
    "enabled": true,
    "storage_path": "{{MEMORY_PATH}}"
  }
}

使用模板:

/config template apply config.template.json \
  --vars ENVIRONMENT=prod \
  --vars MEMORY_PATH=/data/memory

配置验证

验证配置

# 验证当前配置
/config validate

# 验证指定文件
/config validate config.dev.json

# 查看详细错误
/config validate --verbose

配置 schema

创建配置 schema 文件 config.schema.json

{
  "$schema": "http://json-schema.org/draft-07/schema#",
  "type": "object",
  "properties": {
    "version": {
      "type": "string"
    },
    "environment": {
      "type": "string",
      "enum": ["dev", "test", "prod"]
    },
    "channels": {
      "type": "object",
      "properties": {
        "console": {
          "type": "object",
          "properties": {
            "enabled": {
              "type": "boolean"
            }
          }
        }
      }
    }
  },
  "required": ["version", "environment"]
}

使用 schema 验证:

/config validate --schema config.schema.json

配置导入导出

导出配置

# 导出为 JSON
/config export --output config.backup.json

# 导出为 YAML
/config export --output config.backup.yaml --format yaml

# 导出特定部分
/config export channels --output channels.json

# 导出环境变量
/config export --format env --output .env

导入配置

# 导入配置
/config import config.backup.json

# 合并配置(不覆盖)
/config import config.merge.json --merge

# 导入环境变量
/config import .env --format env

配置加密

加密敏感配置

# 加密配置文件
/config encrypt config.json --key mypassword

# 加密特定配置项
/config encrypt channels.telegram.bot_token

# 生成加密密钥
/config key generate

解密配置

# 解密配置文件
/config decrypt config.json.enc --key mypassword

# 在运行时解密
/config decrypt --runtime

配置备份和恢复

备份配置

# 备份配置
/config backup --output backups/config_backup_$(date +%Y%m%d).json

# 自动备份(每次修改前)
/config set backup.auto_backup true
/config set backup.path backups/

# 保留最近 N 个备份
/config set backup.retention 7

恢复配置

# 列出备份
/config backup list

# 恢复备份
/config restore backups/config_backup_20240115.json

# 预览备份内容
/config backup view backups/config_backup_20240115.json

配置管理最佳实践

1. 使用环境隔离

开发环境 → config.dev.json  → 调试模式、详细日志
测试环境 → config.test.json → 模拟数据、测试配置
生产环境 → config.prod.json → 严格权限、警告日志

2. 敏感信息加密

# 加密 Bot Token
/config encrypt channels.telegram.bot_token

# 加密 API Key
/config encrypt mcp.clients.[0].api_key

# 使用环境变量存储密钥
/config env set COPOW_ENCRYPTION_KEY=mykey

3. 版本控制配置

# 提交配置到 Git
git add config.json config.schema.json
git commit -m "Update config"

# 忽略敏感配置文件
echo "config.prod.json" >> .gitignore
echo "*.enc" >> .gitignore

4. 配置文档化

创建 config.md

# CoPaw 配置说明

## 环境配置

- `config.dev.json`: 开发环境
- `config.prod.json`: 生产环境

## 重要配置项

### channels.console.enabled
- 类型: boolean
- 默认: true
- 说明: 是否启用控制台频道

### memory.enabled
- 类型: boolean
- 默认: true
- 说明: 是否启用记忆系统

5. 配置变更审计

# 启用配置审计
/config set audit.enabled true
/config set audit.log .copaw/logs/audit.log

# 查看审计日志
/config audit list

# 查看特定配置的变更历史
/config audit history channels.console.enabled

常见配置场景

场景 1: 个人开发环境

{
  "environment": "dev",
  "channels": {
    "console": {
      "enabled": true,
      "color_output": true
    }
  },
  "memory": {
    "storage_path": ".copaw/memory/dev"
  },
  "logging": {
    "level": "debug"
  }
}

场景 2: 团队协作环境

{
  "environment": "prod",
  "channels": {
    "slack": {
      "enabled": true,
      "bot_token": "${SLACK_BOT_TOKEN}"
    }
  },
  "security": {
    "enable_auth": true,
    "allowed_users": ["user1", "user2"]
  }
}

场景 3: 生产环境

{
  "environment": "prod",
  "logging": {
    "level": "warn",
    "file": "/var/log/copaw/copaw.log"
  },
  "memory": {
    "storage_path": "/data/copaw/memory",
    "backup_enabled": true
  },
  "security": {
    "enable_auth": true,
    "rate_limit": 1000
  }
}

配置故障排查

Q1: 配置文件找不到?

# 检查配置文件路径
/config path

# 查看所有配置文件
/config files

# 重新定位配置目录
/config path set /custom/path/to/copaw

Q2: 配置不生效?

# 检查配置优先级
/config info

# 查看实际使用的配置
/config show --resolved

# 重新加载配置
/config reload

Q3: 配置验证失败?

# 查看详细错误
/config validate --verbose

# 检查配置 schema
/config validate --schema config.schema.json

# 修复错误后重新验证
/config fix

Q4: 如何重置配置?

# 重置为默认值
/config reset --all

# 重置特定部分
/config reset channels

# 从模板重新初始化
/config init --force

Q5: 配置文件过大?

# 查看配置大小
/config info --size

# 清理旧的备份
/config cleanup --backup

# 压缩配置
/config compress

总结

通过本教程,你应该已经掌握了:

  • ✅ 配置文件结构和优先级
  • ✅ 配置命令的使用
  • ✅ 环境管理和切换
  • ✅ 配置验证和 schema
  • ✅ 配置导入导出
  • ✅ 配置加密和安全
  • ✅ 备份和恢复
  • ✅ 最佳实践和故障排查

下一章

在下一章中,我们将学习 CoPaw CLI 命令详解,了解所有可用的命令行工具。

相关资源

发表回复

后才能评论