← Назад к вопросам
Как был настроен процесс деплоя в проекте?
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 системе.