This commit is contained in:
2025-11-24 11:31:29 +09:00
parent ce7119e9e9
commit 1da6180658
30 changed files with 4352 additions and 272 deletions

354
DEPLOYMENT_SCRIPTS.md Normal file
View File

@@ -0,0 +1,354 @@
# 🚀 Скрипты автоматического развертывания
## 📋 Доступные скрипты
### 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 manage.py migrate` | Ручное применение миграций |
| `docker exec django_app python manage.py collectstatic --noinput` | Ручная сборка статики |
| `ls -lh /var/backups/smartsoltech/` | Список бэкапов |
---
**Документация обновлена:** 24 ноября 2025 г.