Skills Plugins MCP Prompt Model 博客 我的中心
Development #docker #web

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 Curated skill Quality Excellent · 90 v1.0.0

Get

https://deepseekmodel.com/api/download.php?id=affaan-m-ecc-docs-tr-skills-deployment-patterns-skill-md&format=skill
Download .skill Standard format with system_prompt and model_config, ready for any agent framework
The actual content of the system_prompt field in the .skill file.
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ış
Keywords that activate this skill. Click one to copy it.

This skill does not provide trigger words.

The downloaded .skill package contains the following fields.
Field Description
formatFormat tag (skill/v1)
skill_idUnique skill ID
nameSkill name
versionVersion
descriptionDescription
categoryCategories (array)
trigger_wordsTrigger words
tagsTags
sourceSource
source_urlSource URL (this page)
exported_atExported at (set per download)
system_promptSystem prompt body
model_configModel config: provider / model / temperature / max_tokens / top_p
examplesExamples
install_guideImport guide for Coze / Dify / Claude / custom frameworks
The same skill can be exported in different platform formats.
.skill Standard format with system_prompt and model_config, ready for any agent framework Download
.skillpro Enhanced format with scripts, tools, dependencies and hooks Download
.json Plain JSON export with system_prompt and model parameters only Download
Coze Markdown with frontmatter, for Coze platform import Download
Dify Dify DSL, import directly after creating an app Download

每日精选 Skill 推荐,免费送到你邮箱

输入邮箱,每天接收一个精选 AI Agent 技能推荐。完全免费,持续更新。

提交后我们会发送一封确认邮件,点击邮件里的链接才会开始收信。

完全免费,取消任意时间。我们不会发送垃圾邮件。