prod
This commit is contained in:
354
DEPLOYMENT_SCRIPTS.md
Normal file
354
DEPLOYMENT_SCRIPTS.md
Normal 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 г.
|
||||
Reference in New Issue
Block a user