- 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
13 KiB
13 KiB
🚀 Скрипты автоматического развертывания
📋 Доступные скрипты
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
Что происходит:
- Проверка всех зависимостей (Docker, Git, curl)
- Проверка .env файла на корректность
- Создание резервной копии БД (автоматически с датой)
- Получение последних изменений из Git
- Остановка старых контейнеров
- Сборка новых Docker образов
- Запуск контейнеров
- Применение миграций Django
- Сборка статических файлов
- Проверка работоспособности (HTTP запросы)
- Тестирование всех эндпоинтов
- Проверка логов на ошибки
- Вывод статуса и времени деплоя
При ошибке: Автоматический откат к предыдущей версии!
Быстрый деплой (для разработки)
./quick-deploy.sh
Что происходит:
- Git pull
- Docker compose down
- Docker compose build
- Docker compose up -d
- Миграции и статика
- Проверка статуса
📊 Примеры вывода
Успешный деплой
═══════════════════════════════════════════════════════════
🚀 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
⚡ Лучшие практики
-
Всегда используйте полный деплой на продакшене
./deploy.sh # НЕ quick-deploy.sh -
Проверяйте бэкапы регулярно
ls -lh /var/backups/smartsoltech/ -
Мониторьте логи после деплоя
docker logs django_app --tail 100 -f -
Тестируйте на staging перед продакшеном
-
Делайте деплой в период минимальной нагрузки
🎯 Быстрая справка
| Команда | Описание |
|---|---|
./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 г.