Files
smartsoltech_site/DEPLOYMENT_SCRIPTS.md
2025-11-24 11:31:29 +09:00

13 KiB
Raw Blame History

🚀 Скрипты автоматического развертывания

📋 Доступные скрипты

1. deploy.sh - Полный деплой с проверками

Рекомендуется для продакшена

Функции:

  • Проверка зависимостей и окружения
  • Автоматический бэкап базы данных
  • Получение изменений из Git
  • Сборка и запуск контейнеров
  • Применение миграций
  • Сборка статических файлов
  • Проверка здоровья приложения
  • Тестирование всех эндпоинтов
  • Анализ логов на ошибки
  • Автоматический rollback при ошибках
  • Отчет о времени деплоя

2. quick-deploy.sh - Быстрый деплой

Для разработки и тестирования

Функции:

  • Pull изменений из Git
  • Пересборка контейнеров
  • Применение миграций
  • Сборка статики

🔧 Установка и настройка

Шаг 1: Настройка переменных в deploy.sh

Откройте deploy.sh и измените следующие строки:

# Конфигурация (строки 19-23)
PROJECT_DIR="/var/www/smartsoltech.kr"  # Путь к проекту
COMPOSE_FILE="docker-compose.yml"        # Имя docker-compose файла
BACKUP_DIR="/var/backups/smartsoltech"   # Директория для бэкапов
MAX_BACKUPS=5                            # Количество хранимых бэкапов
HEALTHCHECK_TIMEOUT=60                   # Таймаут проверки здоровья (сек)
DOMAIN="smartsoltech.kr"                 # Домен сайта

Шаг 2: Создание директорий

# На продакшн сервере
sudo mkdir -p /var/www/smartsoltech.kr
sudo mkdir -p /var/backups/smartsoltech
sudo chown $USER:$USER /var/www/smartsoltech.kr
sudo chown $USER:$USER /var/backups/smartsoltech

Шаг 3: Установка прав на выполнение

chmod +x deploy.sh
chmod +x quick-deploy.sh

🚀 Использование

Полный деплой (рекомендуется для прода)

./deploy.sh

Что происходит:

  1. Проверка всех зависимостей (Docker, Git, curl)
  2. Проверка .env файла на корректность
  3. Создание резервной копии БД (автоматически с датой)
  4. Получение последних изменений из Git
  5. Остановка старых контейнеров
  6. Сборка новых Docker образов
  7. Запуск контейнеров
  8. Применение миграций Django
  9. Сборка статических файлов
  10. Проверка работоспособности (HTTP запросы)
  11. Тестирование всех эндпоинтов
  12. Проверка логов на ошибки
  13. Вывод статуса и времени деплоя

При ошибке: Автоматический откат к предыдущей версии!

Быстрый деплой (для разработки)

./quick-deploy.sh

Что происходит:

  1. Git pull
  2. Docker compose down
  3. Docker compose build
  4. Docker compose up -d
  5. Миграции и статика
  6. Проверка статуса

📊 Примеры вывода

Успешный деплой

═══════════════════════════════════════════════════════════
  🚀 SmartSolTech Automated Deployment
  📅 2025-11-24 15:30:00
═══════════════════════════════════════════════════════════

[INFO] 2025-11-24 15:30:00 - Проверка зависимостей...
[SUCCESS] 2025-11-24 15:30:01 - Все зависимости установлены
[INFO] 2025-11-24 15:30:01 - Проверка .env файла...
[SUCCESS] 2025-11-24 15:30:01 - .env файл проверен
[INFO] 2025-11-24 15:30:01 - Создание резервной копии базы данных...
[SUCCESS] 2025-11-24 15:30:05 - Резервная копия создана: /var/backups/smartsoltech/db_backup_20251124_153005.sql
[INFO] 2025-11-24 15:30:05 - Получение последних изменений из Git...
[SUCCESS] 2025-11-24 15:30:07 - Код обновлен до коммита: abc123de
[INFO] 2025-11-24 15:30:07 - Остановка контейнеров...
[SUCCESS] 2025-11-24 15:30:10 - Контейнеры остановлены
[INFO] 2025-11-24 15:30:10 - Сборка Docker образов...
[SUCCESS] 2025-11-24 15:30:45 - Образы собраны
[INFO] 2025-11-24 15:30:45 - Запуск контейнеров...
[SUCCESS] 2025-11-24 15:30:48 - Контейнеры запущены
[INFO] 2025-11-24 15:30:58 - Применение миграций базы данных...
[SUCCESS] 2025-11-24 15:31:02 - Миграции применены
[INFO] 2025-11-24 15:31:02 - Сборка статических файлов...
[SUCCESS] 2025-11-24 15:31:05 - Статические файлы собраны
[INFO] 2025-11-24 15:31:05 - Проверка работоспособности приложения...
[SUCCESS] 2025-11-24 15:31:15 - Приложение отвечает (HTTP 200)
[INFO] 2025-11-24 15:31:15 - Тестирование критичных эндпоинтов...
[SUCCESS] 2025-11-24 15:31:15 - ✓ / - HTTP 200
[SUCCESS] 2025-11-24 15:31:16 - ✓ /services/ - HTTP 200
[SUCCESS] 2025-11-24 15:31:16 - ✓ /about/ - HTTP 200
[SUCCESS] 2025-11-24 15:31:17 - ✓ /contact/ - HTTP 200
[SUCCESS] 2025-11-24 15:31:17 - ✓ /blog/ - HTTP 200
[SUCCESS] 2025-11-24 15:31:18 - ✓ /news/ - HTTP 200
[SUCCESS] 2025-11-24 15:31:18 - ✓ /portfolio/ - HTTP 200
[SUCCESS] 2025-11-24 15:31:19 - ✓ /career/ - HTTP 200
[SUCCESS] 2025-11-24 15:31:19 - ✓ /admin/ - HTTP 302
[SUCCESS] 2025-11-24 15:31:19 - Все эндпоинты работают корректно
[INFO] 2025-11-24 15:31:19 - Проверка логов на критичные ошибки...
[SUCCESS] 2025-11-24 15:31:20 - Критичных ошибок в логах не обнаружено

