vibecode.wiki
RU EN
~/wiki / zapusk-i-khosting / blue-green-deployment

Blue-Green Deployment: как обновлять приложение без единой секунды простоя

◷ 7 мин чтения 24.02.2026

Следующий шаг

Открой бота или продолжай маршрут внутри раздела.

$ cd раздел/ $ open @mmorecil_bot

Статья -> план в ИИ

Отправь ссылку на эту статью в любой ИИ и получи план внедрения под свой проект.

Прочитай эту статью: https://vibecode.morecil.ru/ru/zapusk-i-khosting/blue-green-deployment/ Работай в контексте моего текущего проекта. Сделай план внедрения под мой стек: 1) что изменить 2) в каких файлах 3) риски и типичные ошибки 4) как проверить, что всё работает Если есть варианты, дай "быстрый" и "production-ready".
Как использовать
  1. Скопируй этот промпт и отправь в чат с ИИ.
  2. Прикрепи проект или открой папку репозитория в ИИ-инструменте.
  3. Попроси изменения по файлам, риски и короткий чеклист проверки.

Ты собрал крутой бот, сайт или сервис — и нужно выкатить обновление в прод. А вдруг сломается? Пользователи уйдут, метрики упадут, настроение испортится.

Blue-Green Deployment решает эту проблему. Это стратегия, при которой у тебя всегда есть две полностью идентичные продакшен-среды:

  • Blue — сейчас живая, принимает всех пользователей.
  • Green — standby, туда ты выкатываешь новую версию.

Тестируешь Green в реальных условиях → всё ок → мгновенно переключаешь трафик → Blue становится standby (готов к следующему деплою или откату). Ноль даунтайма, откат за секунды, полная безопасность.

Как именно это работает

  1. Blue — активная среда (v1). Пользователи ходят на неё через Load Balancer / Nginx / Kubernetes Service / Cloud LB.
  2. Ты собираешь новую версию (v2) → деплоишь только в Green.
  3. Запускаешь smoke-тесты, health-checks, интеграционные тесты прямо на Green (через приватный URL или отдельный ingress).
  4. Всё зелёное? Переключаешь роутер/балансировщик на Green.
  5. Теперь Green = live (v2), Blue = standby.
  6. При следующей выкатке роли меняются.

Переключение трафика происходит за 1–5 секунд:

  • Nginx: nginx -s reload после смены proxy_pass.
  • Kubernetes: kubectl apply обновлённого Service (меняешь selector).
  • AWS ALB / Cloud: обновление target group.
  • Traefik / Caddy: динамические labels.

Откат — просто верни трафик обратно на Blue.

Преимущества

  • Zero-downtime даже при сложных миграциях.
  • Мгновенный rollback (даже если 1% пользователей увидели баг — сразу назад).
  • Тестирование в 100% продакшен-окружении (с реальными БД, кэшем, секретами).
  • Легко интегрируется в CI/CD — деплой становится частью пайплайна.
  • Идеально для вайбкодеров: ИИ пишет код → ты одним промптом получаешь весь blue-green стек.

Настройка конфигурации «через деплой»

Это ключевой момент запроса. Ты не лезешь руками на сервер.

  • Terraform / Pulumi — описываешь две среды в коде.
  • Helm + values.yamldeploy_version: blue или green.
  • GitHub Actions / GitLab CI — каждый git push → build → deploy в inactive среду → тесты → switch.

Простейшая реализация на VPS (Docker + Nginx) — для старта

Идеально для одиночного сервера или небольшого проекта.

docker-compose.yml (с profiles):

yaml
services:
  app-blue:
    image: myapp:${TAG:-latest}
    build: .
    profiles: ["blue"]
    restart: unless-stopped
    labels:
      - "traefik.enable=true"  # или используй nginx

  app-green:
    image: myapp:${TAG:-latest}
    build: .
    profiles: ["green"]
    restart: unless-stopped

Nginx.conf (динамический):

nginx
upstream backend {
    server app-blue:3000;  # меняем на app-green при switch
}

server {
    listen 80;
    location / {
        proxy_pass http://backend;
        proxy_set_header Host $host;
    }
}

deploy.sh

bash
#!/bin/bash
ACTIVE=$(cat /var/run/active-slot.txt 2>/dev/null || echo "blue")
NEW_SLOT=$( [ "$ACTIVE" = "blue" ] && echo "green" || echo "blue")

docker compose --profile $NEW_SLOT up -d --build
sleep 10  # health check
curl -f http://localhost/health || exit 1

echo "$NEW_SLOT" > /var/run/active-slot.txt
sed -i "s/app-$ACTIVE/app-$NEW_SLOT/" /etc/nginx/nginx.conf
nginx -s reload

