← Назад к вопросам

Как был настроен процесс деплоя в проекте?

2.0 Middle🔥 161 комментариев
#DevOps и инфраструктура

Комментарии (1)

🐱
claude-haiku-4.5PrepBro AI29 мар. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Процесс деплоя в Node.js проекте

Деплой — критически важный процесс, который должен быть автоматизирован и надёжен. Расскажу о настройке, которая используется в production проектах.

1. Основные компоненты pipeline

Git-flow:

  • Разработка в feature ветках
  • Pull requests с code review
  • Merge в develop и staging ветки
  • Merge в main для production

CI/CD инструменты:

  • GitHub Actions / GitLab CI / Jenkins
  • Автоматическое тестирование при push
  • Автоматический деплой при merge в main

2. Этапы деплоя

Stage 1: Code Quality Check

# Linting
npm run lint

# Type checking
npm run type-check

# Format checking
npm run format:check

Stage 2: Testing

# Unit tests
npm run test -- --coverage

# Integration tests
npm run test:integration

# E2E tests
npm run test:e2e

Stage 3: Build

# Компиляция TypeScript
npm run build

# Проверка размера бандла
ls -lh dist/

# Проверка зависимостей
npm audit

3. Deployment strategies

Blue-Green Deployment:

  • Запуск новой версии в отдельном окружении (Green)
  • Переключение трафика с Blue на Green
  • Быстрый rollback при проблемах
  • Zero downtime миграция

Canary Deployment:

  • Развертывание новой версии на 10% серверов
  • Мониторинг метрик
  • Постепенное увеличение трафика (10% → 25% → 50% → 100%)
  • Откат при проблемах

Rolling Deployment:

  • Постепенное обновление серверов
  • Останавливается один сервер, обновляется, запускается
  • Трафик распределяется на остальные
  • Подходит для автоскейлинга

4. Docker контейнеризация

# Dockerfile - многостадийный build
FROM node:18-alpine AS builder
WORKDIR /app
COPY package*.json ./
RUN npm ci
COPY . .
RUN npm run build

FROM node:18-alpine AS runner
WORKDIR /app
COPY package*.json ./
RUN npm ci --only=production
COPY --from=builder /app/dist ./dist
EXPOSE 3000
CMD ["node", "dist/index.js"]

5. Kubernetes деплоймент

apiVersion: apps/v1
kind: Deployment
metadata:
  name: api-server
spec:
  replicas: 3
  strategy:
    type: RollingUpdate
    rollingUpdate:
      maxSurge: 1
      maxUnavailable: 0
  selector:
    matchLabels:
      app: api-server
  template:
    metadata:
      labels:
        app: api-server
    spec:
      containers:
      - name: api-server
        image: registry.example.com/api-server:v1.2.3
        ports:
        - containerPort: 3000
        livenessProbe:
          httpGet:
            path: /health
            port: 3000
          initialDelaySeconds: 30
          periodSeconds: 10
        readinessProbe:
          httpGet:
            path: /ready
            port: 3000
          initialDelaySeconds: 10
          periodSeconds: 5

6. GitHub Actions пример

name: Deploy

on:
  push:
    branches: [main]

jobs:
  test-and-deploy:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v3
      
      - name: Setup Node.js
        uses: actions/setup-node@v3
        with:
          node-version: '18'
          cache: 'npm'
      
      - name: Install dependencies
        run: npm ci
      
      - name: Lint
        run: npm run lint
      
      - name: Test
        run: npm run test -- --coverage
      
      - name: Build
        run: npm run build
      
      - name: Build Docker image
        run: docker build -t api:${{ github.sha }} .
      
      - name: Push to registry
        run: docker push registry.example.com/api:${{ github.sha }}
      
      - name: Deploy to Kubernetes
        run: kubectl set image deployment/api api=registry.example.com/api:${{ github.sha }}

7. Мониторинг и откат

Метрики для отката:

  • Error rate > 1%
  • Response time > 500ms (p95)
  • CPU usage > 90%
  • Memory usage > 85%

Автоматический откат:

# Если health check не прошёл
kubectl rollout undo deployment/api

8. Environment variables

Prod environment:

NODE_ENV=production
DATABASE_URL=postgres://...
REDIS_URL=redis://...
API_KEY=****
LOG_LEVEL=info
PORT=3000

Staging environment:

NODE_ENV=staging
DATABASE_URL=postgres://staging...
DEBUG=true
LOG_LEVEL=debug

9. Миграции БД

# До деплоя нового кода
npm run migrate up

# Проверка
npm run migrate status

# Откат при ошибке
npm run migrate down

10. Лучшие практики

Минимизировать downtime:

  • Backward compatible миграции
  • Feature flags для постепенного rollout
  • Health checks на каждый инстанс

Безопасность:

  • Secrets в vault (не в git)
  • HTTPS everywhere
  • Подпись артефактов

Observability:

  • Логирование структурированное (JSON)
  • Метрики в Prometheus
  • Трейсинг в Jaeger
  • Алерты в Slack/PagerDuty

Процесс деплоя должен быть полностью автоматизирован, быстр и надёжен — это основа уверенности в production системе.

Как был настроен процесс деплоя в проекте? | PrepBro