🔧 Исправлена поддержка Docker Compose v2
Some checks failed
continuous-integration/drone/push Build is failing

 Fixes:
- Добавлена поддержка Docker Compose v2 (docker compose)
- Автоматическое определение версии Docker Compose в Makefile
- Обновлены скрипты master-deploy.sh и pre-deploy-check.sh
- Добавлена утилита detect-docker-compose.sh
- Исправлены команды в функции setup_database

🔧 Изменения:
- Makefile: улучшенное определение команды Docker Compose
- master-deploy.sh: использует make команды вместо прямых вызовов
- pre-deploy-check.sh: проверка обеих версий Docker Compose
- Добавлена команда shell-exec в Makefile

Теперь скрипт корректно работает с Docker Compose v2 на современных системах.
This commit is contained in:
2025-11-04 20:12:09 +09:00
parent e1bb1ab90a
commit 280a6c4ad0
4 changed files with 109 additions and 17 deletions

View File

@@ -46,6 +46,9 @@ print(''.join(secrets.choice(chars) for i in range(50)))
"
}
# Глобальная переменная для команды Docker Compose
DOCKER_COMPOSE_CMD=""
# Проверка требований
check_requirements() {
log "🔍 Проверка системных требований..."
@@ -55,11 +58,18 @@ check_requirements() {
error "Docker не установлен. Установите Docker и попробуйте снова."
fi
# Проверяем Docker Compose
if ! command -v docker-compose &> /dev/null; then
# Проверяем Docker Compose (v1 или v2)
DOCKER_COMPOSE_CMD=$(./scripts/detect-docker-compose.sh)
if [[ -z "$DOCKER_COMPOSE_CMD" ]]; then
error "Docker Compose не установлен. Установите Docker Compose и попробуйте снова."
fi
if [[ "$DOCKER_COMPOSE_CMD" == "docker-compose" ]]; then
log "✅ Найден Docker Compose v1"
else
log "✅ Найден Docker Compose v2"
fi
# Проверяем nginx
if ! command -v nginx &> /dev/null; then
warning "nginx не установлен. Установка nginx..."
@@ -438,20 +448,45 @@ EOF
setup_database() {
log "🗄️ Настройка и проверка безопасности базы данных..."
# Проверяем что контейнеры запущены
if ! docker-compose ps | grep -q "Up"; then
log "Запуск контейнеров для настройки БД..."
docker-compose up -d
sleep 15
# Ждем запуска контейнеров
log "⏳ Ожидание запуска контейнеров..."
sleep 15
# Проверяем статус контейнеров
if ! make status | grep -q "Up"; then
warning "Контейнеры могут быть не готовы, ожидаем еще..."
sleep 10
fi
# Применяем миграции
log "🔄 Применение миграций базы данных..."
docker-compose exec -T web python manage.py migrate
if ! make migrate; then
error "Ошибка применения миграций"
fi
# Создаем суперпользователя (если не существует)
log "👤 Создание суперпользователя..."
docker-compose exec -T web python manage.py shell << 'EOF'
# Создаем суперпользователя
log "👤 Настройка суперпользователя..."
cat > /tmp/create_superuser.py << 'PYTHON_EOF'
from django.contrib.auth import get_user_model
User = get_user_model()
if not User.objects.filter(username='admin').exists():
User.objects.create_superuser('admin', 'admin@example.com', 'admin123')
print('✅ Суперпользователь admin создан с паролем admin123')
print('⚠️ ВАЖНО: Смените пароль после первого входа!')
else:
print(' Суперпользователь уже существует')
PYTHON_EOF
# Выполняем скрипт создания суперпользователя
if make shell-exec CMD="python manage.py shell < /tmp/create_superuser.py" 2>/dev/null; then
success "Суперпользователь настроен"
else
# Fallback - используем прямую команду
$(./scripts/detect-docker-compose.sh) exec web python manage.py shell < /tmp/create_superuser.py || warning "Не удалось создать суперпользователя автоматически"
fi
# Удаляем временный файл
rm -f /tmp/create_superuser.py
from django.contrib.auth import get_user_model
User = get_user_model()
if not User.objects.filter(username='admin').exists():
@@ -660,8 +695,14 @@ main() {
setup_nginx
log "🏗️ Сборка и запуск контейнеров..."
make build-prod
make up-prod
# Используем Makefile команды которые автоматически определяют Docker Compose
if ! make build-prod; then
error "Ошибка сборки контейнеров"
fi
if ! make up-prod; then
error "Ошибка запуска контейнеров"
fi
setup_database
setup_ssl