[INFO] 2025-11-24 15:31:20 - Статус контейнеров:
NAME            IMAGE                      STATUS
postgres_db     postgres:17-alpine         Up 32 seconds (healthy)
django_app      smartsoltech-django_app    Up 30 seconds
telegram_bot    smartsoltech-telegram_bot  Up 30 seconds
nginx           nginx:alpine              Up 29 seconds

═══════════════════════════════════════════════════════════
[SUCCESS] 2025-11-24 15:31:20 - 🎉 Деплой успешно завершен за 80 секунд!
═══════════════════════════════════════════════════════════

Деплой с откатом при ошибке

[ERROR] 2025-11-24 15:35:45 - Проверка работоспособности не пройдена
[ERROR] 2025-11-24 15:35:45 - Выполнение отката изменений...
[INFO] 2025-11-24 15:35:45 - Откат кода к коммиту: xyz789ab
[INFO] 2025-11-24 15:35:46 - Восстановление БД из: /var/backups/smartsoltech/db_backup_20251124_153000.sql.gz
[SUCCESS] 2025-11-24 15:35:55 - База данных восстановлена
[WARNING] 2025-11-24 15:36:00 - Откат завершен. Проверьте работоспособность.

🔧 Расширенные возможности

Добавление уведомлений в Telegram

Отредактируйте функцию send_notification() в deploy.sh:

send_notification() {
    local status=$1
    local message=$2
    
    # Telegram уведомление
    local bot_token="YOUR_BOT_TOKEN"
    local chat_id="YOUR_CHAT_ID"
    
    curl -s -X POST "https://api.telegram.org/bot${bot_token}/sendMessage" \
        -d chat_id="${chat_id}" \
        -d text="[${status}] SmartSolTech Deploy: ${message}" \
        -d parse_mode="HTML"
}

Настройка cron для автоматического деплоя

# Редактирование crontab
crontab -e

# Добавить строку для деплоя каждый день в 3:00
0 3 * * * /var/www/smartsoltech.kr/deploy.sh >> /var/log/smartsoltech-deploy.log 2>&1

Создание webhook для деплоя при push в Git

Используйте GitHub Actions или GitLab CI/CD:

# .github/workflows/deploy.yml
name: Auto Deploy

on:
  push:
    branches: [ master ]

jobs:
  deploy:
    runs-on: self-hosted
    steps:
      - name: Deploy to Production
        run: |
          cd /var/www/smartsoltech.kr
          ./deploy.sh

📁 Структура бэкапов

/var/backups/smartsoltech/
├── db_backup_20251124_153000.sql.gz
├── db_backup_20251124_120000.sql.gz
├── db_backup_20251123_153000.sql.gz
├── db_backup_20251123_120000.sql.gz
├── db_backup_20251122_153000.sql.gz
└── last_commit.txt

Автоматически хранятся последние 5 бэкапов (настраивается через MAX_BACKUPS).


🔍 Troubleshooting

Проблема: "Permission denied"

# Решение: установите права на выполнение
chmod +x deploy.sh
chmod +x quick-deploy.sh

Проблема: "Docker command not found"

# Решение: установите Docker
curl -fsSL https://get.docker.com | sh
sudo usermod -aG docker $USER
newgrp docker

Проблема: Скрипт не видит .env файл

# Решение: убедитесь что .env находится в PROJECT_DIR
ls -la /var/www/smartsoltech.kr/.env

# Если файла нет, создайте его
cp .env.example .env
nano .env

Проблема: Healthcheck timeout

# Решение: увеличьте HEALTHCHECK_TIMEOUT в deploy.sh
HEALTHCHECK_TIMEOUT=120  # было 60

Проблема: Ошибка при бэкапе БД

# Решение: проверьте что контейнер postgres_db запущен
docker ps | grep postgres_db

# Если не запущен, запустите вручную
docker compose up -d postgres_db
sleep 10
./deploy.sh

📝 Логирование

Все действия логируются с временными метками и цветовым кодированием:

  • 🔵 [INFO] - Информационные сообщения
  • 🟢 [SUCCESS] - Успешные операции
  • 🟡 [WARNING] - Предупреждения (деплой продолжается)
  • 🔴 [ERROR] - Ошибки (деплой останавливается и откатывается)

Для сохранения логов в файл:

./deploy.sh 2>&1 | tee /var/log/smartsoltech-deploy-$(date +%Y%m%d_%H%M%S).log

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

  1. Всегда используйте полный деплой на продакшене

    ./deploy.sh  # НЕ quick-deploy.sh
    
  2. Проверяйте бэкапы регулярно

    ls -lh /var/backups/smartsoltech/
    
  3. Мониторьте логи после деплоя

    docker logs django_app --tail 100 -f
    
  4. Тестируйте на staging перед продакшеном

  5. Делайте деплой в период минимальной нагрузки


🎯 Быстрая справка

Команда Описание
./deploy.sh Полный деплой с проверками и rollback
./quick-deploy.sh Быстрый деплой без проверок
docker compose ps Статус контейнеров
docker logs django_app -f Просмотр логов в реальном времени
docker exec django_app python manage.py migrate Ручное применение миграций
docker exec django_app python manage.py collectstatic --noinput Ручная сборка статики
ls -lh /var/backups/smartsoltech/ Список бэкапов

Документация обновлена: 24 ноября 2025 г.