Communitygithub.com

padrões-de-implantacao

Fluxos de trabalho de implantação, padrões de pipeline CI/CD, conteinerização Docker, verificações de saúde, estratégias de rollback e listas de verificação de prontidão para produção para aplicações web. Use ao configurar CI/CD, conteinerizar um aplicativo ou verificar a prontidão para produção antes de um lançamento.

O que é padrões-de-implantacao?

Esta skill fornece um guia abrangente para implantação de aplicações web em produção, cobrindo desde estratégias de deployment (rolling, blue-green e canary) até práticas recomendadas de conteinerização Docker e pipelines CI/CD. Ela é útil para desenvolvedores e engenheiros de DevOps que precisam configurar pipelines de integração contínua, conteinerizar aplicações com Docker ou planejar estratégias de lançamento seguro. A skill inclui exemplos práticos de Dockerfiles multi-estágio para Node.js, Go e Python/Django, além de um pipeline completo do GitHub Actions com etapas de teste, build e deploy. Também aborda verificações de saúde, configuração de ambiente seguindo o padrão Twelve-Factor App, estratégias de rollback e uma lista de verificação detalhada de prontidão para produção, garantindo que o desenvolvedor tenha todas as ferramentas necessárias para lançamentos confiáveis e com zero downtime.

Funciona com~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/affaan-m/everything-claude-code/tree/main/skills/deployment-patterns

Perguntar na sua IA favorita

Abre um novo chat com esta habilidade de agente já pré-carregada.

Documentação

Padrões de Implantação

Fluxos de trabalho de implantação em produção e melhores práticas de CI/CD.

Quando Ativar

  • Configurando pipelines CI/CD
  • Dockerizando uma aplicação
  • Planejando estratégia de implantação (blue-green, canary, rolling)
  • Implementando verificações de saúde e probes de prontidão
  • Preparando-se para um lançamento em produção
  • Configurando configurações específicas de ambiente

Estratégias de Implantação

Rolling Deployment (Padrão)

Substitua as instâncias gradualmente — versões antigas e novas rodam simultaneamente durante o rollout.

Instância 1: v1 → v2  (atualiza primeiro)
Instância 2: v1        (ainda rodando v1)
Instância 3: v1        (ainda rodando v1)

Instância 1: v2
Instância 2: v1 → v2  (atualiza segundo)
Instância 3: v1

Instância 1: v2
Instância 2: v2
Instância 3: v1 → v2  (atualiza por último)

Prós: Zero downtime, rollout gradual Contras: Duas versões rodam simultaneamente — exige mudanças compatíveis com versão anterior Use quando: Implantações padrão, mudanças compatíveis com versão anterior

Blue-Green Deployment

Execute dois ambientes idênticos. Troque o tráfego atomicamente.

Blue  (v1) ← tráfego
Green (v2)   ocioso, rodando nova versão

# Após verificação:
Blue  (v1)   ocioso (torna-se standby)
Green (v2) ← tráfego

Prós: Rollback instantâneo (voltar para blue), corte limpo Contras: Requer 2x infraestrutura durante a implantação Use quando: Serviços críticos, tolerância zero a problemas

Canary Deployment

Primeiro, direcione uma pequena porcentagem de tráfego para a nova versão.

v1: 95% do tráfego
v2:  5% do tráfego  (canary)

# Se as métricas estiverem boas:
v1: 50% do tráfego
v2: 50% do tráfego

# Final:
v2: 100% do tráfego

Prós: Detecta problemas com tráfego real antes do rollout completo Contras: Requer infraestrutura de divisão de tráfego, monitoramento Use quando: Serviços de alto tráfego, mudanças arriscadas, feature flags

Docker

Dockerfile Multi-Estágio (Node.js)

# Estágio 1: Instalar dependências
FROM node:22-alpine AS deps
WORKDIR /app
COPY package.json package-lock.json ./
RUN npm ci --production=false

# Estágio 2: Build
FROM node:22-alpine AS builder
WORKDIR /app
COPY --from=deps /app/node_modules ./node_modules
COPY . .
RUN npm run build
RUN npm prune --production

# Estágio 3: Imagem de produção
FROM node:22-alpine AS runner
WORKDIR /app

RUN addgroup -g 1001 -S appgroup && adduser -S appuser -u 1001
USER appuser

COPY --from=builder --chown=appuser:appgroup /app/node_modules ./node_modules
COPY --from=builder --chown=appuser:appgroup /app/dist ./dist
COPY --from=builder --chown=appuser:appgroup /app/package.json ./

