deployment-patterns
Deployment iş akışları, CI/CD pipeline kalıpları, Docker konteynerizasyonu, sağlık kontrolleri, rollback stratejileri ve web uygulamaları için üretim hazırlığı kontrol listeleri.
DeepseekModel
官方收录技能
质量 优秀 · 90
v1.0.0
获取
https://deepseekmodel.com/api/download.php?id=affaan-m-ecc-docs-tr-skills-deployment-patterns-skill-md&format=skill
下载 .skill
标准格式,含 system_prompt 与 model_config,导入任意 Agent 框架即可使用
.skill 文件中 system_prompt 字段的实际内容。
name deployment-patterns description Deployment iş akışları, CI/CD pipeline kalıpları, Docker konteynerizasyonu, sağlık kontrolleri, rollback stratejileri ve web uygulamaları için üretim hazırlığı kontrol listeleri. origin ECC Deployment Kalıpları Üretim deployment iş akışları ve CI/CD en iyi uygulamaları. Ne Zaman Aktifleştirmeli CI/CD pipeline'ları kurarken Bir uygulamayı Docker'ize ederken Deployment stratejisi planlarken (blue-green, canary, rolling) Sağlık kontrolleri ve hazırlık probe'ları uygularken Üretim yayınına hazırlanırken Ortama özgü ayarları yapılandırırken Deployment Stratejileri Rolling Deployment (Varsayılan) Instance'ları kademeli olarak değiştir — rollout sırasında eski ve yeni versiyonlar birlikte çalışır. Instance 1: v1 → v2 (önce güncelle) Instance 2: v1 (hala v1 çalışıyor) Instance 3: v1 (hala v1 çalışıyor) Instance 1: v2 Instance 2: v1 → v2 (ikinci olarak güncelle) Instance 3: v1 Instance 1: v2 Instance 2: v2 Instance 3: v1 → v2 (son olarak güncelle) Artıları: Sıfır kesinti, kademeli rollout Eksileri: İki versiyon aynı anda çalışır — geriye uyumlu değişiklikler gerektirir Ne zaman kullanılır: Standart deployment'lar, geriye uyumlu değişiklikler Blue-Green Deployment İki özdeş ortam çalıştır. Trafiği atomik olarak değiştir. Blue (v1) ← trafik Green (v2) boşta, yeni versiyon çalışıyor # Doğrulamadan sonra: Blue (v1) boşta (yedek haline gelir) Green (v2) ← trafik Artıları: Anında rollback (blue'ya geri dön), temiz geçiş Eksileri: Deployment sırasında 2x altyapı gerektirir Ne zaman kullanılır: Kritik servisler, sorunlara sıfır tolerans Canary Deployment Önce trafiğin küçük bir yüzdesini yeni versiyona yönlendir. v1: %95 trafik v2: %5 trafik (canary) # Metrikler iyi görünüyorsa: v1: %50 trafik v2: %50 trafik # Final: v2: %100 trafik Artıları: Tam rollout'tan önce gerçek trafikle sorunları yakalar Eksileri: Trafik bölme altyapısı, izleme gerektirir Ne zaman kullanılır: Yüksek trafikli servisler, riskli değişiklikler, feature flag'ler Docker Multi-Stage Dockerfile (Node.js) # Stage 1: Bağımlılıkları yükle FROM node:22-alpine AS deps WORKDIR /app COPY package.json package-lock.json ./ RUN npm ci --production=false # Stage 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 # Stage 3: Production image 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"] Multi-Stage Dockerfile (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"] Multi-Stage Dockerfile (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"] Docker En İyi Uygulamaları # İYİ uygulamalar - Belirli versiyon tag'leri kullanın (node:22-alpine, node:latest değil) - Image boyutunu minimize etmek için multi-stage build'ler - Root olmayan kullanıcı olarak çalıştır - Önce bağımlılık dosyalarını kopyalayın (layer caching) - node_modules, .git, test'leri hariç tutmak için .dockerignore kullanın - HEALTHCHECK talimatı ekleyin - docker-compose veya k8s'te kaynak limitleri ayarlayın # KÖTÜ uygulamalar - Root olarak çalıştırmak - :latest tag'lerini kullanmak - Tüm repo'yu tek COPY layer'da kopyalamak - Production image'de dev bağımlılıklarını yüklemek - Image'de secret'ları saklamak (env var veya secrets manager kullanın) CI/CD Pipeline GitHub Actions (Standart Pipeline) 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 to production run: | # Platforma özgü deployment komutu # Railway: railway up # Vercel: vercel --prod # K8s: kubectl set image deployment/app app=ghcr.io/${{ github.repository }}:${{ github.sha }} echo "Deploying ${{ github.sha }}" Pipeline Aşamaları PR açıldığında: lint → typecheck → unit tests → integration tests → preview deploy Main'e merge edildiğinde: lint → typecheck → unit tests → integration tests → build image → deploy staging → smoke tests → deploy production Sağlık Kontrolleri Sağlık Kontrolü Endpoint'i // Basit sağlık kontrolü app. get ( "/health" , ( req, res ) => { res. status ( 200 ). json ({ status : "ok" }); }); // Detaylı sağlık kontrolü (dahili izleme için) 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" : "degraded" , timestamp : new Date (). toISOString (), version : process. env . APP_VERSION || "unknown" , 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 : "Database unreachable" }; } } Kubernetes Probe'ları 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 max başlatma süresi Ortam Yapılandırması Twelve-Factor App Kalıbı # Tüm yapılandırma ortam değişkenleri ile — asla kodda değil DATABASE_URL=postgres://user:pass@host:5432/db REDIS_URL=redis://host:6379/0 API_KEY= ${API_KEY} # secrets manager tarafından enjekte edilir LOG_LEVEL=info PORT=3000 # Ortama özgü davranış NODE_ENV=production # veya staging, development APP_ENV=production # açık uygulama ortamı Yapılandırma Validasyonu 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" ), }); // Başlangıçta validasyon yap — yapılandırma yanlışsa hızlı başarısız ol export const env = envSchema. parse (process. env ); Rollback Stratejisi Anında Rollback # Docker/Kubernetes: önceki image'a işaret et kubectl rollout undo deployment/app # Vercel: önceki deployment'ı yükselt vercel rollback # Railway: önceki commit'i tekrar deploy et railway up --commit <previous-sha> # Veritabanı: migration'ı rollback et (geri alınabilirse) npx prisma migrate resolve --rolled-back <migration-name> Rollback Kontrol Listesi Önceki image/artifact mevcut ve tag'lenmiş Veritabanı migration'ları geriye uyumlu (yıkıcı değişiklik yok) Feature flag'ler deploy olmadan yeni özellikleri devre dışı bırakabilir Hata oranı artışları için izleme alarmları yapılandırılmış Rollback üretim yayınından önce staging'de test edilmiş Üretim Hazırlığı Kontrol Listesi Herhangi bir üretim deployment'ından önce: Uygulama Tüm testler geçiyor (unit, integration, E2E) Kodda veya yapılandırma dosyalarında hardcode edilmiş secret yok Hata işleme tüm edge case'leri kapsıyor Loglama yapılandırılmış (JSON) ve PII içermiyor Sağlık kontrolü endpoint'i anlamlı durum döndürüyor Altyapı Docker image yeniden üretilebilir şekilde build oluyor (sabitlenmiş versiyonlar) Ortam değişkenleri dokümante edilmiş ve başlangıçta validate ediliyor Kaynak limitleri ayarlanmış (CPU, bellek) Horizontal scaling yapılandırılmış (min/max instance'lar) Tüm endpoint'lerde SSL/TLS etkin İzleme Uygulama metrikleri export ediliyor (istek oranı, gecikme, hatalar) Hata oranı > eşik için alarmlar yapılandırılmış Log toplama kurulmuş (yapılandırılmış loglar, aranabilir) Sağlık endpoint'inde uptime izleme Güvenlik Bağımlılıklar CVE'ler için taranmış CORS sadece izin verilen origin'ler için yapılandırılmış Halka açık endpoint'lerde hız sınırlama etkin Kimlik doğrulama ve yetkilendirme doğrulanmış Güvenlik header'ları ayarlanmış (CSP, HSTS, X-Frame-Options) Operasyonlar Rollback planı dokümante edilmiş ve test edilmiş Veritabanı migration'ı üretim boyutundaki veriye karşı test edilmiş Yaygın hata senaryoları için runbook Nöbet rotasyonu ve yükseltme yolu tanımlanmış
Agent 识别该技能的关键词,点击任意一个即可复制。
该技能未提供触发词。
下载的 .skill 包内含以下字段。
| 字段 | 说明 |
|---|---|
| format | 格式标识(skill/v1) |
| skill_id | 技能唯一 ID |
| name | 技能名称 |
| version | 版本号 |
| description | 技能描述 |
| category | 所属分类(数组) |
| trigger_words | 触发词列表 |
| tags | 标签列表 |
| source | 来源标识 |
| source_url | 来源链接(本页地址) |
| exported_at | 导出时间(每次下载生成) |
| system_prompt | 系统提示词正文 |
| model_config | 模型参数:provider / model / temperature / max_tokens / top_p |
| examples | 示例 |
| install_guide | 各平台导入说明(Coze / Dify / Claude / 自定义框架) |