Комментарии (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 успешен!"
Что может пойти не так
- Миграция БД сломала структуру → откат
- Новый код имеет баги → пользователи видят ошибки
- Забыли обновить env переменные → приложение не работает
- Downtime → пользователи не могут использовать приложение
- Откатить не можем → старая версия потеряна
Как избежать проблем
- Всегда тестируй перед 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 вручную = каждый раз может пойти что-то не так.