ENV NODE_ENV=production
EXPOSE 3000

HEALTHCHECK --interval=30s --timeout=3s --start-period=5s --retries=3 \
  CMD wget --no-verbose --tries=1 --spider http://localhost:3000/health || exit 1

CMD ["node", "dist/server.js"]

Dockerfile Multi-Estágio (Go)

FROM golang:1.22-alpine AS builder
WORKDIR /app
COPY go.mod go.sum ./
RUN go mod download
COPY . .
RUN CGO_ENABLED=0 GOOS=linux go build -ldflags="-s -w" -o /server ./cmd/server

FROM alpine:3.19 AS runner
RUN apk --no-cache add ca-certificates
RUN adduser -D -u 1001 appuser
USER appuser

COPY --from=builder /server /server

EXPOSE 8080
HEALTHCHECK --interval=30s --timeout=3s CMD wget -qO- http://localhost:8080/health || exit 1
CMD ["/server"]

Dockerfile Multi-Estágio (Python/Django)

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

FROM python:3.12-slim AS runner
WORKDIR /app

RUN useradd -r -u 1001 appuser
USER appuser

COPY --from=builder /usr/local/lib/python3.12/site-packages /usr/local/lib/python3.12/site-packages
COPY --from=builder /usr/local/bin /usr/local/bin
COPY . .

ENV PYTHONUNBUFFERED=1
EXPOSE 8000

HEALTHCHECK --interval=30s --timeout=3s CMD python -c "import urllib.request; urllib.request.urlopen('http://localhost:8000/health/')" || exit 1
CMD ["gunicorn", "config.wsgi:application", "--bind", "0.0.0.0:8000", "--workers", "4"]

Melhores Práticas Docker

# BOAS práticas
- Use tags de versão específicas (node:22-alpine, não node:latest)
- Builds multi-estágio para minimizar o tamanho da imagem
- Execute como usuário não-root
- Copie arquivos de dependência primeiro (cache de camadas)
- Use .dockerignore para excluir node_modules, .git, testes
- Adicione instrução HEALTHCHECK
- Defina limites de recursos no docker-compose ou k8s

# MÁS práticas
- Executar como root
- Usar tags :latest
- Copiar todo o repositório em uma única camada COPY
- Instalar dependências de desenvolvimento na imagem de produção
- Armazenar segredos na imagem (use variáveis de ambiente ou gerenciador de segredos)

Pipeline CI/CD

GitHub Actions (Pipeline Padrão)

name: CI/CD

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

jobs:
  test:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - uses: actions/setup-node@v4
        with:
          node-version: 22
          cache: npm
      - run: npm ci
      - run: npm run lint
      - run: npm run typecheck
      - run: npm test -- --coverage
      - uses: actions/upload-artifact@v4
        if: always()
        with:
          name: coverage
          path: coverage/

  build:
    needs: test
    runs-on: ubuntu-latest
    if: github.ref == 'refs/heads/main'
    steps:
      - uses: actions/checkout@v4
      - uses: docker/setup-buildx-action@v3
      - uses: docker/login-action@v3
        with:
          registry: ghcr.io
          username: ${{ github.actor }}
          password: ${{ secrets.GITHUB_TOKEN }}
      - uses: docker/build-push-action@v5
        with:
          push: true
          tags: ghcr.io/${{ github.repository }}:${{ github.sha }}
          cache-from: type=gha
          cache-to: type=gha,mode=max

  deploy:
    needs: build
    runs-on: ubuntu-latest
    if: github.ref == 'refs/heads/main'
    environment: production
    steps:
      - name: Deploy para produção
        run: |
          # Comando de implantação específico da plataforma
          # Railway: railway up
          # Vercel: vercel --prod
          # K8s: kubectl set image deployment/app app=ghcr.io/${{ github.repository }}:${{ github.sha }}
          echo "Implantando ${{ github.sha }}"

Estágios do Pipeline

PR aberto:
  lint → typecheck → testes unitários → testes de integração → deploy preview

Merge na main:
  lint → typecheck → testes unitários → testes de integração → build imagem → deploy staging → testes smoke → deploy produção

Verificações de Saúde

Endpoint de Verificação de Saúde

// Verificação de saúde simples
app.get("/health", (req, res) => {
  res.status(200).json({ status: "ok" });
});

