# 🚀 Скрипты автоматического развертывания ## 📋 Доступные скрипты ### 1. `deploy.sh` - Полный деплой с проверками **Рекомендуется для продакшена** Функции: - ✅ Проверка зависимостей и окружения - ✅ Автоматический бэкап базы данных - ✅ Получение изменений из Git - ✅ Сборка и запуск контейнеров - ✅ Применение миграций - ✅ Сборка статических файлов - ✅ Проверка здоровья приложения - ✅ Тестирование всех эндпоинтов - ✅ Анализ логов на ошибки - ✅ Автоматический rollback при ошибках - ✅ Отчет о времени деплоя ### 2. `quick-deploy.sh` - Быстрый деплой **Для разработки и тестирования** Функции: - Pull изменений из Git - Пересборка контейнеров - Применение миграций - Сборка статики --- ## 🔧 Установка и настройка ### Шаг 1: Настройка переменных в deploy.sh Откройте `deploy.sh` и измените следующие строки: ```bash # Конфигурация (строки 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: Создание директорий ```bash # На продакшн сервере 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: Установка прав на выполнение ```bash chmod +x deploy.sh chmod +x quick-deploy.sh ``` --- ## 🚀 Использование ### Полный деплой (рекомендуется для прода) ```bash ./deploy.sh ``` **Что происходит:** 1. Проверка всех зависимостей (Docker, Git, curl) 2. Проверка .env файла на корректность 3. Создание резервной копии БД (автоматически с датой) 4. Получение последних изменений из Git 5. Остановка старых контейнеров 6. Сборка новых Docker образов 7. Запуск контейнеров 8. Применение миграций Django 9. Сборка статических файлов 10. Проверка работоспособности (HTTP запросы) 11. Тестирование всех эндпоинтов 12. Проверка логов на ошибки 13. Вывод статуса и времени деплоя **При ошибке:** Автоматический откат к предыдущей версии! ### Быстрый деплой (для разработки) ```bash ./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`: ```bash 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 для автоматического деплоя ```bash # Редактирование 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: ```yaml # .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" ```bash # Решение: установите права на выполнение chmod +x deploy.sh chmod +x quick-deploy.sh ``` ### Проблема: "Docker command not found" ```bash # Решение: установите Docker curl -fsSL https://get.docker.com | sh sudo usermod -aG docker $USER newgrp docker ``` ### Проблема: Скрипт не видит .env файл ```bash # Решение: убедитесь что .env находится в PROJECT_DIR ls -la /var/www/smartsoltech.kr/.env # Если файла нет, создайте его cp .env.example .env nano .env ``` ### Проблема: Healthcheck timeout ```bash # Решение: увеличьте HEALTHCHECK_TIMEOUT в deploy.sh HEALTHCHECK_TIMEOUT=120 # было 60 ``` ### Проблема: Ошибка при бэкапе БД ```bash # Решение: проверьте что контейнер postgres_db запущен docker ps | grep postgres_db # Если не запущен, запустите вручную docker compose up -d postgres_db sleep 10 ./deploy.sh ``` --- ## 📝 Логирование Все действия логируются с временными метками и цветовым кодированием: - 🔵 **[INFO]** - Информационные сообщения - 🟢 **[SUCCESS]** - Успешные операции - 🟡 **[WARNING]** - Предупреждения (деплой продолжается) - 🔴 **[ERROR]** - Ошибки (деплой останавливается и откатывается) Для сохранения логов в файл: ```bash ./deploy.sh 2>&1 | tee /var/log/smartsoltech-deploy-$(date +%Y%m%d_%H%M%S).log ``` --- ## ⚡ Лучшие практики 1. **Всегда используйте полный деплой на продакшене** ```bash ./deploy.sh # НЕ quick-deploy.sh ``` 2. **Проверяйте бэкапы регулярно** ```bash ls -lh /var/backups/smartsoltech/ ``` 3. **Мониторьте логи после деплоя** ```bash 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 smartsoltech/manage.py migrate` | Ручное применение миграций | | `docker exec django_app python smartsoltech/manage.py collectstatic --noinput` | Ручная сборка статики | | `ls -lh /var/backups/smartsoltech/` | Список бэкапов | --- **Документация обновлена:** 24 ноября 2025 г.