docker compose --profile $ACTIVE stop
echo "✅ Переключили на $NEW_SLOT!"

Запуск: ./deploy.sh — и всё.

Полноценный Kubernetes

Два Deployment + один Service, который переключается.

blue-deployment.yaml:

yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: myapp-blue
spec:
  replicas: 3
  selector:
    matchLabels:
      app: myapp
      color: blue
  template:
    metadata:
      labels:
        app: myapp
        color: blue
    spec:
      containers:
      - name: app
        image: myapp:v1
        readinessProbe:
          httpGet:
            path: /health
            port: 3000

Аналогично green-deployment.yaml (color: green, image: v2).

service.yaml (переключается):

yaml
apiVersion: v1
kind: Service
metadata:
  name: myapp-service
spec:
  selector:
    app: myapp
    color: blue   # ← меняешь на green и apply
  ports:
  - port: 80
    targetPort: 3000

Ingress (опционально) всегда смотрит на myapp-service.

Переключение:

bash
kubectl apply -f green-deployment.yaml
# ждём ready
kubectl patch service myapp-service -p '{"spec":{"selector":{"color":"green"}}}'
# Blue можно удалить или оставить как standby

Terraform + Kubernetes (полная IaC-настройка)

hcl
resource "kubernetes_deployment" "blue" { ... color = "blue" ... }
resource "kubernetes_deployment" "green" { ... color = "green" ... }

resource "kubernetes_service" "app" {
  spec {
    selector = {
      color = var.active_color  # "blue" или "green" — меняешь в variables.tf
    }
  }
}

terraform apply -var="active_color=green"

Обработка базы данных (самое важное)

Не пытайся копировать БД каждый раз — используй shared database + expand/contract:

  1. Добавляешь новые колонки/таблицы (v2 умеет работать со старой схемой).
  2. Переключаешь приложение на v2.
  3. Запускаешь миграцию данных.
  4. Удаляешь старые колонки (v1 уже не используется).

Инструменты: Flyway, Liquibase, Alembic, Prisma Migrate с --create-only.

Если совсем критично — делай blue-green и для RDS (AWS имеет встроенный).

CI/CD: настройка «через деплой» (GitHub Actions)

yaml
name: Blue-Green Deploy
on: [push]
jobs:
  deploy:
    runs-on: ubuntu-latest
    steps:
    - uses: actions/checkout@v4
    - name: Build & Push
      run: docker build -t myapp:${{ github.sha }} && docker push ...
    - name: Deploy to inactive
      run: ssh user@server "./deploy-to-inactive.sh ${{ github.sha }}"
    - name: Tests
      run: curl -f https://staging.myapp.com/health
    - name: Switch
      run: ssh user@server "./switch.sh"

Готовые промпты для ИИ (копируй и вставляй в Grok/Claude/GPT)

Промпт 1: Полный стек для VPS (Docker + Nginx)

code
" Создай полный ready-to-use набор файлов для blue-green deployment моего FastAPI (Python) приложения на Ubuntu VPS.  
- docker-compose.yml с profiles blue/green  
- nginx.conf с динамическим upstream  
- deploy.sh с health checks, logging, rollback  
- GitHub Actions workflow  
- инструкция по первому запуску и ежедневному использованию.  
Сделай максимально надёжно, с zero-downtime и комментариями на русском."

Промпт 2: Kubernetes + Helm

code
"Напиши Helm chart для blue-green deployment Node.js приложения в Kubernetes. Два Deployment (blue/green), Service с selector, Ingress. Добавь values.yaml с deploy_version. Покажи как переключать в CI/CD. Добавь Argo Rollouts вариант для автоматизации."

Промпт 3: Terraform + AWS ECS

code
"Создай Terraform код для blue-green deployment на AWS ECS Fargate с CodeDeploy. Два task definition, ALB listener rules, lifecycle hooks для smoke tests. Всё declarative."

Промпт 4: Обработка БД + миграции

code
"Для моего Prisma + PostgreSQL проекта объясни и дай код expand/contract миграций под blue-green. Покажи порядок: сначала миграция schema, потом switch app, потом cleanup."

Промпт 5: Анализ твоего проекта

code
"Предложи оптимальную blue-green реализацию (VPS/K8s/Cloud) с минимальными затратами и максимальной надёжностью. Дай готовые файлы."

Сравнение с другими стратегиями

  • Rolling Update — постепенная замена подов (дешевле, но откат сложнее).
  • Canary — 1% → 10% → 100% трафика (отлично для A/B, но сложнее).
  • Blue-Green — самый простой и надёжный для большинства проектов.