// Verificação de saúde detalhada (para monitoramento interno)
app.get("/health/detailed", async (req, res) => {
  const checks = {
    database: await checkDatabase(),
    redis: await checkRedis(),
    externalApi: await checkExternalApi(),
  };

  const allHealthy = Object.values(checks).every(c => c.status === "ok");

  res.status(allHealthy ? 200 : 503).json({
    status: allHealthy ? "ok" : "degradado",
    timestamp: new Date().toISOString(),
    version: process.env.APP_VERSION || "desconhecida",
    uptime: process.uptime(),
    checks,
  });
});

async function checkDatabase(): Promise<HealthCheck> {
  try {
    await db.query("SELECT 1");
    return { status: "ok", latency_ms: 2 };
  } catch (err) {
    return { status: "error", message: "Banco de dados inalcançável" };
  }
}

Probes do Kubernetes

livenessProbe:
  httpGet:
    path: /health
    port: 3000
  initialDelaySeconds: 10
  periodSeconds: 30
  failureThreshold: 3

readinessProbe:
  httpGet:
    path: /health
    port: 3000
  initialDelaySeconds: 5
  periodSeconds: 10
  failureThreshold: 2

startupProbe:
  httpGet:
    path: /health
    port: 3000
  initialDelaySeconds: 0
  periodSeconds: 5
  failureThreshold: 30    # 30 * 5s = 150s tempo máximo de inicialização

Configuração de Ambiente

Padrão Twelve-Factor App

# Toda configuração via variáveis de ambiente — nunca no código
DATABASE_URL=postgres://user:pass@host:5432/db
REDIS_URL=redis://host:6379/0
API_KEY=${API_KEY}           # injetado pelo gerenciador de segredos
LOG_LEVEL=info
PORT=3000

# Comportamento específico de ambiente
NODE_ENV=production          # ou staging, development
APP_ENV=production           # ambiente explícito do aplicativo

Validação de Configuração

import { z } from "zod";

const envSchema = z.object({
  NODE_ENV: z.enum(["development", "staging", "production"]),
  PORT: z.coerce.number().default(3000),
  DATABASE_URL: z.string().url(),
  REDIS_URL: z.string().url(),
  JWT_SECRET: z.string().min(32),
  LOG_LEVEL: z.enum(["debug", "info", "warn", "error"]).default("info"),
});

// Validar na inicialização — falhe rápido se a configuração estiver errada
export const env = envSchema.parse(process.env);

Estratégia de Rollback

Rollback Instantâneo

# Docker/Kubernetes: aponte para a imagem anterior
kubectl rollout undo deployment/app

# Vercel: promova a implantação anterior
vercel rollback

# Railway: reimplante o commit anterior
railway up --commit <sha-anterior>

# Banco de dados: reverta a migração (se reversível)
npx prisma migrate resolve --rolled-back <nome-da-migracao>

Lista de Verificação de Rollback

  • Imagem/artefato anterior está disponível e etiquetado
  • Migrações de banco de dados são compatíveis com versão anterior (sem mudanças destrutivas)
  • Feature flags podem desabilitar novos recursos sem deploy
  • Alertas de monitoramento configurados para picos de taxa de erro
  • Rollback testado em staging antes do lançamento em produção

Lista de Verificação de Prontidão para Produção

Antes de qualquer implantação em produção:

Aplicativo

  • Todos os testes passam (unitários, integração, E2E)
  • Nenhum segredo hardcoded no código ou arquivos de configuração
  • Tratamento de erros cobre todos os casos extremos
  • Logging é estruturado (JSON) e não contém PII
  • Endpoint de verificação de saúde retorna status significativo

Infraestrutura

  • Imagem Docker é construída de forma reproduzível (versões fixadas)
  • Variáveis de ambiente documentadas e validadas na inicialização
  • Limites de recursos definidos (CPU, memória)
  • Escalonamento horizontal configurado (mín./máx. de instâncias)
  • SSL/TLS habilitado em todos os endpoints

Monitoramento

  • Métricas do aplicativo exportadas (taxa de requisição, latência, erros)
  • Alertas configurados para taxa de erro > limite
  • Agregação de logs configurada (logs estruturados, pesquisáveis)
  • Monitoramento de uptime no endpoint de saúde

Segurança

  • Dependências escaneadas para CVEs
  • CORS configurado apenas para origens permitidas
  • Limitação de taxa habilitada em endpoints públicos
  • Autenticação e autorização verificadas
  • Headers de segurança definidos (CSP, HSTS, X-Frame-Options)

