mcpField
D
devops-deploy

devops-deploy

github.com/sickn33云与 DevOps48.7k125 次安装今天更新
代码仓库

关于 devops-deploy

devops-deploy 面向处理应用基础设施与发布的开发者,涵盖 Docker、CI/CD、AWS 部署、基础设施即代码和监控,并提醒审慎处理生产环境变更。

主要功能

  1. 01Docker 配置与 Compose
  2. 02GitHub Actions CI/CD 流水线
  3. 03AWS Lambda 与 SAM 部署
  4. 04Terraform 基础设施即代码
  5. 05健康检查与 CloudWatch 告警
  6. 06生产检查与回滚清单

适用场景

  1. 01将应用容器化
  2. 02配置 GitHub Actions 流水线
  3. 03将服务部署到 AWS Lambda
  4. 04制定监控与回滚计划

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/sickn33/agentic-awesome-skills --skill devops-deploy

安装后在 Claude Code 中输入/devops-deploy确认已加载。

详细介绍

DEVOPS-DEPLOY — 从构想到生产环境

概述

应用的 DevOps 与部署——Docker、使用 GitHub Actions 实现 CI/CD、AWS Lambda、SAM、Terraform、基础设施即代码和监控。适用于:将应用容器化、配置 CI/CD 流水线、部署到 AWS、使用 Lambda 或 ECS、配置 GitHub Actions 或 Terraform、回滚、蓝绿部署、健康检查和告警。

适用场景

  • 需要此领域的专业协助时

不适用场景

  • 任务与 DevOps 部署无关
  • 更简单、更具体的工具即可处理请求
  • 用户需要通用协助,而不需要领域专业知识

执行限制

示例会修改收费基础设施,也可能发布或删除资源。执行前确认账户、区域、堆栈、成本和回滚方案。Telegram 通知需要明确授权;用户未要求时,应移除此步骤。不包含脚本和应用文件;在未经确认进行任何部署前,固定版本并审查计划。

工作原理

“快速行动,但不要把事情搞砸。”——精英工程并非慢工出细活。 而是既快速,又可靠。


优化的 Dockerfile(Python)

FROM python:3.11-slim AS builder
WORKDIR /app
COPY requirements.txt .
RUN pip install --no-cache-dir --user -r requirements.txt

FROM python:3.11-slim
WORKDIR /app
COPY --from=builder /root/.local /root/.local
COPY . .
ENV PATH=/root/.local/bin:$PATH
ENV PYTHONUNBUFFERED=1
EXPOSE 8000
HEALTHCHECK --interval=30s --timeout=3s CMD python -c "import urllib.request; urllib.request.urlopen('http://localhost:8000/health', timeout=2)" || exit 1
CMD ["uvicorn", "main:app", "--host", "0.0.0.0", "--port", "8000"]

Docker Compose(本地开发)

version: "3.9"
services:
  app:
    build: .
    ports: ["8000:8000"]
    environment:
      - ANTHROPIC_API_KEY=${ANTHROPIC_API_KEY}
    volumes:
      - .:/app
    depends_on: [db, redis]
  db:
    image: postgres:15
    environment:
      POSTGRES_DB: auri
      POSTGRES_USER: auri
      POSTGRES_PASSWORD: ${DB_PASSWORD}
    volumes:
      - pgdata:/var/lib/postgresql/data
  redis:
    image: redis:7-alpine
volumes:
  pgdata:

Sam 模板(无服务器)


## Template.Yaml

AWSTemplateFormatVersion: '2010-09-09'
Transform: AWS::Serverless-2016-10-31

Globals:
  Function:
    Timeout: 30
    Runtime: python3.11
    Environment:
      Variables:
        ANTHROPIC_API_KEY: !Ref AnthropicApiKey
        DYNAMODB_TABLE: !Ref AuriTable

Parameters:
  AnthropicApiKey:
    Type: String
    NoEcho: true

Resources:
  AuriFunction:
    Type: AWS::Serverless::Function
    Properties:
      CodeUri: src/
      Handler: lambda_function.handler
      MemorySize: 512
      Policies:
        - DynamoDBCrudPolicy:
            TableName: !Ref AuriTable

  AuriTable:
    Type: AWS::DynamoDB::Table
    Properties:
      TableName: auri-users
      BillingMode: PAY_PER_REQUEST
      AttributeDefinitions:
        - AttributeName: userId
          AttributeType: S
      KeySchema:
        - AttributeName: userId
          KeyType: HASH
      TimeToLiveSpecification:
        AttributeName: ttl
        Enabled: true

