Files
links/scripts/pre-deploy-check.sh
Andrey K. Choi 6a2bc06fb9
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.
2025-11-04 20:18:50 +09:00

260 lines
9.1 KiB
Bash
Executable File
Raw Permalink Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/bin/bash
# Pre-deployment system check for CatLink
# Проверяет готовность системы к развертыванию
set -e
# Цвета
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
NC='\033[0m'
success() { echo -e "${GREEN}$1${NC}"; }
warning() { echo -e "${YELLOW}⚠️ $1${NC}"; }
error() { echo -e "${RED}$1${NC}"; }
info() { echo -e "${BLUE} $1${NC}"; }
ERRORS=0
WARNINGS=0
check_and_report() {
if $1; then
success "$2"
else
error "$2"
((ERRORS++))
fi
}
check_and_warn() {
if $1; then
success "$2"
else
warning "$2"
((WARNINGS++))
fi
}
echo "🔍 ===== CatLink Pre-Deployment Check ====="
echo ""
# Проверка операционной системы
info "Проверка операционной системы..."
OS=$(lsb_release -si 2>/dev/null || echo "Unknown")
VERSION=$(lsb_release -sr 2>/dev/null || echo "Unknown")
echo " OS: $OS $VERSION"
# Проверка архитектуры
ARCH=$(uname -m)
echo " Architecture: $ARCH"
# Проверка прав sudo
check_and_report "sudo -n true 2>/dev/null" "Права sudo доступны"
# Проверка свободного места
info "Проверка дискового пространства..."
DISK_SPACE=$(df / | awk 'NR==2 {print $4}')
DISK_SPACE_GB=$((DISK_SPACE / 1024 / 1024))
echo " Свободно: ${DISK_SPACE_GB}GB"
if [ $DISK_SPACE_GB -lt 5 ]; then
error "Недостаточно места на диске (минимум 5GB)"
((ERRORS++))
elif [ $DISK_SPACE_GB -lt 10 ]; then
warning "Мало места на диске (рекомендуется минимум 10GB)"
((WARNINGS++))
else
success "Достаточно места на диске"
fi
# Проверка RAM
info "Проверка оперативной памяти..."
RAM_MB=$(free -m | awk 'NR==2{print $2}')
RAM_GB=$((RAM_MB / 1024))
echo " RAM: ${RAM_GB}GB (${RAM_MB}MB)"
if [ $RAM_MB -lt 1024 ]; then
error "Недостаточно RAM (минимум 1GB)"
((ERRORS++))
elif [ $RAM_MB -lt 2048 ]; then
warning "Мало RAM (рекомендуется минимум 2GB)"
((WARNINGS++))
else
success "Достаточно RAM"
fi
# Проверка Docker
echo ""
info "Проверка Docker..."
check_and_report "command -v docker >/dev/null 2>&1" "Docker установлен"
if command -v docker >/dev/null 2>&1; then
DOCKER_VERSION=$(docker --version | cut -d' ' -f3 | cut -d',' -f1)
echo " Версия Docker: $DOCKER_VERSION"
check_and_report "docker ps >/dev/null 2>&1" "Docker daemon запущен"
check_and_report "docker info | grep -q 'Server Version'" "Docker доступен без sudo"
fi
# Проверка Docker Compose
# Проверка Docker Compose
echo ""
info "Проверка Docker Compose..."
# Проверяем Docker Compose v1 или v2
if command -v docker-compose >/dev/null 2>&1; then
COMPOSE_VERSION=$(docker-compose --version | cut -d' ' -f3 | cut -d',' -f1)
echo " Версия Docker Compose v1: $COMPOSE_VERSION"
success "Docker Compose v1 установлен"
elif docker compose version >/dev/null 2>&1; then
COMPOSE_VERSION=$(docker compose version --short 2>/dev/null || docker compose version | head -1 | cut -d' ' -f4)
echo " Версия Docker Compose v2: $COMPOSE_VERSION"
success "Docker Compose v2 установлен"
else
error "Docker Compose не установлен"
((ERRORS++))
fi
# Проверка портов
echo ""
info "Проверка портов..."
check_port() {
! netstat -tuln 2>/dev/null | grep -q ":$1 " && ! ss -tuln 2>/dev/null | grep -q ":$1 "
}
check_and_warn "check_port 80" "Порт 80 свободен"
check_and_warn "check_port 443" "Порт 443 свободен"
check_and_warn "check_port 3000" "Порт 3000 свободен"
check_and_warn "check_port 8000" "Порт 8000 свободен"
check_and_warn "check_port 5432" "Порт 5432 свободен"
# Проверка nginx
echo ""
info "Проверка nginx..."
if command -v nginx >/dev/null 2>&1; then
NGINX_VERSION=$(nginx -v 2>&1 | cut -d' ' -f3)
success "nginx установлен ($NGINX_VERSION)"
if systemctl is-active --quiet nginx; then
warning "nginx уже запущен (может потребоваться перенастройка)"
else
success "nginx остановлен (готов к настройке)"
fi
else
warning "nginx не установлен (будет установлен автоматически)"
fi
# Проверка certbot
check_and_warn "command -v certbot >/dev/null 2>&1" "certbot установлен (будет установлен при необходимости)"
# Проверка Python
echo ""
info "Проверка Python..."
check_and_report "command -v python3 >/dev/null 2>&1" "Python 3 установлен"
if command -v python3 >/dev/null 2>&1; then
PYTHON_VERSION=$(python3 --version | cut -d' ' -f2)
echo " Версия Python: $PYTHON_VERSION"
fi
# Проверка openssl
check_and_report "command -v openssl >/dev/null 2>&1" "OpenSSL установлен"
# Проверка файлов проекта
echo ""
info "Проверка файлов проекта..."
check_and_report "[ -f 'docker-compose.yml' ]" "docker-compose.yml найден"
check_and_report "[ -f 'Makefile' ]" "Makefile найден"
check_and_report "[ -d 'backend' ]" "Директория backend найдена"
check_and_report "[ -d 'frontend' ]" "Директория frontend найдена"
# Проверка git
if [ -d ".git" ]; then
success "Git репозиторий найден"
BRANCH=$(git branch --show-current 2>/dev/null || echo "unknown")
echo " Текущая ветка: $BRANCH"
if git status --porcelain | grep -q .; then
warning "Есть неcommitted изменения"
else
success "Рабочая директория чистая"
fi
else
warning "Не Git репозиторий"
fi
# Проверка интернет соединения
echo ""
info "Проверка интернет соединения..."
check_and_report "ping -c 1 8.8.8.8 >/dev/null 2>&1" "Интернет соединение доступно"
check_and_report "ping -c 1 docker.io >/dev/null 2>&1" "Docker Hub доступен"
# Проверка DNS
if command -v nslookup >/dev/null 2>&1; then
check_and_report "nslookup google.com >/dev/null 2>&1" "DNS работает"
fi
# Проверка firewall
echo ""
info "Проверка firewall..."
if command -v ufw >/dev/null 2>&1; then
if ufw status | grep -q "Status: active"; then
warning "UFW активен (может блокировать порты)"
echo " Убедитесь что порты 80, 443 открыты"
else
info "UFW неактивен"
fi
fi
# Проверка SELinux (если есть)
if command -v getenforce >/dev/null 2>&1; then
SELINUX_STATUS=$(getenforce 2>/dev/null || echo "Unknown")
if [ "$SELINUX_STATUS" = "Enforcing" ]; then
warning "SELinux в режиме Enforcing (может блокировать Docker)"
else
info "SELinux: $SELINUX_STATUS"
fi
fi
# Итоговая сводка
echo ""
echo "📊 ===== ИТОГОВАЯ СВОДКА ====="
echo "Ошибки: $ERRORS, Предупреждения: $WARNINGS"
echo ""
if [ $ERRORS -eq 0 ] && [ $WARNINGS -eq 0 ]; then
success "Система полностью готова к развертыванию!"
echo ""
echo "🚀 Можете запускать: make deploy"
EXIT_CODE=0
elif [ $ERRORS -eq 0 ]; then
warning "Система готова к развертыванию с предупреждениями ($WARNINGS)"
echo ""
echo "⚡ Можете запускать: make deploy"
echo " (предупреждения будут обработаны автоматически)"
echo ""
echo "📋 Найденные предупреждения не критичны:"
echo " - Мало RAM: рекомендуется 2GB, но 1GB достаточно для базовой работы"
echo " - Другие предупреждения можно проигнорировать"
EXIT_CODE=0
else
error "Обнаружены критические проблемы ($ERRORS ошибок, $WARNINGS предупреждений)"
echo ""
echo "🔧 Исправьте ошибки перед развертыванием:"
echo " - Установите недостающие компоненты"
echo " - Освободите дисковое пространство"
echo " - Настройте права доступа"
EXIT_CODE=1
fi
echo ""
echo "💡 Полезные команды:"
echo " make help - Показать все доступные команды"
echo " make deploy - Запустить полное развертывание"
echo " make security-audit - Проверить безопасность"
echo " make logs - Посмотреть логи"
exit $EXIT_CODE