Operações

  • Plano de rollback documentado e testado
  • Migração de banco de dados testada com dados de tamanho de produção
  • Runbook para cenários de falha comuns
  • Escala de plantão e caminho de escalonamento definidos

Individual skills in this repo

This repo contains 20 individual skills — each has its own dedicated page.

accessibility

Design, implement, and audit inclusive digital products using WCAG 2.2 Level AA. Use when building or auditing UI that must meet WCAG 2.2 Level AA, or when reviewing a change for keyboard, contrast, or screen-reader support.

affaan-m/claude-api

Anthropic Claude API patterns for Python and TypeScript. Covers Messages API, streaming, tool use, vision, extended thinking, batches, prompt caching, and Claude Agent SDK. Use when building applications with the Claude API or Anthropic SDKs.

affaan-m/everything-claude-code

End-to-end marketing campaign planning and execution. Covers audience research, positioning, campaign angle definition, landing page copy, email sequences, social posts, ad copy, short-form video scripts, and content calendars. Use as the orchestration layer for multi-channel product launches. Use when planning or executing a multi-channel product launch, or producing landing page, email, social, or ad copy.

affaan-m/everything-claude-code

Development conventions and patterns for everything-claude-code. JavaScript project with conventional commits.

affaan-m/everything-claude-code-conventions

Development conventions and patterns for everything-claude-code. JavaScript project with conventional commits.

affaan-m/frontend-design

Create distinctive, production-grade frontend interfaces with high design quality. Use when the user asks to build web components, pages, or applications and the visual direction matters as much as the code quality.

affaan-m/gget

gget CLI and Python workflow for quick genomic database queries, sequence lookup, BLAST-style searches, enrichment checks, and reproducible bioinformatics evidence logs.

affaan-m/literature-review

Systematic literature-review workflow for academic, biomedical, technical, and scientific topics, including search planning, source screening, synthesis, citation checks, and evidence logging.

affaan-m/motion-ui

Production-ready UI motion system for React/Next.js. Use when implementing animations, transitions, or motion patterns.

affaan-m/project-guidelines-example

Example project-specific skill template based on a real production application.

affaan-m/pubmed-database

Direct PubMed and NCBI E-utilities search workflows for biomedical literature, MeSH queries, PMID lookup, citation retrieval, and API-backed literature monitoring.

affaan-m/scholar-evaluation

Structured scholarly-work evaluation for papers, proposals, literature reviews, methods sections, evidence quality, citation support, and research-writing feedback.

affaan-m/uspto-database

USPTO patent and trademark data workflow for official record lookup, PatentSearch queries, TSDR checks, assignment data, and reproducible IP research logs.

agent-architecture-audit

Full-stack diagnostic for agent and LLM applications. Audits the 12-layer agent stack for wrapper regression, memory pollution, tool discipline failures, hidden repair loops, and rendering corruption. Produces severity-ranked findings with code-first fixes. Essential for developers building agent applications, autonomous loops, or any LLM-powered feature. Use when an agent or LLM feature misbehaves and the failing layer is unknown, or before shipping an agent stack.

agent-eval

Head-to-head comparison of coding agents (Claude Code, Aider, Codex, etc.) on custom tasks with pass rate, cost, time, and consistency metrics. Use when choosing between coding agents, or when a change to an agent setup needs measured pass rate, cost, and time rather than an impression.

agent-harness-construction

Design and optimize AI agent action spaces, tool definitions, and observation formatting for higher completion rates. Use when defining or revising an agent

agentic-engineering

Operate as an agentic engineer using eval-first execution, decomposition, and cost-aware model routing. Use when planning or executing engineering work that agents will carry out end to end.

agentic-os

Build persistent multi-agent operating systems on Claude Code. Covers kernel architecture, specialist agents, slash commands, file-based memory, scheduled automation, and state management without external databases. Use when building a persistent multi-agent system on Claude Code with its own memory, commands, and scheduling.

agent-introspection-debugging

Structured self-debugging workflow for AI agent failures using capture, diagnosis, contained recovery, and introspection reports. Use when an agent run fails and you need a reproducible diagnosis instead of a retry.

agent-payment-x402

Add x402 payment execution to AI agents with per-task budgets, spending controls, and non-custodial wallets. Supports Base through agentwallet-sdk and X Layer through OKX Payments / OKX Agent Payments Protocol. Use when an agent must pay for something itself and needs per-task budgets, spending controls, and a non-custodial wallet.

Habilidades Relacionadas