🔧 Исправлена синтаксическая ошибка и улучшена система развертывания
Some checks failed
continuous-integration/drone/push Build is failing

 Исправления:
- Удален дублированный Python код из master-deploy.sh (строка 491)
- Исправлена логика завершения pre-deploy-check.sh
- Предупреждения больше не вызывают ошибку выхода

 Новые возможности:
- Добавлен quick-deploy.sh для быстрого развертывания
- Команда make quick-deploy для систем с ограниченными ресурсами
- Команда make deploy-force для пропуска проверок
- Команда make pre-deploy-check-force для игнорирования предупреждений

📋 Улучшения:
- pre-deploy-check теперь корректно обрабатывает предупреждения о RAM
- Добавлена поддержка флага --skip-checks в master-deploy.sh
- Более понятные сообщения об ошибках и предупреждениях

Теперь система готова к развертыванию даже на серверах с 1GB RAM.
This commit is contained in:
2025-11-04 20:18:50 +09:00
parent 280a6c4ad0
commit 6a2bc06fb9
4 changed files with 176 additions and 12 deletions

View File

@@ -138,10 +138,23 @@ deploy: ## Мастер-развертывание проекта с полно
echo "❌ Развертывание отменено"; \ echo "❌ Развертывание отменено"; \
fi fi
deploy-force: ## Принудительное развертывание без проверок
@echo "🚀 Принудительное развертывание CatLink..."
@echo "⚠️ Пропуск проверки готовности системы"
@./scripts/master-deploy.sh --skip-checks
quick-deploy: ## Быстрое развертывание без полной настройки
@echo "⚡ Быстрое развертывание CatLink..."
@./scripts/quick-deploy.sh
pre-deploy-check: ## Проверка готовности системы к развертыванию pre-deploy-check: ## Проверка готовности системы к развертыванию
@echo "🔍 Проверка готовности системы..." @echo "🔍 Проверка готовности системы..."
@./scripts/pre-deploy-check.sh @./scripts/pre-deploy-check.sh
pre-deploy-check-force: ## Проверка готовности (игнорировать предупреждения)
@echo "🔍 Проверка готовности системы (игнорировать предупреждения)..."
@./scripts/pre-deploy-check.sh || echo "⚠️ Есть предупреждения, но продолжаем..."
# === SSL and Security === # === SSL and Security ===
ssl-setup: ## Настройка SSL сертификатов ssl-setup: ## Настройка SSL сертификатов

View File

