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

Что такое deploy?

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

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

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

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

Deploy: развертывание приложения

Deploy (развертывание) — это процесс переноса приложения с локального компьютера или сервера разработки на production сервер, чтобы его могли использовать реальные пользователи. Это последний шаг перед тем, как ваш код начнет работать на реальных данных и реальных пользователях.

Что происходит во время Deploy

1. Код поступает на сервер

# Git push на remote (GitHub, GitLab, etc)
git push origin main

# Или через SSH/SCP
scp -r ./dist/ user@server:/var/www/app/

2. Установка зависимостей

# На сервере
npm install

# Или с production флагом (без dev зависимостей)
npm install --production

3. Сборка (если нужна)

npm run build
# или
TypeScript компилируется в JavaScript
npm run build:prod

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

# Применить миграции к production БД
npm run migrate:prod
# или
goose up -dir migrations

5. Запуск приложения

# Обычно через PM2 или Docker
pm2 start app.js --name "my-app"

# Или Docker
docker pull my-registry/my-app:latest
docker run -d -p 3000:3000 my-app:latest

6. Проверка и мониторинг

# Приложение должно быть доступно
curl http://server-ip:3000

# Проверка логов
pm2 logs my-app

# Мониторинг процесса
pm2 monit

Виды Deploy

1. Manual Deploy (старый способ)

Всё делается вручную, по шагам. Медленно и подвержено ошибкам:

# SSH на сервер
ssh user@server

# Скачать новый код
cd /var/www/app
git pull origin main

# Установить зависимости
npm install

# Пересобрать
npm run build

# Перезагрузить приложение
pm2 restart app

2. Automated Deploy (CI/CD)

GitHub Actions, GitLab CI, Jenkins автоматически разворачивают при push на main:

# .github/workflows/deploy.yml
name: Deploy to Production

on:
  push:
    branches:
      - main

jobs:
  deploy:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v2
      
      - name: Install dependencies
        run: npm install
      
      - name: Run tests
        run: npm test
      
      - name: Build
        run: npm run build
      
      - name: Deploy to server
        env:
          SSH_KEY: ${{ secrets.SSH_KEY }}
          SERVER: ${{ secrets.SERVER_IP }}
        run: |
          mkdir -p ~/.ssh
          echo "$SSH_KEY" > ~/.ssh/id_rsa
          chmod 600 ~/.ssh/id_rsa
          ssh user@$SERVER 'cd /var/www/app && git pull && npm install && npm run build && pm2 restart app'

Это надежнее: всегда тестируется перед deploy, ошибки ловятся автоматически.

3. Blue-Green Deploy

Две версии приложения работают одновременно, переключение мгновенное:

Просроче версия (GREEN)  →  Новая версия (BLUE)
↑                         ↑
Оля трафика идет сюда    Новая версия тестируется
                          Переключение в один клик

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

  • Нет downtime (приложение всегда работает)
  • Быстрый откат (просто переключить обратно)
  • Можно протестировать реальный трафик на новой версии

4. Rolling Deploy

Постепенно обновляются экземпляры (1 из 5, потом 2 из 5, и т.д.):

Шаг 1:  [NEW] [OLD] [OLD] [OLD] [OLD]  (20% на новой версии)
Шаг 2:  [NEW] [NEW] [OLD] [OLD] [OLD]  (40%)
Шаг 3:  [NEW] [NEW] [NEW] [OLD] [OLD]  (60%)
Шаг 4:  [NEW] [NEW] [NEW] [NEW] [OLD]  (80%)
Шаг 5:  [NEW] [NEW] [NEW] [NEW] [NEW]  (100%)

Если новая версия имеет баг:

  • Падает только часть трафика
  • Быстро откатываются старые экземпляры
  • Остальные пользователи не замечают

Deploy на разные платформы

1. На собственный сервер (VPS)

# Dokku (simple PaaS)
git push dokku main

# Или Capristan (Ruby deploy tool, но работает везде)
cap production deploy

# Или просто SSH + PM2
ssh user@server
npm install && npm run build && pm2 restart app

2. На Heroku

# Heroku автоматически разворачивает при push
git push heroku main

3. На AWS EC2

# Через CodeDeploy
aws deploy create-deployment --application-name MyApp --deployment-group-name production

# Или вручную через SSH
ssh -i key.pem ubuntu@ec2-instance.amazonaws.com

4. На Docker / Kubernetes

# Docker
docker build -t my-app:1.0.0 .
docker push my-registry/my-app:1.0.0

# Kubernetes
kubectl set image deployment/my-app my-app=my-registry/my-app:1.0.0
kubectl rollout status deployment/my-app

5. На Vercel / Netlify (для фронтенда)

# Автоматический deploy при push на main
git push origin main
# Vercel сама собирает и деплоит

Пример реального deployment процесса (Node.js на VPS)

#!/bin/bash
set -e  # Выход при ошибке

echo "🚀 Начинаю deploy..."

# 1. Скачать новый код
echo "📥 Обновляю код..."
cd /var/www/myapp
git fetch origin
git reset --hard origin/main

# 2. Установить зависимости
echo "📦 Устанавливаю зависимости..."
npm ci --production

# 3. Сборка
echo "🔨 Собираю приложение..."
npm run build

# 4. Тесты (опционально)
echo "🧪 Запускаю тесты..."
npm run test || true

# 5. Миграции БД
echo "🗄️ Применяю миграции..."
goose up -dir migrations

# 6. Перезагрузка
echo "♻️ Перезагружаю приложение..."
pm2 restart app

# 7. Проверка
echo "✅ Проверяю статус..."
curl -f http://localhost:3000/health || exit 1

echo "✅ Deploy успешен!"

Что может пойти не так

  1. Миграция БД сломала структуру → откат
  2. Новый код имеет баги → пользователи видят ошибки
  3. Забыли обновить env переменные → приложение не работает
  4. Downtime → пользователи не могут использовать приложение
  5. Откатить не можем → старая версия потеряна

Как избежать проблем

  • Всегда тестируй перед deploy (unit tests, e2e tests)
  • Используй CI/CD (не ручной deploy)
  • Имей быстрый откат (blue-green, rolling deploy)
  • Мониторь после deploy (error tracking, logs, health checks)
  • Документируй deploy процесс (README, runbook)
  • Резервные копии БД перед deploy
  • Маленькие, частые deploy лучше, чем большие редкие

Вывод

Deploy — это критичный процесс. Хороший deploy:

  • Автоматизирован (CI/CD)
  • Имеет быстрый откат
  • Безопасен (тесты перед deploy)
  • Мониторится (логи, алерты)
  • Документирован

Плохой deploy вручную = каждый раз может пойти что-то не так.

Что такое deploy? | PrepBro