ops-claude 项目说明
1. 项目背景
ops-claude 用于 CDN 加速运维、Nginx 配置维护、告警维护、项目配置管理、小脚本管理、发布脚本与回滚脚本管理。
本项目目标是通过统一模板、统一参数、统一规范的方式,提升运维脚本和配置管理效率,并结合 Claude Code 实现标准化生成、修改和维护。
适用场景:
- 新产品接入
- Nginx 配置生成与调整
- 告警规则维护
- 项目配置统一管理
- 发布脚本生成
- 回滚脚本生成
- 巡检与健康检查脚本维护
- 运维文档集中管理
2. 项目名称与目录位置
项目名称:
ops-claude
建议目录位置:
D:\ops-claude
说明:
- 建议统一放在 D 盘根目录下
- 路径尽量避免空格
- 项目根目录可作为 Claude Code 的工作目录
- Windows 10 下推荐使用 VS Code、PowerShell、Git Bash、WSL 配合维护
3. 为什么建议统一放在一个项目里
当前阶段,建议将以下内容统一放在一个项目中维护:
- 告警维护
- 项目配置
- 小脚本
- nginx 配置模板
- 发布脚本
- 回滚脚本
- 健康检查脚本
- 产品参数配置
- 运维规范文档
原因如下:
- 同一批维护人员管理,适合集中维护
- 同一产品的配置、脚本、告警经常联动修改
- 统一参数更容易复用,减少重复配置
- Claude Code 在同一项目内读取上下文更完整
- Git 管理、审计、回滚更方便
4. 什么时候再考虑拆分项目
当前建议先统一管理,只有在以下情况下再考虑拆分:
- 权限隔离要求明显不同
- 维护团队完全不同
- 发布节奏差异很大
- 仓库规模膨胀明显
- 某一类资产已发展为独立平台
当前阶段建议先采用单项目统一管理方式。
5. 推荐目录结构
D:\ops-claude
├── 项目说明.md
├── README.md
├── .claude
│ ├── context.md
│ ├── rules.md
│ └── commands.md
├── docs
│ ├── 运维规范.md
│ ├── 告警维护规范.md
│ ├── 发布流程.md
│ ├── 回滚流程.md
│ └── 产品接入说明.md
├── templates
│ ├── nginx
│ │ └── base-nginx.conf
│ ├── alerts
│ │ └── base-alert-rule.yaml
│ └── shell
│ ├── deploy.sh.tpl
│ ├── rollback.sh.tpl
│ └── healthcheck.sh.tpl
├── products
│ ├── product-a
│ │ ├── product.yaml
│ │ ├── nginx
│ │ ├── alerts
│ │ └── scripts
│ └── product-b
│ ├── product.yaml
│ ├── nginx
│ ├── alerts
│ └── scripts
├── scripts
│ ├── generate_nginx.sh
│ ├── generate_alert.sh
│ ├── validate.sh
│ └── deploy.sh
└── shared
├── contacts.yaml
├── environments.yaml
└── common-vars.yaml
6. 目录说明
6.1 项目根目录
用于统一管理本项目所有文档、模板、配置和脚本。
6.2 .claude
用于存放 Claude Code 的项目上下文和规则。
包含文件:
- context.md:项目背景说明
- rules.md:Claude Code 执行规则
- commands.md:常见任务说明
6.3 docs
用于存放运维规范、告警维护规范、发布流程、回滚流程、产品接入说明等文档。
6.4 templates
用于存放标准模板,包括:
- nginx 配置模板
- 告警规则模板
- shell 脚本模板
6.5 products
每个产品一个目录,按产品维度维护:
- 产品参数配置
- nginx 配置
- 告警规则
- 产品脚本
6.6 scripts
通用工具脚本目录,用于批量生成和校验配置。
6.7 shared
共享配置目录,用于统一维护联系人、环境变量、公共参数。
7. 管理原则
7.1 统一仓库管理
当前阶段采用单仓库统一管理方式,避免参数分散、重复配置和上下文割裂。
7.2 模板优先
所有新脚本、新配置优先基于 templates 目录生成,不建议从零开始手写。
7.3 参数驱动
不同产品之间的差异,统一通过 products/
7.4 生成产物需审核
Claude Code 生成的 nginx 配置、告警规则、shell 脚本,必须经过人工审核后再发布。
7.5 发布前先校验
所有 nginx 配置变更必须先通过 nginx -t。
所有 shell 脚本需进行语法和逻辑检查。
所有告警规则应先在测试环境验证。
7.6 可回滚
配置与脚本修改应具备备份和回滚能力。
8. Windows 10 上的使用建议
8.1 推荐路径
项目统一放置于:
D:\ops-claude
8.2 推荐工具
建议安装以下工具:
- VS Code
- Git for Windows
- PowerShell
- Git Bash
- WSL(推荐,用于 shell 脚本测试)
8.3 路径要求
- 路径尽量不要带空格
- 目录名尽量使用英文
- 文档可使用中文文件名
- 项目不建议放在桌面或下载目录
8.4 换行符要求
shell、yaml、conf 文件建议统一使用 LF 换行,避免在 Linux 环境执行异常。
8.5 使用方式建议
- Windows 本地负责编辑、管理、提交
- Linux/WSL 环境负责脚本测试与配置验证
- 远程 Linux 服务器负责正式部署
具体操作执行-小白模式
你要做的事情,只有 3 步
第 1 步:先创建一个脚本文件
在电脑里新建这个文件:
D:\ops-claude\init.ps1
如果 D:\ops-claude 还没有,你先建这个文件夹。
第 2 步:把我下面给你的全部内容,完整复制进去
也就是:
- 打开
D:\ops-claude\init.ps1 - 把里面原有内容清空
- 把下面这整段 PowerShell 脚本全部复制进去
- 保存
第 3 步:运行这个脚本
打开 PowerShell,执行这一条命令:
powershell -ExecutionPolicy Bypass -File D:\ops-claude\init.ps1
执行完成后,D:\ops-claude 下面的目录和文件就会自动创建好。
最简单操作案例
方法一:用记事本
1)按 Win + R
输入:
notepad
点回车。
2)把下面这段命令复制进去,编码选择:UTF8-BOM编码
3)点击“文件” -> “另存为”
保存到:
D:\init.ps1
保存类型选择:
所有文件
编码如果能选,选:
UTF-8
4)然后按 Win + R
输入:
powershell
回车。
5)在 PowerShell 里粘贴执行:
下面为文件开头
$ErrorActionPreference = "Stop"
[Console]::OutputEncoding = New-Object System.Text.UTF8Encoding($false)
$OutputEncoding = New-Object System.Text.UTF8Encoding($false)
$base = "D:\ops-claude"
if (Test-Path -LiteralPath $base) {
Remove-Item -LiteralPath $base -Recurse -Force
}
$dirs = @(
"$base",
"$base\.claude",
"$base\docs",
"$base\templates",
"$base\templates\nginx",
"$base\templates\alerts",
"$base\templates\shell",
"$base\products",
"$base\products\product-a",
"$base\products\product-a\nginx",
"$base\products\product-a\alerts",
"$base\products\product-a\scripts",
"$base\products\product-b",
"$base\products\product-b\nginx",
"$base\products\product-b\alerts",
"$base\products\product-b\scripts",
"$base\scripts",
"$base\shared"
)
foreach ($dir in $dirs) {
New-Item -ItemType Directory -Force -Path $dir | Out-Null
}
function Write-Utf8BomFile {
param(
[string]$Path,
[string]$Content
)
$utf8Bom = New-Object System.Text.UTF8Encoding($true)
[System.IO.File]::WriteAllText($Path, $Content, $utf8Bom)
}
$projectDescription = @'
# ops-claude 项目说明
ops-claude 是一个用于统一管理 CDN 运维、Nginx 配置、告警规则、项目参数、小脚本、发布脚本、回滚脚本、健康检查脚本与运维规范文档的项目。
## 目录结构
D:\ops-claude
├── 项目说明.md
├── README.md
├── .claude
│ ├── context.md
│ ├── rules.md
│ └── commands.md
├── docs
│ ├── 运维规范.md
│ ├── 告警维护规范.md
│ ├── 发布流程.md
│ ├── 回滚流程.md
│ └── 产品接入说明.md
├── templates
│ ├── nginx
│ │ └── base-nginx.conf
│ ├── alerts
│ │ └── base-alert-rule.yaml
│ └── shell
│ ├── deploy.sh.tpl
│ ├── rollback.sh.tpl
│ └── healthcheck.sh.tpl
├── products
│ ├── product-a
│ │ ├── product.yaml
│ │ ├── nginx
│ │ ├── alerts
│ │ └── scripts
│ └── product-b
│ ├── product.yaml
│ ├── nginx
│ ├── alerts
│ └── scripts
├── scripts
│ ├── generate_nginx.sh
│ ├── generate_alert.sh
│ ├── validate.sh
│ └── deploy.sh
└── shared
├── contacts.yaml
├── environments.yaml
└── common-vars.yaml
## 管理原则
1. 模板优先
2. 参数驱动
3. 生成产物需人工审核
4. 发布前先校验
5. 变更需可回滚
## Claude Code 使用建议
建议优先阅读:
- 项目说明.md
- .claude/context.md
- .claude/rules.md
- products/<product>/product.yaml
- templates/相关模板文件
'@
$readme = @'
# ops-claude
统一管理 CDN 运维、Nginx 配置、告警规则、项目配置、小脚本、发布脚本、回滚脚本与产品参数的运维项目。
详细说明请见:
- 项目说明.md
'@
$context = @'
# 项目上下文
ops-claude 是一个用于 CDN 运维、告警维护、Nginx 配置管理、脚本生成与维护的统一项目。
项目采用单仓库统一管理方式。
每个产品的配置差异通过 products/<product>/product.yaml 管理。
Claude Code 在生成脚本和配置时,应优先读取:
1. 项目说明.md
2. .claude/rules.md
3. 对应模板文件
4. 对应产品参数文件
'@
$rules = @'
# Claude Code 规则
1. 全程中文回复
2. 任何写操作前必须说明意图
3. 优先复用 templates 目录中的模板
4. 不允许直接覆盖生产配置而不提示备份
5. shell 脚本必须包含 set -euo pipefail
6. nginx 配置变更后必须建议执行 nginx -t
7. 不允许生成危险删除命令
8. 生成内容必须尽量参数化,便于复用
9. 涉及生产发布时,必须提示先在测试环境验证
10. 涉及告警配置时,必须保留通知组和阈值说明
'@
$commands = @'
# 常见任务
## 1. 生成某产品 nginx 配置
请阅读:
- @项目说明.md
- @templates/nginx/base-nginx.conf
- @products/product-a/product.yaml
基于以上内容生成 product-a 的 nginx 配置,
输出到 @products/product-a/nginx/default.conf。
## 2. 生成某产品告警规则
请阅读:
- @项目说明.md
- @templates/alerts/base-alert-rule.yaml
- @products/product-a/product.yaml
- @shared/contacts.yaml
基于以上内容生成 product-a 的告警规则,
输出到 @products/product-a/alerts/rule.yaml。
## 3. 生成某产品部署脚本
请阅读:
- @项目说明.md
- @templates/shell/deploy.sh.tpl
- @products/product-a/product.yaml
基于以上内容生成部署脚本到:
@products/product-a/scripts/deploy.sh
'@
$opsSpec = @'
# 运维规范
## 1. 通用原则
1. 所有配置变更必须可追踪
2. 所有脚本变更必须可回滚
3. 所有生产发布必须先测试验证
4. 变更前应备份旧配置
5. 生产环境禁止直接做高风险删除操作
## 2. shell 脚本规范
1. 必须使用 bash
2. 开头必须包含:
set -euo pipefail
3. 支持 --dry-run 优先
## 3. nginx 配置规范
1. 修改后必须先执行 nginx -t
2. reload 前必须确保语法通过
3. 配置中应保留日志定义
'@
$alertSpec = @'
# 告警维护规范
## 1. 原则
1. 每个产品单独维护告警规则
2. 告警阈值尽量从 product.yaml 读取
3. 通知组统一从 shared/contacts.yaml 维护
4. 告警名称应包含产品名和指标名
'@
$releaseFlow = @'
# 发布流程
1. 确认变更内容
2. 备份旧配置
3. 生成新配置或新脚本
4. 执行校验
5. 测试环境验证
6. 人工审核
7. 正式发布
8. 发布后健康检查
9. 如有异常执行回滚
'@
$rollbackFlow = @'
# 回滚流程
1. 确认异常范围
2. 定位对应变更
3. 使用备份配置或回滚脚本恢复
4. 再次执行校验
5. 恢复服务
6. 验证业务状态
7. 记录回滚原因
'@
$productOnboarding = @'
# 产品接入说明
## 1. 新增产品目录
在 products 下创建新目录,例如:
products/product-a/
## 2. 新增产品参数
创建:
products/product-a/product.yaml
## 3. 基于模板生成内容
可生成:
- nginx 配置
- 告警规则
- 部署脚本
- 回滚脚本
- 健康检查脚本
'@
$contacts = @'
groups:
ops-team:
email:
- ops@example.com
webhook: "https://example.com/webhook/ops-team"
cdn-team:
email:
- cdn@example.com
webhook: "https://example.com/webhook/cdn-team"
'@
$environments = @'
environments:
dev:
description: "开发环境"
test:
description: "测试环境"
prod:
description: "生产环境"
'@
$commonVars = @'
defaults:
nginx_access_log_dir: "/var/log/nginx"
nginx_error_log_dir: "/var/log/nginx"
default_client_max_body_size: "10M"
default_proxy_read_timeout: 60
default_proxy_connect_timeout: 60
'@
$nginxTemplate = @'
server {
listen 80;
server_name example.com;
access_log /var/log/nginx/access.log;
error_log /var/log/nginx/error.log warn;
client_max_body_size 10M;
location / {
proxy_pass http://127.0.0.1:9000;
proxy_http_version 1.1;
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_connect_timeout 60s;
proxy_read_timeout 60s;
}
}
'@
$alertTemplate = @'
alert_rule:
name: "example-latency-alert"
product: "example-product"
environment: "prod"
metric: "latency_ms"
operator: ">"
threshold: 300
duration: "5m"
severity: "warning"
notify_group: "ops-team"
summary: "接口延迟超过阈值"
description: "请检查回源、上游服务和网络状态"
'@
$deployTemplate = @'
#!/usr/bin/env bash
set -euo pipefail
DRY_RUN="false"
PRODUCT_NAME="{{product_name}}"
NGINX_CONF="{{nginx_conf_path}}"
for arg in "$@"; do
case "$arg" in
--dry-run)
DRY_RUN="true"
;;
esac
done
run_cmd() {
if [[ "$DRY_RUN" == "true" ]]; then
echo "[DRY-RUN] $*"
else
eval "$@"
fi
}
echo "开始部署产品: ${PRODUCT_NAME}"
if ! command -v nginx >/dev/null 2>&1; then
echo "错误: nginx 未安装或不可用"
exit 1
fi
echo "校验 nginx 配置..."
run_cmd "nginx -t"
echo "重载 nginx..."
run_cmd "systemctl reload nginx"
echo "部署完成"
'@
$rollbackTemplate = @'
#!/usr/bin/env bash
set -euo pipefail
BACKUP_FILE="${1:-}"
if [[ -z "$BACKUP_FILE" ]]; then
echo "用法: $0 <backup_file>"
exit 1
fi
echo "准备回滚,备份文件: ${BACKUP_FILE}"
echo "请根据实际环境补充回滚逻辑"
'@
$healthcheckTemplate = @'
#!/usr/bin/env bash
set -euo pipefail
URL="${1:-http://127.0.0.1/health}"
echo "检查地址: ${URL}"
if command -v curl >/dev/null 2>&1; then
curl -fsS "$URL" >/dev/null && echo "健康检查通过" && exit 0
fi
echo "错误: curl 不可用"
exit 1
'@
$productA = @'
product_name: product-a
environment: prod
domain: api.product-a.com
listen_port: 8080
upstream_host: 127.0.0.1
upstream_port: 9000
client_max_body_size: 10M
enable_security_headers: true
alert:
enable: true
latency_threshold_ms: 300
error_rate_threshold: 5
notify_group: ops-team
'@
$productB = @'
product_name: product-b
environment: test
domain: api.product-b.com
listen_port: 8081
upstream_host: 127.0.0.1
upstream_port: 9001
client_max_body_size: 20M
enable_security_headers: true
alert:
enable: true
latency_threshold_ms: 500
error_rate_threshold: 10
notify_group: cdn-team
'@
$generateNginx = @'
#!/usr/bin/env bash
set -euo pipefail
echo "说明: 此脚本为占位脚本,后续可用于根据 product.yaml 生成 nginx 配置。"
'@
$generateAlert = @'
#!/usr/bin/env bash
set -euo pipefail
echo "说明: 此脚本为占位脚本,后续可用于根据 product.yaml 生成告警规则。"
'@
$validateScript = @'
#!/usr/bin/env bash
set -euo pipefail
echo "说明: 此脚本为占位脚本,后续可用于统一校验 nginx、yaml、shell 配置。"
'@
$deployScript = @'
#!/usr/bin/env bash
set -euo pipefail
echo "说明: 此脚本为通用发布入口占位脚本。"
'@
Write-Utf8BomFile "$base\项目说明.md" $projectDescription
Write-Utf8BomFile "$base\README.md" $readme
Write-Utf8BomFile "$base\.claude\context.md" $context
Write-Utf8BomFile "$base\.claude\rules.md" $rules
Write-Utf8BomFile "$base\.claude\commands.md" $commands
Write-Utf8BomFile "$base\docs\运维规范.md" $opsSpec
Write-Utf8BomFile "$base\docs\告警维护规范.md" $alertSpec
Write-Utf8BomFile "$base\docs\发布流程.md" $releaseFlow
Write-Utf8BomFile "$base\docs\回滚流程.md" $rollbackFlow
Write-Utf8BomFile "$base\docs\产品接入说明.md" $productOnboarding
Write-Utf8BomFile "$base\shared\contacts.yaml" $contacts
Write-Utf8BomFile "$base\shared\environments.yaml" $environments
Write-Utf8BomFile "$base\shared\common-vars.yaml" $commonVars
Write-Utf8BomFile "$base\templates\nginx\base-nginx.conf" $nginxTemplate
Write-Utf8BomFile "$base\templates\alerts\base-alert-rule.yaml" $alertTemplate
Write-Utf8BomFile "$base\templates\shell\deploy.sh.tpl" $deployTemplate
Write-Utf8BomFile "$base\templates\shell\rollback.sh.tpl" $rollbackTemplate
Write-Utf8BomFile "$base\templates\shell\healthcheck.sh.tpl" $healthcheckTemplate
Write-Utf8BomFile "$base\products\product-a\product.yaml" $productA
Write-Utf8BomFile "$base\products\product-b\product.yaml" $productB
Write-Utf8BomFile "$base\scripts\generate_nginx.sh" $generateNginx
Write-Utf8BomFile "$base\scripts\generate_alert.sh" $generateAlert
Write-Utf8BomFile "$base\scripts\validate.sh" $validateScript
Write-Utf8BomFile "$base\scripts\deploy.sh" $deployScript
上面为文件结尾
再说一遍,你实际只要做这两段复制
第一段:保存到文件
把上面整段脚本复制到:
D:\init.ps1
第二段:在 PowerShell 里执行
复制这句执行:
powershell -ExecutionPolicy Bypass -File D:\init.ps1
如果要重建,可以删除后在重新执行:
Remove-Item -LiteralPath D:\ops-claude -Recurse -Force
查看目录是否存在,显示False,表示目录不存在,再重新执行创建。
Test-Path D:\ops-claude
执行成功后你会看到这些文件
例如:
D:\ops-claude\README.md
D:\ops-claude\项目说明.md
D:\ops-claude\.claude\context.md
D:\ops-claude\docs\运维规范.md
D:\ops-claude\products\product-a\product.yaml