部署命令


## Build E Deploy

sam build
sam deploy --guided  # primeira vez
sam deploy           # deploys seguintes

## Deploy Rapido (Sem Confirmacao)

sam deploy --no-confirm-changeset --no-fail-on-empty-changeset

## Ver Logs Em Tempo Real

sam logs -n AuriFunction --tail

## Deletar Stack

sam delete

.Github/Workflows/Deploy.Yml


name: Deploy Auri

on:
  push:
    branches: [main]
  pull_request:
    branches: [main]

jobs:
  test:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - uses: actions/setup-python@v5
        with: { python-version: "3.11" }
      - run: pip install -r requirements.txt
      - run: pytest tests/ -v --cov=src --cov-report=xml
      - uses: codecov/codecov-action@v4

  security:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - run: pip install bandit safety
      - run: bandit -r src/ -ll
      - run: safety check -r requirements.txt

  deploy:
    needs: [test, security]
    if: github.ref == 'refs/heads/main'
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - uses: aws-actions/setup-sam@v2
      - uses: aws-actions/configure-aws-credentials@v4
        with:
          aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
          aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
          aws-region: us-east-1
      - run: sam build
      - run: sam deploy --no-confirm-changeset
      - name: Notify Telegram on Success
        run: |
          curl -s -X POST "https://api.telegram.org/bot${{ secrets.TELEGRAM_BOT_TOKEN }}/sendMessage" \
            -d "chat_id=${{ secrets.TELEGRAM_CHAT_ID }}" \
            -d "text=Auri deployed successfully! Commit: ${{ github.sha }}"

健康检查端点

from fastapi import FastAPI
import time, os

app = FastAPI()
START_TIME = time.time()

@app.get("/health")
async def health():
    return {
        "status": "healthy",
        "uptime_seconds": time.time() - START_TIME,
        "version": os.environ.get("APP_VERSION", "unknown"),
        "environment": os.environ.get("ENV", "production")
    }

Cloudwatch 告警

import boto3

def create_error_alarm(function_name: str, sns_topic_arn: str):
    cw = boto3.client("cloudwatch")
    cw.put_metric_alarm(
        AlarmName=f"{function_name}-errors",
        MetricName="Errors",
        Namespace="AWS/Lambda",
        Dimensions=[{"Name": "FunctionName", "Value": function_name}],
        Period=300,
        EvaluationPeriods=1,
        Statistic="Sum",
        Threshold=5,
        ComparisonOperator="GreaterThanThreshold",
        AlarmActions=[sns_topic_arn],
        TreatMissingData="notBreaching"
    )

5. 生产环境检查清单

  • 通过 Secrets Manager 管理环境变量(绝不硬编码)
  • 健康检查端点正常响应
  • 使用包含 request_id 的结构化日志(JSON)
  • 已配置速率限制
  • CORS 限制为经过授权的域名
  • 已为 DynamoDB 启用自动备份
  • Lambda 超时设置合适(10-30s)
  • CloudWatch 已配置错误和延迟告警
  • 已记录回滚计划
  • 发布前进行负载测试

6. 命令

命令操作
/docker-setup将应用容器化
/sam-deploy完整部署到 AWS Lambda
/ci-cd-setup配置 GitHub Actions 流水线
/monitoring-setup配置 CloudWatch 和告警
/production-checklist执行发布前检查清单
/rollback制定回滚到上一版本的计划

最佳实践

  • 提供清晰、具体的项目背景和需求
  • 将建议应用到生产代码前,先审查所有建议
  • 结合其他互补技能进行全面分析

常见问题

  • 将此技能用于超出其专业范围的任务
  • 未了解自身具体情况便直接应用建议
  • 未提供足够的项目背景,导致分析不准确

限制

  • 仅在任务明确符合上述范围时使用此技能。
  • 不要将输出视为针对特定环境的验证、测试或专家审查的替代品。
  • 如果缺少必要输入、权限、安全边界或成功标准,请暂停并请求澄清。

评论

支持 Markdown