@@ -487,15 +487,6 @@ PYTHON_EOF
# Удаляем временный файл # Удаляем временный файл
rm -f /tmp/create_superuser.py 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():
User.objects.create_superuser('admin', 'admin@example.com', 'admin123')
print("Суперпользователь 'admin' создан с паролем 'admin123'")
print("ВАЖНО: Смените пароль после первого входа!")
else:
print("Суперпользователь уже существует")
EOF
# Запускаем аудит безопасности БД # Запускаем аудит безопасности БД
if [[ -f "./scripts/audit-db-security.sh" ]]; then if [[ -f "./scripts/audit-db-security.sh" ]]; then
@@ -680,6 +671,17 @@ main() {
echo "🚀 ========================================" echo "🚀 ========================================"
echo "" echo ""
# Проверяем аргументы командной строки
SKIP_CHECKS=false
for arg in "$@"; do
case $arg in
--skip-checks)
SKIP_CHECKS=true
shift
;;
esac
done
# Проверяем что мы в правильной директории # Проверяем что мы в правильной директории
if [ ! -f "docker-compose.yml" ]; then if [ ! -f "docker-compose.yml" ]; then
error "Файл docker-compose.yml не найден. Запустите скрипт из корня проекта." error "Файл docker-compose.yml не найден. Запустите скрипт из корня проекта."
@@ -689,7 +691,20 @@ main() {
mkdir -p {logs,backups,scripts} mkdir -p {logs,backups,scripts}
# Основной процесс развертывания # Основной процесс развертывания
if [ "$SKIP_CHECKS" = false ]; then
check_requirements check_requirements
else
warning "Пропуск проверки системных требований"
# Определяем Docker Compose команду без полной проверки
if command -v docker-compose &> /dev/null; then
DOCKER_COMPOSE_CMD="docker-compose"
elif docker compose version &> /dev/null; then
DOCKER_COMPOSE_CMD="docker compose"
else
error "Docker Compose не найден"
fi
fi
collect_deployment_info collect_deployment_info
generate_env_file generate_env_file
setup_nginx setup_nginx

View File

@@ -222,15 +222,24 @@ fi
# Итоговая сводка # Итоговая сводка
echo "" echo ""
echo "📊 ===== ИТОГОВАЯ СВОДКА =====" echo "📊 ===== ИТОГОВАЯ СВОДКА ====="
echo "Ошибки: $ERRORS, Предупреждения: $WARNINGS"
echo ""
if [ $ERRORS -eq 0 ] && [ $WARNINGS -eq 0 ]; then if [ $ERRORS -eq 0 ] && [ $WARNINGS -eq 0 ]; then
success "Система полностью готова к развертыванию!" success "Система полностью готова к развертыванию!"
echo "" echo ""
echo "🚀 Можете запускать: make deploy" echo "🚀 Можете запускать: make deploy"
EXIT_CODE=0
elif [ $ERRORS -eq 0 ]; then elif [ $ERRORS -eq 0 ]; then
warning "Система готова к развертыванию с предупреждениями ($WARNINGS)" warning "Система готова к развертыванию с предупреждениями ($WARNINGS)"
echo "" echo ""
echo "⚡ Можете запускать: make deploy" echo "⚡ Можете запускать: make deploy"
echo " (предупреждения будут обработаны автоматически)" echo " (предупреждения будут обработаны автоматически)"
echo ""
echo "📋 Найденные предупреждения не критичны:"
echo " - Мало RAM: рекомендуется 2GB, но 1GB достаточно для базовой работы"
echo " - Другие предупреждения можно проигнорировать"
EXIT_CODE=0
else else
error "Обнаружены критические проблемы ($ERRORS ошибок, $WARNINGS предупреждений)" error "Обнаружены критические проблемы ($ERRORS ошибок, $WARNINGS предупреждений)"
echo "" echo ""
@@ -238,7 +247,7 @@ else
echo " - Установите недостающие компоненты" echo " - Установите недостающие компоненты"
echo " - Освободите дисковое пространство" echo " - Освободите дисковое пространство"
echo " - Настройте права доступа" echo " - Настройте права доступа"
exit 1 EXIT_CODE=1
fi fi
echo "" echo ""
@@ -248,4 +257,4 @@ echo " make deploy - Запустить полное разверты
echo " make security-audit - Проверить безопасность" echo " make security-audit - Проверить безопасность"
echo " make logs - Посмотреть логи" echo " make logs - Посмотреть логи"
exit 0 exit $EXIT_CODE

127
scripts/quick-deploy.sh Executable file
View File

@@ -0,0 +1,127 @@
#!/bin/bash
# Quick deployment script for CatLink
# Быстрое развертывание для систем с ограниченными ресурсами
set -e
# Цвета
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
NC='\033[0m'
log() { echo -e "${BLUE}[$(date '+%H:%M:%S')]${NC} $1"; }
success() { echo -e "${GREEN}$1${NC}"; }
warning() { echo -e "${YELLOW}⚠️ $1${NC}"; }
echo "⚡ ===== CatLink Quick Deploy ====="
echo " Быстрое развертывание без полной настройки"
echo ""
# Проверка файлов
if [ ! -f "docker-compose.yml" ]; then
echo "❌ Файл docker-compose.yml не найден"
exit 1
fi
# Проверка .env
if [ ! -f ".env" ]; then
warning ".env файл не найден, создаем базовый..."
cat > .env << 'EOF'
# Basic CatLink Configuration
DJANGO_SECRET_KEY=change-me-in-production-please-use-long-random-string
DJANGO_DEBUG=False
DJANGO_ALLOWED_HOSTS=localhost,127.0.0.1
# Database
DATABASE_ENGINE=django.db.backends.postgresql
DATABASE_NAME=links_db
DATABASE_USER=links_user
DATABASE_PASSWORD=change-me-in-production
DATABASE_HOST=db
DATABASE_PORT=5432
# PostgreSQL
POSTGRES_DB=links_db
POSTGRES_USER=links_user
POSTGRES_PASSWORD=change-me-in-production
# Frontend
NEXT_PUBLIC_API_URL=http://localhost:8000
# Security (basic)
DJANGO_SECURE_SSL_REDIRECT=False
DJANGO_SECURE_HSTS_SECONDS=0
EOF
success ".env файл создан с базовыми настройками"
warning "ВАЖНО: Смените пароли в продакшене!"
fi
# Определяем Docker Compose команду
if command -v docker-compose &> /dev/null; then
COMPOSE_CMD="docker-compose"
elif docker compose version &> /dev/null 2>&1; then
COMPOSE_CMD="docker compose"
else
echo "❌ Docker Compose не найден"
exit 1
fi
log "Используется: $COMPOSE_CMD"
# Остановка существующих контейнеров
log "Остановка существующих контейнеров..."
$COMPOSE_CMD down 2>/dev/null || true
# Сборка
log "Сборка контейнеров..."
$COMPOSE_CMD build
# Запуск
log "Запуск сервисов..."
$COMPOSE_CMD up -d
# Ожидание запуска
log "Ожидание запуска сервисов..."
sleep 15
# Миграции
log "Применение миграций..."
$COMPOSE_CMD exec -T web python manage.py migrate
# Создание суперпользователя
log "Создание суперпользователя..."
$COMPOSE_CMD exec -T web python manage.py shell << '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 создан')
print('🔑 Пароль: admin123')
print('⚠️ Смените пароль после входа!')
else:
print(' Суперпользователь уже существует')
EOF
# Проверка статуса
echo ""
log "Проверка статуса сервисов..."
$COMPOSE_CMD ps
echo ""
success "Быстрое развертывание завершено!"
echo ""
echo "🌐 Сайт доступен по адресу:"
echo " Frontend: http://localhost:3000"
echo " Backend: http://localhost:8000"
echo " Admin: http://localhost:8000/admin"
echo ""
echo "👤 Учетные данные:"
echo " Логин: admin"
echo " Пароль: admin123"
echo ""
warning "Это базовое развертывание без SSL и расширенной безопасности"
echo "💡 Для полного развертывания используйте: make deploy"