- Changed 'python manage.py' to 'python smartsoltech/manage.py' in all deployment scripts - Fixed deploy.sh, quick-deploy.sh - Updated DEPLOYMENT_GUIDE.md and DEPLOYMENT_SCRIPTS.md documentation - Added SERVER_FIX.md with instructions for server fix Fixes issue: python: can't open file '/app/manage.py': [Errno 2] No such file or directory
355 lines
13 KiB
Markdown
355 lines
13 KiB
Markdown
# 🚀 Скрипты автоматического развертывания
|
||
|
||
## 📋 Доступные скрипты
|
||
|
||
### 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 г.
|